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