2. História
• Desenvolvido em 1952 por David A. Huffman em
seu doutorado no MIT
• Publicado no artigo “A Method for the
Construction of Minimum-Redundancy Codes”
3. Definição
• Compressão de dados
• Probabilidades de ocorrência dos símbolos
• Codificação sem perdas e totalmente reversível
• Inicialmente desenvolvido para codificação de
texto
• Ampla utilização nas tecnologias multimídia
(JPEG, MPEG, GZIP)
4. Funcionamento
1. Contar a frequência dos símbolos
2. Montar uma árvore binária agrupando pela
frequência de cada símbolo
3. Percorrer a árvore para montar a nova
codificação de cada símbolo
4. Re-codificar os dados do conjunto original
usando os novos códigos
5. Exemplo de codificação
• Texto original: “CASA PASTEL TALHA”
• Texto codificado: “00000001001000011000
001100010010010001010110100001000001
011001110001”
17 * 4 =68 bits
Letra Código
C 0000
A 0001
S 0010
P 0011
T 0100
E 0101
L 0110
H 0111
Esp 1000
Letra Frequência
C 1
A 5
S 2
P 1
T 2
E 1
L 2
H 1
Esp 2
6. Exemplo de codificação
• Lista com prioridade:
• Lista com prioridade ordenada:
C A S P T E L H Esp
1 5 2 1 2 1 2 1 2
C P E H S T L Esp A
1 1 1 1 2 2 2 2 5
7. Exemplo de codificação
• Construção da árvore
C+P E H S T L Esp A
2 1 1 2 2 2 2 5
C P
E H S T L Esp C+P A
1 1 2 2 2 2 2 5
15. • Atribuição de código
Exemplo de codificação
S T L Esp
C P E H
A
0
0
0 0
0
0
0 0
1
1
1
1
1
1
1
1
16. Letra Código
C 1000
A 11
S 000
P 1001
T 001
E 1010
L 010
H 1011
Esp 011
Exemplo de codificação
• Texto original: “CASA PASTEL TALHA”
• Texto codificado: “100011000110111001
11000001101001001100111010101111”
68 bits (antes) x
50 bits (depois)
Taxa de
compressão ~ 26%
17. A estrutura gulosa do problema
• A codificação de Huffman deve produzir um código
ótimo, então ela pode ser considerada um problema de
otimização
• Estratégia gulosa do algoritmo: selecionar as duas
menores frequências de símbolos da lista com prioridade
ordenada
• Essa identificação é feita a cada passo (ótimo local)
construindo-se a árvore de baixo para cima
• Os ótimos locais levam a uma solução ótima global
(árvore completa)
18. A estrutura gulosa do problema
• Critério: utilizar o menor número de bits exigidos para
codificar uma entrada
• Devemos minimizar a seguinte função:
B(T) = número de bits exigidos para codificar o texto original de
entrada
c = símbolo
c. freq = frequência do símbolo
d (c) = profundidade do símbolo na árvore, ou seja, a quant. de bits
da palavra de código para o símbolo