A codificação Huffman é sempre ideal?

9

O requisito da codificação como livre de prefixo resulta em árvores grandes, pois a árvore precisa estar completa. Existe um limite em que o armazenamento de dados não codificado de comprimento fixo seja mais eficiente do que codificar os dados?

Kaveh
fonte
Em geral 'não'. Para uma média de dados, a frequência de cada personagem seria> 1 e seu bom para usar Huffman codificação em vez de códigos de comprimento fixo
@arunmoezhi Você poderia abordar o exemplo que forneci acima? A frequência de cada caractere é maior que 1, mas o comprimento fixo é mais ideal.
Este exemplo é interessante. Mas você pode fornecer um tal cenário com as probabilidades de cada personagem em vez de frequência e certifique-se as probabilidades de todos os caracteres adicionar a 1
@arunmoezhi Eu incluí as probabilidades dos personagens e eles fazem adicionar até 1.

Respostas:

4

A entropia H(A)para esse problema é 1.998. Tanto a codificação Huffman quanto a codificação de comprimento fixo para esse problema têm um comprimento médio de palavra de código como 2. E para sua informação, a codificação que você obteve usando a Huffman Encoding está errada. A codificação Huffman também produz códigos semelhantes ao comprimento fixo para esse problema. Ele usa uma abordagem gananciosa. Portanto a, não recebe um código, 0mas recebe 00. Retrabalhe a árvore que você gera usando a Huffman Coding. A árvore que você deve obter é:insira a descrição da imagem aqui

arunmoezhi
fonte
Obrigado. Você poderia fornecer algum tipo de prova de que a codificação Huffman é sempre mais ideal do que o comprimento fixo ou, pelo menos, me refira a uma?
11
Você pode consultar Introduction to Algorithmspor CLRS. No capítulo em que greedy algorithmsvocê fala, você pode obter a prova formal Huffman algorithm. É uma prova longa e precisa de paciência para ler.
8

A codificação de Huffman aproxima a distribuição da população com potências de duas probabilidades. Se a distribuição verdadeira consistir em potências de duas probabilidades (e os símbolos de entrada não estiverem correlacionados completamente), a codificação de Huffman é ideal. Caso contrário, você pode fazer melhor com a codificação de alcance. No entanto, é ideal entre todas as codificações que atribuem conjuntos específicos de bits a símbolos específicos na entrada.

Antimônio
fonte
O que você quer dizer com "aproxima a distribuição da população"?
3
Existe uma verdadeira distribuição teórica da mensagem que poderia ser enviada hipoteticamente. Idealmente, cada mensagem deve ser codificada de maneira proporcional ao log de sua probabilidade, mas, como os códigos de Huffman são um número inteiro de bits, isso corresponde implicitamente a probabilidades com potências de dois. Daí uma aproximação. Procure o Teorema de Codificação de Shannons.
8

Sim, é sempre ideal.

Não, não há limite em que ele usaria menos espaço para usar dados não codificados de comprimento fixo.

Encontrei várias provas na Web, mas há uma discussão suficiente no artigo da Wikipedia sobre codificação Huffman .

Isso também abrange outras técnicas que alcançam maior compactação (trabalhando fora do espaço para o qual o código Huffman é ideal).

Cade Roux
fonte