Дельта-кодирование | это... Что такое Дельта-кодирование? (original) (raw)

Дельта-кодирование (англ. Delta encoding) — способ представления данных в виде разницы (дельты) между последовательными данными вместо самих данных.

Пожалуй, наиболее простой пример заключается в сохранении значений байтов как различия (дельты) между последовательными значениями, в отличие от самих значений. Поэтому вместо 2, 4, 6, 9, 7, мы будем сохранять 2, 2, 2, 3, −2. Это не очень полезно в случае, когда используется само по себе, но может помочь в случае дальнейшей компрессии этих данных, в которых часто встречаются повторяющиеся значения. Например, звуковой формат IFF 8SVX применяет это кодирование к чистым звуковым данным перед тем, как применять к ним компрессию. Только 8-битные звуковые семплы хорошо сжимаются в случае дельта-кодирования, а в случае 16-битных и выше семплов этот метод работает хуже. Поэтому, алгоритмы компрессии часто выбирают дельта-кодирование только тогда, когда сжатие с ним лучше, чем без него. Однако, в сжатии видео дельта-фреймы могут значительно уменьшать размер фрейма, и используются практически в каждом видеокодеке.

Вариация дельта-кодирования, которая кодирует различия между префиксами или суффиксами строк, называется инкрементным кодированием. Оно в частности эффективно для отсортированных списков с малыми различиями между строками, такими, например, как список слов из словаря.

В дельта-кодированной передаче по сети, где только единичная копия файла доступна на каждом конце коммуникационного канала, используются специальные коды коррекции ошибок для обнаружения того, какие части файла изменились со времени предыдущей версии.

Дельта-кодирование применяется как предварительный этап для многих алгоритмов сжатия, к примеру RLE, и в инвертированных индексах поисковых программ. Природа данных, которые будут закодированы, значительно влияет на эффективность сжатия. Дельта-кодирование повышает коэффициент сжатия в том случае, когда данные имеют маленькую или постоянную вариацию (как, к примеру, градиент на изображении); для данных, сгенерированных генератором случайных чисел с равномерным распределением, коэффициент сжатия изменится не сильно.

Дельта-кодирование делает невозможным произвольный доступ к данным, так как для обращения к элементу массива необходимо просуммировать значения всех предыдущих. Если это все же необходимо, применяется блочный вариант дельта-кодирования, в котором кодируются блоки некоторой заданной длины. Тогда необходимо лишь просуммировать значения с начала блока, которому принадлежит искомый элемент, но не всего файла. Размер блока выбирается в зависимости от приложения, обычно по результатам хронометража.

Diff-кодирование

Не стоит путать дельта-кодирование с diff-кодированием. Если дельта-кодирование находит разницу между элементами одной последовательности, то diff-кодирование сравнивает два разных источника данных, указывая различия между ними. Diff-кодирование реализовано в стандартной Unix-утилите diff, а также для сокращения объема интернет-трафика в протоколе HTTP согласно RFC 3229.

Примеры реализации

Следующий код на Си осуществляет простую форму in-place дельта-кодирования и декодирования:

#include <sys/types.h>

void delta_encode(char *bp, size_t n) { char last = 0, tmp; int i;

    for (i = 0; i < n; ++i) {
            tmp = bp[i];
            bp[i] -= last;
            last = tmp;
    }

}

void delta_decode(char *bp, size_t n) { char last = 0; int i;

    for (i = 0; i < n; ++i) {
            bp[i] += last;
            last = bp[i];
    }

}

См. также

Просмотр этого шаблона Методы сжатия
Теория Информация Собственная · Взаимная · Энтропия · Условная энтропия · Сложность · Избыточность Единицы измерения Бит · Нат · Ниббл · Хартли · Формула Хартли
Без потерь Энтропийное сжатие Алгоритм Хаффмана · Адаптивный алгоритм Хаффмана · Алгоритм Шеннона — Фано · Арифметическое кодирование (Интервальное) · Коды Голомба · Дельта · Универсальный код (Элиаса · Фибоначчи) Словарные методы RLE · Deflate · LZ (LZ77/LZ78 · LZSS · LZW · LZWL · LZO · LZMA · LZX · LZRW · LZJB · LZT) Прочее RLE · CTW · BWT · MTF · PPM · DMC
Аудио Теория Свёртка · PCM · Алиасинг · Дискретизация · Теорема Котельникова Методы LPC (LAR · LSP) · WLPC · CELP · ACELP · A-закон · μ-закон · MDCT · Преобразование Фурье · Психоакустическая модель Прочее Компрессор аудиосигнала · Сжатие речи · Полосное кодирование
Изображения Термины Цветовое пространство · Пиксель · Субдискретизация насыщенности · Артефакты сжатия Методы RLE · DPCM · Фрактальный · Вейвлетный · EZW · SPIHT · LP · ДКП · ПКЛ Прочее Битрейт · Test images · PSNR · Квантование
Видео Термины Характеристики видео · Кадр · Типы кадров · Качество видео Методы Компенсация движения · ДКП · Квантование · Вейвлетный Прочее Видеокодек · Rate distortion theory (CBR · ABR · VBR)
Просмотр этого шаблона Системы управления версиями (категория)
Только локальные RCSSCCS Revision controlled project visualization-2010-24-02.svg
Клиент-серверные CMVCCVSPerforceRational ClearCase (1992) • SourceGear VaultSubversion (SVN) • Team Foundation ServerVisual SourceSafe
Распределённые BazaarDarcsFossilGitMercurialTeamWare
ВетвиДельта-кодированиеФорк