Дельта-кодування – це

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

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

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

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

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

Diff-кодування

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

Приклади реалізації

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