WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

Дельта-код Элиаса  — это универсальный код для кодирования положительных целых чисел, разработанный Питером Элиасом.

Кодирование

Алгоритм кодирования числа N:

  1. Сосчитать  — количество значащих битов в двоичном представлении числа .
  2. Сосчитать  — количество значащих битов в двоичном представлении числа .
  3. Записать нулей и одну единицу.
  4. Дописать  — младших битов двоичного представления числа без старшей единицы ( ).
  5. Дописать  — младших битов двоичного представления числа без старшей единицы ( ).

Иначе этот алгоритм можно описать так:

  1. Сосчитать  — количество значащих битов в двоичном представлении числа .
  2. Закодировать с помощью гамма-кода Элиаса (γ(L)).
  3. Дописать двоичное представление числа без старшей единицы.

То есть и в дельта-, и в гамма-коде Элиаса число кодируется в виде экспоненты (разрядности числа — количества значащих битов) и мантиссы (собственно значащих битов), но в гамма-коде экспонента записывается в унарном виде, а в дельта-коде к ней ещё раз применяется гамма-кодирование.

Пример кодирования числа 10:

  1. В двоичном представлении числа 4 значащих бита ( ).
  2. В двоичном представлении числа 3 значащих бита ( ).
  3. Записываем нуля и одну единицу → 001.
  4. Дописывем биты числа без старшей единицы → 00.
  5. Дописывем биты числа без старшей единицы → 010.
  6. Результат — 00100010.

Результаты кодирования первых 17 чисел (для сравнения показан также гамма-код):

NLMДельта-кодДлина,
бит
Предполагаемая
вероятность
Гамма-кодДлина,
бит
γ(L)
1 1 1111/211
2 2 201 0041/160103
3 2 201 0141/160113
4 3 201 10051/32001005
5 3 201 10151/32001015
6 3 201 11051/32001105
7 3 201 11151/32001115
8 4 3001 0000081/25600010007
9 4 3001 0000181/25600010017
10 4 3001 0001081/25600010107
11 4 3001 0001181/25600010117
12 4 3001 0010081/25600011007
13 4 3001 0010181/25600011017
14 4 3001 0011081/25600011107
15 4 3001 0011181/25600011117
16 5 3001 01000091/5120000100009
17 5 3001 01000191/5120000100019

С помощью дополнительной обработки исходных значений дельта-код можно использовать также для кодирования нулевых и отрицательных целых чисел (см.: Гамма-код Элиаса#Обобщение).

Декодирование

Алгоритм декодирования числа из дельта-кода Элиаса:

  1. Сосчитать  — количество нулей во входном потоке до первой единицы.
  2. За единицей следуют младших битов числа , прочитать их и добавить к результату значение . Если биты во входном потоке записаны от старших к младшим, то первую единицу после ведущей серии нулей можно читать как часть двоичного представления числа , в этом случае добавлять отдельным шагом нет необходимости.
  3. Следом идут младших битов числа , прочитать их и добавить к результату значение .

Пример декодирования последовательности битов 001010001:

  1. Прочитать из потока 001 и определить, что в начале 2 ведущих нуля ( ).
  2. Прочитать из потока следующие бита → 01; это даёт .
  3. Прочитать из потока следующие бита → 0001; это даёт .

Эффективность

Можно видеть, что для чисел 2, 3, 8…15 дельта-код длиннее гамма-кода, для чисел 1, 4…7, 16…31 длина дельта-кода совпадает с длиной гамма-кода, для всех остальных чисел дельта-код короче гамма-кода. Соответственно, дельта-код тем менее выгоднее гамма-кода, чем неравномернее распределение вероятностей кодируемых чисел и чем более вероятны их значения при приближении к нулю.

См. также

Литература

  • Д. Ватолин, А. Ратушняк, М. Смирнов, В. Юкин. Раздел 1. Методы сжатия без потерь. Глава 1. Кодирование источников данных без памяти. Разделение мантисс и экспонент // Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео. М.: Диалог-МИФИ, 2002. — С. 23—24. — 384 с. ISBN 5-86404-170-x.
  • Elias, Peter (March 1975). “Universal codeword sets and representations of the integers”. IEEE Transactions on Information Theory. 21 (2): 194—203. DOI:10.1109/tit.1975.1055349.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2025
WikiSort.ru - проект по пересортировке и дополнению контента Википедии