SlideShare uma empresa Scribd logo
1 de 33
Algoritmo de Huffman
Código de Huffman
 Algoritmo para a compressão de
arquivos, principalmente arquivos
textos
 Atribui códigos menores para símbolos
mais freqüentes e códigos maiores
para símbolos menos freqüentes
 Código é um conjunto de bits
Código de Huffman
 Representação dos dados é feita com
códigos de tamanho variável
Código ASCII
A=01000001
B=01000010
.
.
.
a=01100001
b=01100010
Código de Huffman
A=? (0)
B=? (110)
.
.
.
a=? (1111110)
b=? (11111111110)
Exemplo
 Supondo A e C mais
freqüentes que C e D no
conjunto de valores
possíveis
Símbolo
A
B
C
D
Código
0
110
10
111
ABACDA= 0 110 0 10 111 0
A B A C D A
Requisito
 O código de um símbolo não pode ser prefixo
de um outro código
 Se isso acontece, tem-se ambigüidade na
decodificação
 Ex: ACBA = 01010
 Os dois bits em vermelho
são A e C ou B?
 Veja que o código de A é
prefixo do código de B
Símbolo
A
B
C
Huffman
0
01
1
Problema
 Dada uma tabela de freqüências como
determinar o melhor conjunto de códigos, ou
seja, o conjunto que comprimirá mais os
símbolos?
 Huffman desenvolveu um algoritmo para isso
e mostrou que o conjunto de símbolos
obtidos é o melhor para conjuntos de dados
que têm a freqüência de seus símbolos igual
a tabela de freqüência usada
Informações de frequência
 Algoritmo de Huffman produz tabela de
códigos baseada em informações de
freqüência
 Dependência do tipo de dado primário
O algoritmo em si
 Dado: Tabela de freqüências dos N
símbolos de um alfabeto
 Objetivo: Atribuir códigos aos símbolos
de modo que os mais freqüentes
tenham códigos menores (menos bits)
O processo de compressão
Fdjoiasdjfoidsjfoisofnsdo
Sdjfoisdjfoisdfoisdfoid
Oidsfoisdnfosdf
Sdoifsjfsdfskodnfsdknf
A-0.2
B-0.1
a-0.1
.
.
.
A-0
B-10
a-110
.
.
.
Huffman
Arquivo
comprimido
Idéia básica
 Construir uma árvore binária tal que
 A) suas folhas sejam os N símbolos do alfabeto
 B)cada ramo da árvore seja um valor 1 (esquerda)
ou 0 (direita)

Isso é uma convenção, o contrário também funciona
 O código de um símbolo será a seqüência
de bits dos ramos da raiz até sua posição
na árvore
Exemplo
Símbolo
A
B
C
D
Código
0
110
10
111
Exemplo
Símbolo
A
B
C
D
E
F
G
H
I
Freq.
25
20
15
15
10
8
8
4
4
Exemplo
Símbolo
A
B
C
D
E
F
G
H
I
Freq.
25
20
15
15
10
8
8
4
4
Código
01
00
101
100
1111
1101
1100
11101
11100
Codificando
a b c a
0110000
1
0110001
0
0110001
1
0110000
1
a 1 0
b 2 10
c 3 11
010110
Decodificando
a b c a010110
A árvore no algoritmo de Huffman
 Árvore é de tamanho fixo (2N-1 nós)
 Logo sua representação pode ser seqüencial
(em um array) ao invés de dinâmica
 Construção da árvore é das folhas para a
raiz, então os ponteiros serão:
filhopai
 Os nós não têm os campos filhoEsquerda e
filhoDireita
Os nós da árvore
 Cada nó tem 4 campos:
 Father – ponteiro para a posição do pai do
nó
 isLeft (para que este campo?)

True se o nó é filho à esquerda

False se o nó é filho à direita
 symbol – o símbolo representado pelo nó
 freq – a freqüência do símbolo
Processo
 Árvore construída botton-up, a partir
dos 2 símbolos de menor freqüência e,
recursivamente tomando-se sempre as
2 sub-árvores menos freqüentes
 Definição: A freqüência de uma sub-
árvore é a soma das freqüências de
seus 2 filhos
Processo
 Cria-se um nó (nó folha) para cada símbolo da
tabela de freqüência
 Cria-se um vetor que aponta para cada um desses
