<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%D0%94%D0%B5%D0%BB%D1%8C%D1%82%D0%B0-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5</id>
	<title>Дельта-кодирование - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%D0%94%D0%B5%D0%BB%D1%8C%D1%82%D0%B0-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%94%D0%B5%D0%BB%D1%8C%D1%82%D0%B0-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;action=history"/>
	<updated>2026-07-18T09:45:18Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%94%D0%B5%D0%BB%D1%8C%D1%82%D0%B0-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=46151&amp;oldid=prev</id>
		<title>imported&gt;Gromolyak: /* Примеры реализации */</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%94%D0%B5%D0%BB%D1%8C%D1%82%D0%B0-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=46151&amp;oldid=prev"/>
		<updated>2026-02-04T23:10:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Примеры реализации&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{другие значения термина|Кодирование|Кодирование}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Дельта-кодирование&amp;#039;&amp;#039;&amp;#039; ({{lang-en|Delta encoding}}) — способ представления [[данные|данных]] в виде разницы ([[Дельта (буква)|дельты]]) между последовательными данными вместо самих данных.&lt;br /&gt;
&lt;br /&gt;
Пожалуй, наиболее простой пример заключается в сохранении значений байтов как различия (дельты) между последовательными значениями, в отличие от самих значений. Поэтому вместо 2, 4, 6, 9, 7, мы будем сохранять 2, 2, 2, 3, −2. Это не очень полезно в случае, когда используется само по себе, но может помочь в случае дальнейшей компрессии этих данных, в которых часто встречаются повторяющиеся значения. Например, звуковой формат [[Interchange File Format|IFF]] [[8SVX]] применяет это кодирование к чистым звуковым данным перед тем, как применять к ним компрессию. Только 8-битные звуковые [[семпл]]ы хорошо сжимаются в случае дельта-кодирования, а в случае 16-битных и выше семплов этот метод работает хуже. Поэтому алгоритмы компрессии часто выбирают дельта-кодирование только тогда, когда сжатие с ним лучше, чем без него. Однако, в сжатии видео дельта-фреймы могут значительно уменьшать размер фрейма и используются практически в каждом видеокодеке.&lt;br /&gt;
&lt;br /&gt;
Вариация дельта-кодирования, которая кодирует различия между [[Префикс (информатика)|префиксами]] или [[суффикс]]ами [[Строковый тип|строк]], называется [[инкрементное кодирование|инкрементным кодированием]]. Оно в частности эффективно для отсортированных списков с малыми различиями между строками, такими, например, как список [[слово|слов]] из [[словарь|словаря]].&lt;br /&gt;
&lt;br /&gt;
В дельта-кодированной передаче по сети, где только единичная копия файла доступна на каждом конце коммуникационного канала, используются специальные [[Обнаружение и исправление ошибок|коды коррекции ошибок]] для обнаружения того, какие части файла изменились со времени предыдущей версии.&lt;br /&gt;
&lt;br /&gt;
Дельта-кодирование применяется как предварительный этап для многих алгоритмов сжатия, к примеру [[RLE]], и в [[инвертированный индекс|инвертированных индексах]] поисковых программ. Природа данных, которые будут закодированы, значительно влияет на эффективность сжатия. Дельта-кодирование повышает [[коэффициент сжатия]] в том случае, когда данные имеют маленькую или постоянную вариацию (как, к примеру, градиент на изображении); для данных, сгенерированных генератором случайных чисел с равномерным распределением, коэффициент сжатия изменится не сильно.&lt;br /&gt;
&lt;br /&gt;
Дельта-кодирование делает невозможным произвольный доступ к данным, так как для обращения к элементу массива необходимо просуммировать значения всех предыдущих. Если это все же необходимо, применяется блочный вариант дельта-кодирования, в котором кодируются блоки некоторой заданной длины. Тогда необходимо лишь просуммировать значения с начала блока, которому принадлежит искомый элемент, но не всего файла. Размер блока выбирается в зависимости от приложения, обычно по результатам хронометража.&lt;br /&gt;
&lt;br /&gt;
== Diff-кодирование ==&lt;br /&gt;
Следует различать дельта-кодирование и &amp;#039;&amp;#039;&amp;#039;diff-кодирование&amp;#039;&amp;#039;&amp;#039;. Дельта-кодирование находит разницу между элементами одной последовательности, а diff-кодирование сравнивает два разных источника данных, указывая различия между ними. Diff-кодирование реализовано в стандартной [[Unix]]-утилите [[diff]], а также для сокращения объёма интернет-трафика в протоколе HTTP согласно RFC 3229.&lt;br /&gt;
&lt;br /&gt;
== Примеры реализации ==&lt;br /&gt;
Следующий код на [[Си (язык программирования)|Си]] осуществляет простую форму in-place дельта-кодирования и декодирования:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void delta_encode(unsigned char *buffer, int length)&lt;br /&gt;
{&lt;br /&gt;
    unsigned char last = 0;&lt;br /&gt;
    for (int i = 0; i &amp;lt; length; ++i)&lt;br /&gt;
    {&lt;br /&gt;
        unsigned char current = buffer[i];&lt;br /&gt;
        buffer[i] -= last;&lt;br /&gt;
        last = current;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void delta_decode(unsigned char *buffer, int length)&lt;br /&gt;
{&lt;br /&gt;
    unsigned char last = 0;&lt;br /&gt;
    for (int i = 0; i &amp;lt; length; ++i)&lt;br /&gt;
    {&lt;br /&gt;
        buffer[i] += last;&lt;br /&gt;
        last = buffer[i];&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Дельта-модуляция]]&lt;br /&gt;
&lt;br /&gt;
{{rq|&lt;br /&gt;
{{нет источников|дата=2012-03-13}}&lt;br /&gt;
{{нет сносок|дата=2012-03-13}}&lt;br /&gt;
}}&lt;br /&gt;
{{методы сжатия}}&lt;br /&gt;
{{Системы управления версиями}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы сжатия без потерь]]&lt;br /&gt;
[[Категория:Теория кодирования]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Gromolyak</name></author>
	</entry>
</feed>