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?
fonte
A compactação de dados é realmente sobre duas coisas: modelagem e codificação. Os algoritmos da família LZ modelam o texto como uma concatenação de repetições exatas, que é assintoticamente ideal para muitas fontes aleatórias e razoavelmente bom para muitos textos reais. Para algumas entradas, esse modelo pode ser bastante ruim, no entanto. Por exemplo, você não pode usar LZ para compactar diretamente uma matriz de sufixos, mesmo que a matriz de sufixos seja tão compressível quanto o texto original.
Então, em resumo, Huffman vence LZ na compactação das tuplas, pois seu modelo (distribuição fixa versus repetições exatas) é uma melhor correspondência para os dados.
fonte
Eu acredito que a resposta está no tamanho do dicionário de pesquisa.
Os dados têm um senso de localidade (isto é, se um dado tiver sido usado, é provável que ele seja usado novamente em breve), e o algoritmo LZ tira proveito disso na construção do dicionário de pesquisa. Ele gera uma tentativa com uma quantidade finita de nós possíveis, para manter as pesquisas rápidas . Quando atinge o limite de tamanho, faz outro teste, "esquecendo" o anterior. Portanto, é necessário criar novamente a tabela de pesquisa para os caracteres mais simples, mas se algumas palavras não forem mais usadas, elas não serão mais mantidas na memória, para que uma codificação menor possa ser usada.
Portanto, uma saída LZ pode ser reduzida ainda mais com a codificação Huffman, pois essa redundância na criação das tentativas de pesquisa pode ser detectada por análise estatística.
fonte
Talvez eu esteja errado aqui, mas a codificação de Huffman analisa toda a entrada para criar sua tabela de codificação (árvore), enquanto o Lempel-Ziv codifica à medida que avança. Isso é uma vantagem e uma desvantagem para Huffman. A desvantagem é óbvia, a saber, que precisamos ver toda a entrada antes que possamos começar. A vantagem é que Huffman levará em consideração as estatísticas que ocorrem em qualquer parte da entrada, enquanto Lempel-Ziv precisa aumentá-la progressivamente. Ou, de outra maneira, Lempel-Ziv tem uma "direção" que Huffman não tem.
Mas tudo isso é apenas minha maneira ingênua de imaginar como as coisas são. Precisamos de uma prova real aqui para ver como exatamente Huffman supera Lempel-Ziv.
fonte
A resposta curta é: LZ é um algoritmo "universal", na medida em que não precisa saber a distribuição exata da fonte (apenas a suposição de que a fonte é estacionária e ergódica). Mas Huffman não é; ele precisa saber a distribuição exata da qual a fonte é amostrada (para criar a árvore Huffman). Essas informações adicionais fazem com que Huffman obtenha garantias de compactação rígidas. No entanto, para algoritmos práticos de compactação de arquivos, o Huffman pode ser menos favorável, pois primeiro será necessário reunir estatísticas empíricas do arquivo e, em seguida, realizar a compactação real no segundo semestre, enquanto o LZ pode ser implementado on-line.
Mais detalhes podem ser encontrados nos textos padrão da teoria da informação, por exemplo, Elementos da Teoria da Informação por Cover e Thomas.
fonte