nós
 Insere-se também esses nós em uma uma fila de
prioridades (os nós menos freqüentes primeiro)
 Notem: temos uma árvore E uma fila de prioridades
 A árvore nós estamos construindo
 A fila de prioridades nós usamos para construir a árvore
 O processo termina quando todos os nós da
fila de prioridades forem eliminados
 Os últimos dois juntam-se e formam a raiz da
árvore
Processo(visão geral)
 Enquanto existir mais de 1 nó na fila
 Retiram-se os dois primeiros
 Gera-se um novo nó a partir destes
 Insere estes dois na árvore
 No final restará um nó na fila de
prioridades
Code Huffman(N,Frequencias)
rootnodes=FilaVazia //inicializa o conjunto de “root nodes”
for(i=0;i<n;i++){
P=makeNode(frequencias[i]);
position[i]=P; //P ponteiro para folha
pqinsert(rootnods,P);
} //este for cria todos os nós folhas
...continua no próximo slide
N-nº símbolos tratados
Frequencias – uma tabela com os símbolos e suas freqüências
Code – Saída do algoritmo. Uma tabela com os símbolos e os seus respectivos códigos
Rootnodes – fila de prioridades
Position – vetor de ponteiros para os nós iniciais (nós folhas)
//geração da árvore
while(size(rootnodes) > 1) {
P1=remQueueElem(rootnodes);
P2=remQueueElem (rootnodes);
//combina P1 e P2 em um nó
P=makeNode(info(P1)+info(P2))
setleft(P,P1); setRight(P,P2);
setQueueElem(rootnodes,P); //nó pai na fila de prioridades
}//este while contrói a árvore
Continua....
remQueueElem – retorna o primeiro elemento da fila de prioridades
makeNode – gera um novo nó da árvore
Setleft(P,P1) – seta o pai de P1 e seta que P1 é filho esquerdo
Setright(P,P2) – seta o pai de P2 e seta que P2 pe filho direito
addQueueElem – insere um nó na fila de prioridades
//gerando os códigos a partir da árvore
root=remQueueElem (rootnodes);
for (i=0; i<n; i++) {
P=position[i]; //i-esimo símbolo
code[i]=“”; //string de bits nula
while(P!=root) { //sobe na árvore
if (isleft(P))
code[i]=0 + code[i];
else
code[i]=1+code[i];
P=father(P);
} //end while
}//end for
Fim do algoritmo de Huffman
Gera os nós iniciais e
Constrói a fila de
prioridades
Algoritmo de Huffman
Gera a árvore binária
Gera os códigos a
partir da árvore
A tabela de códigos (code)
a 1 0
b 2 10
c 3 11
Exemplo do algoritmo
A 25 01
B 20 00
C 15 101
D 15 100
E 10 1111
F 8 1101
G 8 1100
H 4 11101
I 4 11100
Tabela de códigos
Símbolo Nº bits Código
A 2 01
B 2 00
C 3 101
D 3 100
E 4 1111
F 4 1101
G 4 1100
H 5 11101
I 5 11100
Codificando
a b c a
0110000
1
0110001
0
0110001
1
0110000
1
a 1 0
b 2 10
c 3 11
010110
Decodificando
a b c a010110
Operadores bit a bit no C
&
|
^
>>
<<
AND
OR
OR exclusivo (XOR)
Deslocamento à direita
Deslocamento à esquerda
•Operam sobre char e int
AND bit a bit
AND bit a bit
1 1 0 0 0 0 0 1
0 1 1 1 1 1 1 1
&-----------------
0 1 0 0 0 0 0 1
void main(void) {
char a,b,c;
a=193;
b=127;
c=a & b;//c=65
printf(“%in”,c);
};
OR bit a bit
OR bit a bit
1 1 0 0 0 0 0 1
0 1 1 1 1 1 1 1
|-----------------
1 1 1 1 1 1 1 1
void main(void) {
char a,b,c;
a=193;
b=127;
c=a & b;//c=255
printf(“%in”,c);
};
XOR bit a bit
XOR bit a bit
1 1 0 0 0 0 0 1
0 1 1 1 1 1 1 1
^-----------------
1 0 1 1 1 1 1 0
void main(void) {
char a,b,c;
a=193;
b=127;
c=a & b;//c=190
printf(“%in”,c);
};
Deslocamento à direita e à esquerda
X=7 0000 0111 7
X<<1 0000 1110 14
X<<3 0111 0000 112
X<<2 1100 0000 192
X>>1 0110 0000 96
X>>2 0001 1000 24
void main(void) {
char x;
x<<1;
x<<3;
x<<2;
x>>1;
x>>2;
};

