Экспоненциальный код Голомба (или просто код Экспоненциального Голомба ) — это тип универсального кода . Чтобы закодировать любое неотрицательное целое число 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.
Кодирование Exp-Golomb также используется в видеокодеке Dirac . [3]
Чтобы кодировать большие числа меньшим количеством битов (за счет использования большего количества битов для кодирования меньших чисел), это можно обобщить, используя неотрицательный целочисленный параметр k . Чтобы закодировать неотрицательное целое число x в экспоненциальном коде Голомба порядка k :
Эквивалентный способ выразить это: