Изменения

стилевые правки, дополнение
Строка 6: Строка 6:  
# Сосчитать <math>M</math> — количество значащих битов в двоичном представлении числа <math>L</math>.
 
# Сосчитать <math>M</math> — количество значащих битов в двоичном представлении числа <math>L</math>.
 
# Записать <math>M - 1</math> нулей и одну единицу.
 
# Записать <math>M - 1</math> нулей и одну единицу.
# Записать L<sub>2</sub> — <math>M - 1</math> младших битов двоичного представления числа <math>L</math> без старшей единицы (<math>2^{M-1}</math>).
+
# Дописать L<sub>2</sub> — <math>M - 1</math> младших битов двоичного представления числа <math>L</math> без старшей единицы (<math>2^{M-1}</math>).
# Записать N<sub>2</sub> — <math>L - 1</math> младших битов двоичного представления числа <math>N</math> без старшей единицы (<math>2^{L-1}</math>).
+
# Дописать N<sub>2</sub> — <math>L - 1</math> младших битов двоичного представления числа <math>N</math> без старшей единицы (<math>2^{L-1}</math>).
    
Иначе этот алгоритм можно описать так:
 
Иначе этот алгоритм можно описать так:
Строка 16: Строка 16:  
То есть и в дельта-, и в гамма-коде Элиаса число кодируется в виде экспоненты L (разрядности числа — количества значащих битов) и мантиссы N<sub>2</sub> (собственно значащих битов), но в гамма-коде экспонента записывается в [[Унарное кодирование|унарном виде]], а в дельта-коде к ней ещё раз применяется гамма-кодирование.
 
То есть и в дельта-, и в гамма-коде Элиаса число кодируется в виде экспоненты L (разрядности числа — количества значащих битов) и мантиссы N<sub>2</sub> (собственно значащих битов), но в гамма-коде экспонента записывается в [[Унарное кодирование|унарном виде]], а в дельта-коде к ней ещё раз применяется гамма-кодирование.
   −
Результаты кодирования первых 17 чисел (для сравнения показан результат гамма-кодирования):
+
Пример кодирования числа 10:
 +
 
 +
# В двоичном представлении числа <math>N = 10</math> (1010<sub>2</sub>) 4 значащих бита (<math>L = 4</math>).
 +
# В двоичном представлении числа <math>L = 4</math> (100<sub>2</sub>) 3 значащих бита (<math>M = 3</math>).
 +
# Записываем <math>M-1 = 2</math> нуля и одну единицу → <code>001</code>.
 +
# Дописывем биты числа <math>L</math> без старшей единицы → <code>00</code>.
 +
# Дописывем биты числа <math>N</math> без старшей единицы → <code>010</code>.
 +
# Результат — <code>00100010</code>.
 +
 
 +
Результаты кодирования первых 17 чисел (для сравнения показан также гамма-код):
    
{| class="standard" align="center" style="text-align:right"
 
{| class="standard" align="center" style="text-align:right"
Строка 64: Строка 73:  
Алгоритм декодирования числа из дельта-кода Элиаса:
 
Алгоритм декодирования числа из дельта-кода Элиаса:
 
# Сосчитать <math>M</math> — количество нулей во входном потоке до первой единицы.
 
# Сосчитать <math>M</math> — количество нулей во входном потоке до первой единицы.
# За единицей следуют <math>M</math> младших битов числа <math>L</math>. Прочитать их и добавить к результату <math>2^M</math>. Если число <math>L</math> во входном потоке записано от старших битов к младшим, то первую единицу после ведущей серии нулей можно читать как часть двоичного представления числа <math>L</math>, в этом случае добавлять <math>2^M</math> отдельным шагом нет необходимости.
+
# За единицей следуют <math>M</math> младших битов числа <math>L</math>, прочитать их и добавить к результату значение <math>2^M</math>. Если биты <math>L</math> во входном потоке записаны от старших к младшим, то первую единицу после ведущей серии нулей можно читать как часть двоичного представления числа <math>L</math>, в этом случае добавлять <math>2^M</math> отдельным шагом нет необходимости.
# Следом идут <math>L - 1</math> младших битов числа <math>N</math>. Прочитать их и добавить к результату <math>2^{L-1}</math>.
+
# Следом идут <math>L - 1</math> младших битов числа <math>N</math>, прочитать их и добавить к результату значение <math>2^{L-1}</math>.
   −
Пример декодирования для <tt>001010001</tt>:
+
Пример декодирования последовательности битов <tt>001010001</tt>:
    
# Прочитать из потока <tt>001</tt> и определить, что в начале 2 ведущих нуля (<math>M = 2</math>).
 
# Прочитать из потока <tt>001</tt> и определить, что в начале 2 ведущих нуля (<math>M = 2</math>).
Анонимный участник