Un código de Golomb exponencial (o simplemente código de Golomb exp ) es un tipo de código universal . Para codificar cualquier entero no negativo x utilizando el código de Golomb exp:
Los primeros valores del código son:
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]
En los ejemplos anteriores, considere el caso 3. Para 3, x+1 = 3 + 1 = 4. 4 en binario es '100'. '100' tiene 3 bits y 3-1 = 2. Por lo tanto, agregue 2 ceros antes de '100', que es '00100'.
De manera similar, considere 8. '8 + 1' en binario es '1001'. '1001' tiene 4 bits y 4-1 es 3. Por lo tanto, agregue 3 ceros antes de 1001, que es '0001001'.
Esto es idéntico al código gamma de Elias de x +1, lo que le permite codificar 0. [2]
La codificación Exp-Golomb se utiliza en los estándares de compresión de vídeo H.264/MPEG-4 AVC y H.265 High Efficiency Video Coding , en los que también hay una variación para la codificación de números con signo, asignando el valor 0 a la palabra de código binaria '0' y asignando palabras de código subsiguientes a valores de entrada de magnitud creciente (y signo alterno, si el campo puede contener un número negativo):
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]
En otras palabras, un entero no positivo x ≤0 se asigna a un entero par −2 x , mientras que un entero positivo x >0 se asigna a un entero impar 2 x −1.
La codificación Exp-Golomb también se utiliza en el códec de vídeo Dirac . [3]
Para codificar números mayores en menos bits (a costa de usar más bits para codificar números menores), esto se puede generalizar usando un parámetro entero no negativo k . Para codificar un entero no negativo x en un código exp-Golomb de orden k :
Una forma equivalente de expresar esto es: