O popular algoritmo DEFLATE usa a codificação Huffman em cima do Lempel-Ziv.
Em geral, se tivermos uma fonte aleatória de dados (= entropia de 1 bit / bit), nenhuma codificação, incluindo Huffman, provavelmente a compactará em média. Se Lempel-Ziv fosse "perfeito" (que se aproxima da maioria das classes de fontes, à medida que o comprimento chega ao infinito), a pós-codificação com Huffman não ajudaria. Obviamente, Lempel-Ziv não é perfeito, pelo menos com comprimento finito, e por isso resta alguma redundância.
É essa redundância restante que a codificação de Huffman elimina parcialmente e, assim, melhora a compactação.
Minha pergunta é: Por que essa redundância restante é eliminada com êxito pela codificação de Huffman e não pela LZ? Quais propriedades de Huffman versus LZ fazem isso acontecer? Simplesmente executar LZ novamente (ou seja, codificar os dados compactados LZ com LZ uma segunda vez) faria algo semelhante? Se não, por que não? Da mesma forma, primeiro comprimir com Huffman e depois com LZ funcionaria, e se não, por que?
ATUALIZAÇÃO: É claro que, mesmo após o LZ, alguma redundância permanecerá. Várias pessoas fizeram esse ponto. O que não está claro é: Por que a redundância restante é mais bem tratada por Huffman do que por LZ? O que há de exclusivo nisso, em contraste com a redundância de fonte original, onde o LZ funciona melhor que o Huffman?