SlideShare uma empresa Scribd logo
1 de 25
Código de Huffman
Mateus Fernandes Ribeiro
Rubem Eslley Viana dos S. Rocha
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”
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)
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
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
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
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
Exemplo de codificação
E+H S T L Esp C+P A
2 2 2 2 2 2 5
E H
S T L Esp C+P E+H A
2 2 2 2 2 2 5
Exemplo de codificação
S+T L Esp C+P E+H A
4 2 2 2 2 5
S T
L Esp C+P E+H S+T A
2 2 2 2 4 5
L+Esp C+P E+H S+T A
4 2 2 4 5
L Esp
C+P E+H S+T L+Esp A
2 2 4 4 5
Exemplo de codificação
(C+P)+(E+H) S+T L+Esp A
4 4 4 5
Exemplo de codificação
C P E H
S+T L+Esp C+P+E+H A
4 4 4 5
(S+T)+(L+Esp) C+P+E+H A
8 4 5
Exemplo de codificação
S T L Esp
C+P+E+H A S+T+L+Esp
4 5 8
(C+P+E+H)+A S+T+L+Esp
9 8
Exemplo de codificação
C P E H
A
S+T+L+Esp+C+P+E+H+A
17
Exemplo de codificação
S T L Esp
C P E H
A
• 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
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%
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)
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
Implementação do Algoritmo
• Classe Node
Implementação do Algoritmo
• Classe Tree
▫ Gerando tabela de frequência O(n)
Implementação do Algoritmo
• Classe Tree
▫ Inicializa a fila de prioridade O(nlgn)
Implementação do Algoritmo
• Classe Tree
▫ Montando a árvore binária O(nlgn)
• Reduzido para O(n lg lgn) com árvore de Van Emde Boas
Implementação do Algoritmo
• Classe Tree
▫ Montando a nova tabela de codificação
Implementação do Algoritmo
• Classe Tree
▫ Re-codificando o conjunto de símbolos original
Implementação do Algoritmo
• Classe Main

Mais conteúdo relacionado

Semelhante a Código de Huffman.pptx

Nota de aula seguranca da informacao - criptografia
Nota de aula   seguranca da informacao - criptografiaNota de aula   seguranca da informacao - criptografia
Nota de aula seguranca da informacao - criptografiafelipetsi
 
Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosNécio de Lima Veras
 
Bioinformática com Rosalind utilizando Python
Bioinformática com Rosalind utilizando PythonBioinformática com Rosalind utilizando Python
Bioinformática com Rosalind utilizando PythonMarcos Castro
 
Linguagem C (Parte 6)
Linguagem C (Parte 6)Linguagem C (Parte 6)
Linguagem C (Parte 6)Daniel Barão
 
Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig LatinElen Arantza
 
Fundamentos da computação software evolução e conceito
Fundamentos da computação software evolução e conceitoFundamentos da computação software evolução e conceito
Fundamentos da computação software evolução e conceitoEriclys Moreira
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9Nando Vieira
 
Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01Leandro Rezende
 
Por que Python - Latinoware 2008
Por que Python - Latinoware 2008Por que Python - Latinoware 2008
Por que Python - Latinoware 2008Marco Mendes
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programaçãoGustavo Nazário
 
unidade04-c3-handout.pdf
unidade04-c3-handout.pdfunidade04-c3-handout.pdf
unidade04-c3-handout.pdfAlexSouza974126
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem CVê Rodrigues
 
descodificadores codificadores Encoder Decoder Sistemas Digitais
descodificadores codificadores Encoder Decoder Sistemas Digitaisdescodificadores codificadores Encoder Decoder Sistemas Digitais
descodificadores codificadores Encoder Decoder Sistemas DigitaisCarlos Pereira
 

Semelhante a Código de Huffman.pptx (20)

Nota de aula seguranca da informacao - criptografia
Nota de aula   seguranca da informacao - criptografiaNota de aula   seguranca da informacao - criptografia
Nota de aula seguranca da informacao - criptografia
 
Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmos
 
Bioinformática com Rosalind utilizando Python
Bioinformática com Rosalind utilizando PythonBioinformática com Rosalind utilizando Python
Bioinformática com Rosalind utilizando Python
 
Compressão Huffman
Compressão HuffmanCompressão Huffman
Compressão Huffman
 
Linguagem C (Parte 6)
Linguagem C (Parte 6)Linguagem C (Parte 6)
Linguagem C (Parte 6)
 
Tradutor de Pig Latin
Tradutor de Pig LatinTradutor de Pig Latin
Tradutor de Pig Latin
 
Fundamentos da computação software evolução e conceito
Fundamentos da computação software evolução e conceitoFundamentos da computação software evolução e conceito
Fundamentos da computação software evolução e conceito
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01
 
Por que Python - Latinoware 2008
Por que Python - Latinoware 2008Por que Python - Latinoware 2008
Por que Python - Latinoware 2008
 
PHP - Strings
PHP - StringsPHP - Strings
PHP - Strings
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programação
 
unidade04-c3-handout.pdf
unidade04-c3-handout.pdfunidade04-c3-handout.pdf
unidade04-c3-handout.pdf
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
descodificadores codificadores Encoder Decoder Sistemas Digitais
descodificadores codificadores Encoder Decoder Sistemas Digitaisdescodificadores codificadores Encoder Decoder Sistemas Digitais
descodificadores codificadores Encoder Decoder Sistemas Digitais
 
Ep3
Ep3Ep3
Ep3
 
Aula09 traducaosin110
Aula09 traducaosin110Aula09 traducaosin110
Aula09 traducaosin110
 
Aes 25
Aes 25Aes 25
Aes 25
 
Linguagem_C.pdf
Linguagem_C.pdfLinguagem_C.pdf
Linguagem_C.pdf
 
Csharp.intro
Csharp.introCsharp.intro
Csharp.intro
 

Código de Huffman.pptx

  • 1. Código de Huffman Mateus Fernandes Ribeiro Rubem Eslley Viana dos S. Rocha
  • 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
  • 8. Exemplo de codificação E+H S T L Esp C+P A 2 2 2 2 2 2 5 E H S T L Esp C+P E+H A 2 2 2 2 2 2 5
  • 9. Exemplo de codificação S+T L Esp C+P E+H A 4 2 2 2 2 5 S T L Esp C+P E+H S+T A 2 2 2 2 4 5
  • 10. L+Esp C+P E+H S+T A 4 2 2 4 5 L Esp C+P E+H S+T L+Esp A 2 2 4 4 5 Exemplo de codificação
  • 11. (C+P)+(E+H) S+T L+Esp A 4 4 4 5 Exemplo de codificação C P E H S+T L+Esp C+P+E+H A 4 4 4 5
  • 12. (S+T)+(L+Esp) C+P+E+H A 8 4 5 Exemplo de codificação S T L Esp C+P+E+H A S+T+L+Esp 4 5 8
  • 13. (C+P+E+H)+A S+T+L+Esp 9 8 Exemplo de codificação C P E H A
  • 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
  • 20. Implementação do Algoritmo • Classe Tree ▫ Gerando tabela de frequência O(n)
  • 21. Implementação do Algoritmo • Classe Tree ▫ Inicializa a fila de prioridade O(nlgn)
  • 22. Implementação do Algoritmo • Classe Tree ▫ Montando a árvore binária O(nlgn) • Reduzido para O(n lg lgn) com árvore de Van Emde Boas
  • 23. Implementação do Algoritmo • Classe Tree ▫ Montando a nova tabela de codificação
  • 24. Implementação do Algoritmo • Classe Tree ▫ Re-codificando o conjunto de símbolos original