El popular algoritmo DEFLATE utiliza la codificación Huffman sobre Lempel-Ziv.
En general, si tenemos una fuente de datos aleatoria (= entropía de 1 bit / bit) , es probable que ninguna codificación, incluida Huffman, la comprima en promedio. Si Lempel-Ziv fuera "perfecto" (que se acerca a la mayoría de las clases de fuentes, ya que la longitud llega al infinito), la codificación de publicaciones con Huffman no ayudaría. Por supuesto, Lempel-Ziv no es perfecto, al menos con una longitud finita, por lo que queda algo de redundancia.
Es esta redundancia restante la que la codificación Huffman elimina parcialmente y, por lo tanto, mejora la compresión.
Mi pregunta es: ¿por qué esta redundancia restante se elimina con éxito mediante la codificación de Huffman y no con LZ? ¿Qué propiedades de Huffman versus LZ hacen que esto suceda? ¿Simplemente ejecutar LZ nuevamente (es decir, codificar los datos comprimidos de LZ con LZ por segunda vez) lograría algo similar? ¿Si no, porque no? Del mismo modo, primero comprimir con Huffman y luego con LZ funcionaría, y si no, ¿por qué?
ACTUALIZACIÓN: está claro que incluso después de LZ, quedará algo de redundancia. Varias personas han hecho ese punto. Lo que no está claro es: ¿por qué Huffman aborda mejor esa redundancia restante que LZ? ¿Qué tiene de especial en contraste con la fuente original de redundancia, donde LZ funciona mejor que Huffman?