Экспоненциальный код Голомба (или просто код Exp-Голомба ) — это тип универсального кода . Чтобы закодировать любое неотрицательное целое число x с помощью кода exp-Голомба:
Первые несколько значений кода:
0 ⇒ 1 ⇒ 1 1 ⇒ 10 ⇒ 010 2 ⇒ 11 ⇒ 011 3 ⇒ 100 ⇒ 00100 4 ⇒ 101 ⇒ 00101 5 ⇒ 110 ⇒ 00110 6 ⇒ 111 ⇒ 00111 7 ⇒ 1000 ⇒ 0001000 8 ⇒ 1001 ⇒ 0001001... [1]
В приведенных выше примерах рассмотрим случай 3. Для 3 x+1 = 3 + 1 = 4. 4 в двоичной системе счисления равно «100». «100» имеет 3 бита, а 3-1 = 2. Следовательно, добавьте 2 нуля перед «100», что равно «00100».
Аналогично рассмотрим 8. «8 + 1» в двоичной системе равно «1001». «1001» имеет 4 бита, а 4-1 равно 3. Следовательно, добавьте 3 нуля перед 1001, что равно «0001001».
Это идентично гамма- коду Элиаса x +1, что позволяет кодировать 0. [2]
Кодирование Exp-Golomb используется в стандартах сжатия видео H.264/MPEG-4 AVC и H.265 High Efficiency Video Coding , в которых также существует вариант кодирования знаковых чисел путем присвоения двоичному кодовому слову «0» значения 0 и назначения последующих кодовых слов входным значениям возрастающей величины (и переменного знака, если поле может содержать отрицательное число):
0 ⇒ 0 ⇒ 1 ⇒ 1 1 ⇒ 1 ⇒ 10 ⇒ 010−1 ⇒ 2 ⇒ 11 ⇒ 011 2 ⇒ 3 ⇒ 100 ⇒ 00100−2 ⇒ 4 ⇒ 101 ⇒ 00101 3 ⇒ 5 ⇒ 110 ⇒ 00110−3 ⇒ 6 ⇒ 111 ⇒ 00111 4 ⇒ 7 ⇒ 1000 ⇒ 0001000−4 ⇒ 8 ⇒ 1001 ⇒ 0001001.... [1]
Другими словами, неположительное целое число x ≤0 отображается в четное целое число −2 x , тогда как положительное целое число x >0 отображается в нечетное целое число 2 x −1.
Кодирование Экспоненциального Голомба также используется в видеокодеке Дирака . [3]
Чтобы закодировать большие числа меньшим количеством бит (за счет использования большего количества бит для кодирования меньших чисел), это можно обобщить, используя неотрицательный целочисленный параметр k . Чтобы закодировать неотрицательное целое число x в коде порядка k exp-Голомба:
Эквивалентный способ выражения этого: