stringtranslate.com

Гамма-кодирование Элиаса

Код Элиаса или гамма-код Элиасауниверсальный код , кодирующий положительные целые числа, разработанный Питером Элиасом . [1] : 197, 199  Он чаще всего используется при кодировании целых чисел, верхняя граница которых не может быть определена заранее.

Кодирование

Чтобы закодировать число x  ≥ 1:

  1. Пусть — наибольшая степень числа 2, которую он содержит, так что 2 Nx < 2 N +1 .
  2. Выпишите нулевые биты, затем
  3. Добавьте двоичную форму - двоичное число длиной 3 бита.

Эквивалентный способ выражения того же процесса:

  1. Закодируйте в унарной системе счисления , то есть как нули, за которыми следует единица.
  2. Добавьте оставшиеся двоичные цифры к этому представлению .

Для представления числа гамма Элиаса (γ) использует биты. [1] : 199 

Код начинается (для ясности добавлено предполагаемое распределение вероятностей для кода):

Расшифровка

Чтобы декодировать целое число, закодированное гамма-кодом Элиаса:

  1. Считайте и подсчитайте нули из потока, пока не достигнете первой единицы. Назовите это количество нулей N.
  2. Считая полученную цифру первой цифрой целого числа со значением 2 N , прочитайте оставшиеся N цифр целого числа.

Использует

Гамма-кодирование используется в приложениях, где наибольшее закодированное значение заранее неизвестно, или для сжатия данных [ сомнительнообсудить ] , в которых малые значения встречаются гораздо чаще, чем большие.

Гамма-кодирование является строительным блоком дельта-кода Элиаса .

Обобщения

Гамма-кодирование не кодирует ноль или отрицательные целые числа. Один из способов обработки нуля — добавить 1 перед кодированием, а затем вычесть 1 после декодирования. Другой способ — добавить к каждому ненулевому коду префикс 1, а затем кодировать ноль как один 0.

Один из способов кодирования всех целых чисел — это настройка биекции , сопоставляющей целые числа (0, −1, 1, −2, 2, −3, 3, ...) с (1, 2, 3, 4, 5, 6, 7, ...) перед кодированием. В программном обеспечении это проще всего сделать, сопоставив неотрицательные входы с нечетными выходами, а отрицательные входы с четными выходами, так что младший бит становится инвертированным битом знака :

Экспоненциально-голомбовское кодирование обобщает гамма-код на целые числа с "более плоским" степенным распределением, так же как кодирование Голомба обобщает унарный код. Оно включает деление числа на положительный делитель, обычно степень 2, запись гамма-кода на единицу больше частного и запись остатка в обычном двоичном коде.

Смотрите также

Ссылки

  1. ^ ab Элиас, Питер (март 1975). «Универсальные наборы кодовых слов и представления целых чисел». Труды IEEE по теории информации . 21 (2): 194–203. doi :10.1109/tit.1975.1055349.

Дальнейшее чтение