Mais conteúdo relacionado

Mais procurados

Introdução a Microinformática
Introdução a MicroinformáticaIntrodução a Microinformática
Introdução a Microinformática
Faustinho006br
 
1.1 o que é computador
1.1 o que é computador1.1 o que é computador
1.1 o que é computador
Aline Soares
 

Mais procurados (20)

2. conceito de processos
2. conceito de processos2. conceito de processos
2. conceito de processos
 
Introdução a Microinformática
Introdução a MicroinformáticaIntrodução a Microinformática
Introdução a Microinformática
 
Sistemas de Numeração e Conversão de Bases
Sistemas de Numeração e Conversão de BasesSistemas de Numeração e Conversão de Bases
Sistemas de Numeração e Conversão de Bases
 
Paso a paso de como formatear un computador
Paso a paso de como formatear un computadorPaso a paso de como formatear un computador
Paso a paso de como formatear un computador
 
Softwares Maliciosos
Softwares Maliciosos Softwares Maliciosos
Softwares Maliciosos
 
Historia Sistema Operacional Linux
Historia Sistema Operacional LinuxHistoria Sistema Operacional Linux
Historia Sistema Operacional Linux
 
Linha do tempo
Linha do tempoLinha do tempo
Linha do tempo
 
Software livre por que usar? slide
Software livre por que usar?   slideSoftware livre por que usar?   slide
Software livre por que usar? slide
 
aulaseg02.pdf
aulaseg02.pdfaulaseg02.pdf
aulaseg02.pdf
 
Tipos de computador
Tipos de computadorTipos de computador
Tipos de computador
 
1.1 o que é computador
1.1 o que é computador1.1 o que é computador
1.1 o que é computador
 
Virtualização
VirtualizaçãoVirtualização
Virtualização
 
Aula 11 - História dos Sistemas Operacionais - Windows
Aula 11 - História dos Sistemas Operacionais - WindowsAula 11 - História dos Sistemas Operacionais - Windows
Aula 11 - História dos Sistemas Operacionais - Windows
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
Gerenciamento de Vulnerabilidades em Aplicações e Servidores Web
Gerenciamento de Vulnerabilidades em Aplicações e Servidores WebGerenciamento de Vulnerabilidades em Aplicações e Servidores Web
Gerenciamento de Vulnerabilidades em Aplicações e Servidores Web
 
Hardware - Peças - Classificação
Hardware - Peças - ClassificaçãoHardware - Peças - Classificação
Hardware - Peças - Classificação
 
Diagrama de Fluxo de Dados
Diagrama de Fluxo de DadosDiagrama de Fluxo de Dados
Diagrama de Fluxo de Dados
 
Aula 12 - Processador
Aula 12 - ProcessadorAula 12 - Processador
Aula 12 - Processador
 
Aula 5 (Raid)
Aula 5 (Raid)Aula 5 (Raid)
Aula 5 (Raid)
 
Tutorial virtual box
Tutorial virtual boxTutorial virtual box
Tutorial virtual box
 

Destaque (9)

Arbol De Huffman
Arbol De HuffmanArbol De Huffman
Arbol De Huffman
 
Grafos 9.2 2016
Grafos 9.2 2016Grafos 9.2 2016
Grafos 9.2 2016
 
CODIGO DE HUFFMAN
CODIGO DE HUFFMANCODIGO DE HUFFMAN
CODIGO DE HUFFMAN
 
Entropía y código de Huffman del mismo texto en diferentes idiomas.
Entropía y código de Huffman del mismo texto en diferentes idiomas.Entropía y código de Huffman del mismo texto en diferentes idiomas.
Entropía y código de Huffman del mismo texto en diferentes idiomas.
 
Código de Huffman
Código de HuffmanCódigo de Huffman
Código de Huffman
 
Sistema 4G
Sistema 4GSistema 4G
Sistema 4G
 
