¿Qué tan bueno es el código Huffman cuando no hay letras de gran probabilidad?

21

El código de Huffman para una distribución de probabilidad p es el código de prefijo con la longitud de palabra de código promedio ponderada mínima pii , donde i es la longitud de la i ésima palabra de código. Es un teorema bien conocido que la longitud promedio por símbolo del código Huffman está entre H(p) y H(p)+1 , donde H(p)=ipilog2pi es la entropía de Shannon de la distribución de probabilidad.

El mal ejemplo canónico, donde la longitud promedio excede la entropía de Shannon en casi 1, es una distribución de probabilidad como {.999,.001} , donde la entropía es casi 0, y la longitud promedio de la palabra de código es 1. Esto da una brecha entre la entropía y la longitud de la palabra de código de casi 1 .

Pero, ¿qué sucede cuando hay un límite en la mayor probabilidad en la distribución de probabilidad? Supongamos, por ejemplo, que todas las probabilidades son menores que 12 . La brecha más grande que pude encontrar en este caso es para una distribución de probabilidad como{.499,.499,.002}, donde la entropía es levemente mayor que 1 y la longitud promedio de la palabra de código es levemente menor que 1.5, dando una brecha cercana0.5. ¿Es esto lo mejor que puedes hacer? ¿Puede dar un límite superior en el espacio que sea estrictamente menor que 1 para este caso?

Ahora, consideremos el caso donde todas las probabilidades son muy pequeñas. Supongamos que elige una distribución de probabilidad sobre M letras, cada una con probabilidad 1/M . En este caso, la brecha más grande se produce si elige M2kln2 . Aquí, obtienes una brecha de alrededor de

1+lnln2ln2ln20.08607.
¿Es esto lo mejor que puede hacer en una situación en la que todas las probabilidades son pequeñas?

Esta pregunta fue inspirada por esta pregunta de TCS Stackexchange .

Peter Shor
fuente

Respuestas:

19

Hay muchos documentos que estudian exactamente el problema que mencionas. El primero de la serie es un artículo de Gallager, "Variations on a Theme by Huffman", IEEE-IT, vol. 24, 1978, págs. 668-674. Se demuestra que la diferencia entre la longitud de palabra de código medio de un código de Huffman y la entropía (que él llama esa cantidad "redundancia") es siempre estrictamente inferior a (= probabilidad más grande de la distribución de probabilidad), en el caso de p 1 / 2 , y es menor que p + 0,086 , si p < 1 / 2 . Se conocen mejores límites, puede encontrarlos en los numerosos documentos que citan el trabajo de Gallager.pp1/2p+0.086p<1/2

Ugo
fuente
2
Manstetten ha encontrado el límite óptimo, límites estrechos en la redundancia de los códigos de Huffman .
Yuval Filmus
2

A juzgar por el límite , creo que tenía la intención de hacer una pregunta diferente ... o simplemente no especificó cómo toma el "promedio". Entonces responderé a ambas. La respuesta es no a ambas preguntas.H(p)H(p)+1

2qq+k2q1q2q+k1q+kq+kq+k2

p2q±1/2qZ.

q=7.

A+B=128,A2+B/2128,maxAZAA=52,B=765226.57627.5

Entonces , mientras que el código Huffman logra pérdida de entropía. (Por cierto, la pérdida de entropía tiene un nombre, ya sea que realice la codificación Huffman o la codificación arbitraria de : la divergencia Kullback-Liebler . Al , descubrí hace unos días, conduce a límites de Chernoff de doble cara más estrictos, como puede ver en Wikipedia para los límites de Chernoff).H(X)=(526.5+767.5)/128=7.09375(520.5760.5)/1280.99436QD(PQ)=pilogpiqi+(1pi)log1pi1qi

Carl
fuente
1
Estoy algo desconcertado por este segundo ejemplo. Si tiene 128 palabras de código, entonces hay un código con una longitud promedio de palabra 7 (de hecho, todas las longitudes de palabra tienen 7), lo que contradice su afirmación de que la entropía es 7.09375. La entropía de esta distribución (que se obtiene al tomar un promedio ponderado de y no un promedio) es 6.88, mientras que la longitud promedio del código Huffman es 7. Esto da una brecha (o divergencia Kullback-Liebler) de alrededor de 0.12, que parece ser bastante mejor que mi ejemplo, pero no cercano a 1.log2pi
Peter Shor
Y de hecho, tienes razón. Tenía la intención de preguntar sobre la longitud de la palabra de código esperada bajo la distribución de probabilidad . p
Peter Shor
Vaya, calculé mal sobre vs . Todavía queremos que ligeramente inferior a , pero algo así como , forzar las entradas menores en la fila inferior. Esto daABA2+B/22kA+2B=2kA=21/221B.
Carl
En realidad, eso sería ... pero este sistema de ecuaciones no tiene una solución positiva: parece que no podemos forzar que todo sea potencias de enteros . Entonces, en lugar de y podemos considerar, por ejemplo, para la mitad del código de Huffman y por lo demás, dando entradas ...2A+B221/2(1+x)/2k(1x)/2k+132k
Carl
Entonces, intente esto (no es óptimo; supongo que eso depende de cómo decida redondear hacia arriba o hacia abajo). entradas con probabilidad y entradas con probabilidad tiene entropía . En cambio, cambie eso a entradas con probabilidad y entradas con probabilidad . La entropía de esta distribución es que da 6.4023, mientras que la entropía del código Huffman es 7.5 bajo uniforme, yEntonces, a menos que calcule mal (y lo hago a menudo), esto me da una brecha de aproximadamente641/1281281/2567.5641/12821281/256(21/2)1/(22)7.5+(11/(2(2)))5.802(121.5)7+21.58=7.3535.0.95 .
Carl