Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Кодировка [ править ]

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

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

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

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

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

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

Расшифровка [ править ]

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

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

Использует [ редактировать ]

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

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

Обобщения [ править ]

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

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

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

См. Также [ править ]

Ссылки [ править ]

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

Дальнейшее чтение [ править ]

  • Сайуд, Халид (2003). «Гамма-коды Левенштейна и Элиаса». Справочник по сжатию без потерь . Эльзевир . ISBN 978-0-12-620861-0.