Compressão Huffman
Compressão HuffmanCompressão Huffman
Compressão Huffman
 
Codificacion HUFFMAN en matlab
Codificacion HUFFMAN en matlabCodificacion HUFFMAN en matlab
Codificacion HUFFMAN en matlab
 
Algoritmos para matlab
Algoritmos para matlabAlgoritmos para matlab
Algoritmos para matlab
 

Semelhante a Algoritimo de Huffman

Apresentação de Sistemas Numéricos - Bits Bytes
Apresentação de Sistemas Numéricos - Bits BytesApresentação de Sistemas Numéricos - Bits Bytes
Apresentação de Sistemas Numéricos - Bits Bytes
Anne Carolline Oliveira
 
Introducao Computacao Slide 2
Introducao Computacao Slide 2Introducao Computacao Slide 2
Introducao Computacao Slide 2
Duílio Andrade
 
arquitetura de computadores
arquitetura de computadoresarquitetura de computadores
arquitetura de computadores
elliando dias
 
Introducao Computacao Slide 1
Introducao Computacao Slide 1Introducao Computacao Slide 1
Introducao Computacao Slide 1
Duílio Andrade
 

Semelhante a Algoritimo de Huffman (20)

Apresentação de Sistemas Numéricos - Bits Bytes
Apresentação de Sistemas Numéricos - Bits BytesApresentação de Sistemas Numéricos - Bits Bytes
Apresentação de Sistemas Numéricos - Bits Bytes
 
Introducao Computacao Slide 2
Introducao Computacao Slide 2Introducao Computacao Slide 2
Introducao Computacao Slide 2
 
aula2 de sistemas de numeração para matemática
aula2 de sistemas de numeração para matemáticaaula2 de sistemas de numeração para matemática
aula2 de sistemas de numeração para matemática
 
Arq orgcom (1)
Arq orgcom (1)Arq orgcom (1)
Arq orgcom (1)
 
ArqOrgCom.ppt
ArqOrgCom.pptArqOrgCom.ppt
ArqOrgCom.ppt
 
Python.pptx
Python.pptxPython.pptx
Python.pptx
 
arquitetura de computadores
arquitetura de computadoresarquitetura de computadores
arquitetura de computadores
 
Tp representação de informação
Tp   representação de informaçãoTp   representação de informação
Tp representação de informação
 
Unidades de Informacao, Sistemas Numericos
Unidades de Informacao, Sistemas NumericosUnidades de Informacao, Sistemas Numericos
Unidades de Informacao, Sistemas Numericos
 
Sistemas de numeração
Sistemas de numeraçãoSistemas de numeração
Sistemas de numeração
 
Unidades de Medidas Computacionais
Unidades de Medidas ComputacionaisUnidades de Medidas Computacionais
Unidades de Medidas Computacionais
 
sistemasdenumeracaoutilizadosnacomputacao5.ppt
sistemasdenumeracaoutilizadosnacomputacao5.pptsistemasdenumeracaoutilizadosnacomputacao5.ppt
sistemasdenumeracaoutilizadosnacomputacao5.ppt
 
Aula_Zegonc_Aritmetica_Binaria_e_Complemento.pdf
Aula_Zegonc_Aritmetica_Binaria_e_Complemento.pdfAula_Zegonc_Aritmetica_Binaria_e_Complemento.pdf
Aula_Zegonc_Aritmetica_Binaria_e_Complemento.pdf
 
python.tipos
python.tipospython.tipos
python.tipos
 
Sistemasde numeracao
Sistemasde numeracaoSistemasde numeracao
Sistemasde numeracao
 
Curso de ShellScript - Lm09 shellscript9
Curso de ShellScript - Lm09 shellscript9Curso de ShellScript - Lm09 shellscript9
Curso de ShellScript - Lm09 shellscript9
 
Programando em python tipos basicos
Programando em python   tipos basicosProgramando em python   tipos basicos
Programando em python tipos basicos
 
Introducao Computacao Slide 1
Introducao Computacao Slide 1Introducao Computacao Slide 1
Introducao Computacao Slide 1
 
Aritmetica binaria complemento
Aritmetica binaria complementoAritmetica binaria complemento
Aritmetica binaria complemento
 
Sistemas numericos
Sistemas numericosSistemas numericos
Sistemas numericos
 

