Гамма-кодирование Элиаса
Элиас код или гамма-код Элиаса — универсальный код , кодирующий положительные целые числа, разработанный Питером Элиасом . [1] : 197, 199 Чаще всего он используется при кодировании целых чисел, верхняя граница которых не может быть определена заранее.
Кодирование
[ редактировать ]Чтобы закодировать число x ≥ 1:
- Позволять быть наивысшей степенью двойки, которую он содержит, поэтому 2 Н ≤ х < 2 Н +1 .
- Выпишите ноль битов, тогда
- Добавьте двоичную форму , -битовое двоичное число.
Эквивалентный способ выразить тот же процесс:
- Кодировать в унарном ; то есть как нули, за которыми следует единица.
- Добавьте оставшиеся двоичные цифры этому представлению .
Чтобы представить число , Элиас гамма (γ) использует биты. [1] : 199
Код начинается ( предполагаемое распределение вероятностей для ясности добавлено для кода):
Число | Двоичный | γ-кодирование | Подразумеваемая вероятность |
---|---|---|---|
1 = 2 0 + 0 | 1 | 1 | 1/2 |
2 = 2 1 + 0 | 1 0 | 0 1 0 | 1/8 |
3 = 2 1 + 1 | 1 1 | 0 1 1 | 1/8 |
4 = 2 2 + 0 | 1 00 | 00 1 00 | 1/32 |
5 = 2 2 + 1 | 1 01 | 00 1 01 | 1/32 |
6 = 2 2 + 2 | 1 10 | 00 1 10 | 1/32 |
7 = 2 2 + 3 | 1 11 | 00 1 11 | 1/32 |
8 = 2 3 + 0 | 1 000 | 000 1 000 | 1/128 |
9 = 2 3 + 1 | 1 001 | 000 1 001 | 1/128 |
10 = 2 3 + 2 | 1 010 | 000 1 010 | 1/128 |
11 = 2 3 + 3 | 1 011 | 000 1 011 | 1/128 |
12 = 2 3 + 4 | 1 100 | 000 1 100 | 1/128 |
13 = 2 3 + 5 | 1 101 | 000 1 101 | 1/128 |
14 = 2 3 + 6 | 1 110 | 000 1 110 | 1/128 |
15 = 2 3 + 7 | 1 111 | 000 1 111 | 1/128 |
16 = 2 4 + 0 | 1 0000 | 0000 1 0000 | 1/512 |
17 = 2 4 + 1 | 1 0001 | 0000 1 0001 | 1/512 |
Декодирование
[ редактировать ]Чтобы декодировать целое число, закодированное гамма-гаммой Элиаса:
- Считайте и посчитайте 0 из потока, пока не дойдете до первой 1. Назовите это количество нулей N .
- Учитывая тот, который был достигнут, является первой цифрой целого числа со значением 2 Н , прочитайте оставшиеся N цифр целого числа.
Использование
[ редактировать ]Гамма-кодирование используется в приложениях, где наибольшее закодированное значение заранее неизвестно, или для сжатия данных. [ сомнительно – обсудить ] в котором малые значения встречаются гораздо чаще, чем большие значения.
Гамма-кодирование является строительным блоком дельта-кода Элиаса .
Обобщения
[ редактировать ]Гамма-кодирование не кодирует ноль или отрицательные целые числа.Один из способов обработки нуля — добавить 1 перед кодированием, а затем вычесть 1 после декодирования.Другой способ — поставить перед каждым ненулевым кодом цифру 1, а затем закодировать ноль как одиночный 0.
Один из способов кодирования всех целых чисел — установить биекцию , отображающую целые числа (0, −1, 1, −2, 2, −3, 3, ...) в (1, 2, 3, 4, 5, 6). , 7, ...) перед кодированием. В программном обеспечении это проще всего сделать путем сопоставления неотрицательных входов с нечетными выходами, а отрицательных входов с четными выходами, поэтому младший бит становится битом с инвертированным знаком :
Экспоненциальное кодирование Голомба обобщает гамма-код на целые числа с «более плоским» степенным распределением, точно так же, как кодирование Голомба обобщает унарный код.Он включает в себя деление числа на положительный делитель, обычно степень 2, запись гамма-кода для числа, превышающего частное, и запись остатка в обычном двоичном коде.
См. также
[ редактировать ]- Дельта-кодирование Элиаса (d) – универсальный код, кодирующий положительные целые числа.
- Кодирование Элиаса омега (?) - Универсальный код, кодирующий положительные целые числа.
- Posit (числовой формат) — вариант чисел с плавающей запятой в компьютерах.
Ссылки
[ редактировать ]- ^ Jump up to: а б Элиас, Питер (март 1975 г.). «Универсальные наборы кодовых слов и представления целых чисел». Транзакции IEEE по теории информации . 21 (2): 194–203. дои : 10.1109/тит.1975.1055349 .
Дальнейшее чтение
[ редактировать ]- Саюд, Халид (2003). «Гамма-коды Левенштейна и Элиаса». Справочник по сжатию без потерь . Эльзевир . ISBN 978-0-12-620861-0 .