Último

19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
PatriciaCaetano18
 
Sistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturasSistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturas
rfmbrandao
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
azulassessoria9
 

Último (20)

19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Sistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturasSistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturas
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Slides 9º ano 2024.pptx- Geografia - exercicios
Slides 9º ano 2024.pptx- Geografia - exerciciosSlides 9º ano 2024.pptx- Geografia - exercicios
Slides 9º ano 2024.pptx- Geografia - exercicios
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubel
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022
 
LENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretação
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)
 
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfMESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdf
 

Algoritimo de Huffman

  • 2. Código de Huffman  Algoritmo para a compressão de arquivos, principalmente arquivos textos  Atribui códigos menores para símbolos mais freqüentes e códigos maiores para símbolos menos freqüentes  Código é um conjunto de bits
  • 3. Código de Huffman  Representação dos dados é feita com códigos de tamanho variável Código ASCII A=01000001 B=01000010 . . . a=01100001 b=01100010 Código de Huffman A=? (0) B=? (110) . . . a=? (1111110) b=? (11111111110)
  • 4. Exemplo  Supondo A e C mais freqüentes que C e D no conjunto de valores possíveis Símbolo A B C D Código 0 110 10 111 ABACDA= 0 110 0 10 111 0 A B A C D A
  • 5. Requisito  O código de um símbolo não pode ser prefixo de um outro código  Se isso acontece, tem-se ambigüidade na decodificação  Ex: ACBA = 01010  Os dois bits em vermelho são A e C ou B?  Veja que o código de A é prefixo do código de B Símbolo A B C Huffman 0 01 1
  • 6. Problema  Dada uma tabela de freqüências como determinar o melhor conjunto de códigos, ou seja, o conjunto que comprimirá mais os símbolos?  Huffman desenvolveu um algoritmo para isso e mostrou que o conjunto de símbolos obtidos é o melhor para conjuntos de dados que têm a freqüência de seus símbolos igual a tabela de freqüência usada
  • 7. Informações de frequência  Algoritmo de Huffman produz tabela de códigos baseada em informações de freqüência  Dependência do tipo de dado primário
  • 8. O algoritmo em si  Dado: Tabela de freqüências dos N símbolos de um alfabeto  Objetivo: Atribuir códigos aos símbolos de modo que os mais freqüentes tenham códigos menores (menos bits)
  • 9. O processo de compressão Fdjoiasdjfoidsjfoisofnsdo Sdjfoisdjfoisdfoisdfoid Oidsfoisdnfosdf Sdoifsjfsdfskodnfsdknf A-0.2 B-0.1 a-0.1 . . . A-0 B-10 a-110 . . . Huffman Arquivo comprimido
  • 10. Idéia básica  Construir uma árvore binária tal que  A) suas folhas sejam os N símbolos do alfabeto  B)cada ramo da árvore seja um valor 1 (esquerda) ou 0 (direita)  Isso é uma convenção, o contrário também funciona  O código de um símbolo será a seqüência de bits dos ramos da raiz até sua posição na árvore
  • 14. Codificando a b c a 0110000 1 0110001 0 0110001 1 0110000 1 a 1 0 b 2 10 c 3 11 010110
  • 16. A árvore no algoritmo de Huffman  Árvore é de tamanho fixo (2N-1 nós)  Logo sua representação pode ser seqüencial (em um array) ao invés de dinâmica  Construção da árvore é das folhas para a raiz, então os ponteiros serão: filhopai  Os nós não têm os campos filhoEsquerda e filhoDireita
  • 17. Os nós da árvore  Cada nó tem 4 campos:  Father – ponteiro para a posição do pai do nó  isLeft (para que este campo?)  True se o nó é filho à esquerda  False se o nó é filho à direita  symbol – o símbolo representado pelo nó  freq – a freqüência do símbolo
  • 18. Processo  Árvore construída botton-up, a partir dos 2 símbolos de menor freqüência e, recursivamente tomando-se sempre as 2 sub-árvores menos freqüentes  Definição: A freqüência de uma sub- árvore é a soma das freqüências de seus 2 filhos
  • 19. Processo  Cria-se um nó (nó folha) para cada símbolo da tabela de freqüência  Cria-se um vetor que aponta para cada um desses nós  Insere-se também esses nós em uma uma fila de prioridades (os nós menos freqüentes primeiro)  Notem: temos uma árvore E uma fila de prioridades  A árvore nós estamos construindo  A fila de prioridades nós usamos para construir a árvore  O processo termina quando todos os nós da fila de prioridades forem eliminados  Os últimos dois juntam-se e formam a raiz da árvore
  • 20. Processo(visão geral)  Enquanto existir mais de 1 nó na fila  Retiram-se os dois primeiros  Gera-se um novo nó a partir destes  Insere estes dois na árvore  No final restará um nó na fila de prioridades
  • 21. Code Huffman(N,Frequencias) rootnodes=FilaVazia //inicializa o conjunto de “root nodes” for(i=0;i<n;i++){ P=makeNode(frequencias[i]); position[i]=P; //P ponteiro para folha pqinsert(rootnods,P); } //este for cria todos os nós folhas ...continua no próximo slide N-nº símbolos tratados Frequencias – uma tabela com os símbolos e suas freqüências Code – Saída do algoritmo. Uma tabela com os símbolos e os seus respectivos códigos Rootnodes – fila de prioridades Position – vetor de ponteiros para os nós iniciais (nós folhas)
  • 22. //geração da árvore while(size(rootnodes) > 1) { P1=remQueueElem(rootnodes); P2=remQueueElem (rootnodes); //combina P1 e P2 em um nó P=makeNode(info(P1)+info(P2)) setleft(P,P1); setRight(P,P2); setQueueElem(rootnodes,P); //nó pai na fila de prioridades }//este while contrói a árvore Continua.... remQueueElem – retorna o primeiro elemento da fila de prioridades makeNode – gera um novo nó da árvore Setleft(P,P1) – seta o pai de P1 e seta que P1 é filho esquerdo Setright(P,P2) – seta o pai de P2 e seta que P2 pe filho direito addQueueElem – insere um nó na fila de prioridades
  • 23. //gerando os códigos a partir da árvore root=remQueueElem (rootnodes); for (i=0; i<n; i++) { P=position[i]; //i-esimo símbolo code[i]=“”; //string de bits nula while(P!=root) { //sobe na árvore if (isleft(P)) code[i]=0 + code[i]; else code[i]=1+code[i]; P=father(P); } //end while }//end for Fim do algoritmo de Huffman Gera os nós iniciais e Constrói a fila de prioridades Algoritmo de Huffman Gera a árvore binária Gera os códigos a partir da árvore
  • 24. A tabela de códigos (code) a 1 0 b 2 10 c 3 11
  • 25. Exemplo do algoritmo A 25 01 B 20 00 C 15 101 D 15 100 E 10 1111 F 8 1101 G 8 1100 H 4 11101 I 4 11100
  • 26. Tabela de códigos Símbolo Nº bits Código A 2 01 B 2 00 C 3 101 D 3 100 E 4 1111 F 4 1101 G 4 1100 H 5 11101 I 5 11100
  • 27. Codificando a b c a 0110000 1 0110001 0 0110001 1 0110000 1 a 1 0 b 2 10 c 3 11 010110
  • 29. Operadores bit a bit no C & | ^ >> << AND OR OR exclusivo (XOR) Deslocamento à direita Deslocamento à esquerda •Operam sobre char e int
  • 30. AND bit a bit AND bit a bit 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 &----------------- 0 1 0 0 0 0 0 1 void main(void) { char a,b,c; a=193; b=127; c=a & b;//c=65 printf(“%in”,c); };
  • 31. OR bit a bit OR bit a bit 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 |----------------- 1 1 1 1 1 1 1 1 void main(void) { char a,b,c; a=193; b=127; c=a & b;//c=255 printf(“%in”,c); };
  • 32. XOR bit a bit XOR bit a bit 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 ^----------------- 1 0 1 1 1 1 1 0 void main(void) { char a,b,c; a=193; b=127; c=a & b;//c=190 printf(“%in”,c); };
  • 33. Deslocamento à direita e à esquerda X=7 0000 0111 7 X<<1 0000 1110 14 X<<3 0111 0000 112 X<<2 1100 0000 192 X>>1 0110 0000 96 X>>2 0001 1000 24 void main(void) { char x; x<<1; x<<3; x<<2; x>>1; x>>2; };