Académique Documents
Professionnel Documents
Culture Documents
Cdigo de Huffman
Cdigo de Huffman
a=01100001
b=01100010
Cdigo de
Huffman
A=? (0)
B=? (110)
.
.
.
a=? (1111110)
b=?
Exemplo
Supondo A e C mais
freqentes que C e D no
conjunto de valores possveis
ABACDA=
0 11
0
A B
0
A
Smbolo
A
B
C
D
1 111
0
C D
Cdigo
0
110
10
111
0
A
Requisito
Smbolo
Huffman
A
B
C
0
01
1
Problema
Informaes de frequncia
O algoritmo em si
O processo de compresso
Huffman
A-0.2
A-0
B-0.1
B-10
a-0.1
a-110
.
.
.
Fdjoiasdjfoidsjfoisofnsdo
Sdjfoisdjfoisdfoisdfoid
Oidsfoisdnfosdf
Sdoifsjfsdfskodnfsdknf
.
.
.
Arquivo
comprimido
Idia bsica
Exemplo
Smbolo
A
B
C
D
Cdigo
0
110
10
111
Exemplo
Smbolo
A
B
C
D
E
F
G
H
I
Freq.
25
20
15
15
10
8
8
4
4
Exemplo
Smbolo
A
B
C
D
E
F
G
H
I
Freq.
25
20
15
15
10
8
8
4
4
Cdigo
01
00
101
100
1111
1101
1100
11101
11100
Codificando
a b c a
011000
01
a 1 0
b 2 1
0
c 3 1
010110
1
011000
10
011000
11
011000
01
Decodificando
01011
0
A rvore no algoritmo de
Huffman
Os ns da rvore
Processo
Processo
Processo(viso geral)
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 ns folhas
...continua no prximo slide
//gerao 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 contri a rvore
Continua....
Algoritmo de Huffman
Gera os ns iniciais e
Constri a fila de
prioridades
Gera a rvore binria
Gera os cdigos a
partir da rvore
1
2
3
0
10
11
Exemplo do algoritmo
A2
5
B2
0
C1
5
D1
5
E 1
0
01
00
101
100
1111
Tabela de cdigos
Smbolo
N bits
Cdigo
01
00
101
100
1111
1101
1100
11101
11100
Codificando
a b c a
011000
01
a 1 0
b 2 1
0
c 3 1
010110
1
011000
10
011000
11
011000
01
Decodificando
01011
0
AND
OR
OR exclusivo (XOR)
Deslocamento direita
Deslocamento
esquerda
void main(void) {
char a,b,c;
a=193;
b=127;
c=a & b;//c=65
printf(%i\n,c);
};
OR bit a bit
void main(void) {
OR bit a bit
1100000
1
0111111
1
|----------------1111111
1
char a,b,c;
a=193;
b=127;
c=a & b;//c=255
printf(%i\n,c);
};
void main(void) {
char a,b,c;
a=193;
b=127;
c=a & b;//c=190
printf(%i\n,c);
};
Deslocamento direita e
esquerda
void main(void) {
char x;
x<<1;
x<<3;
x<<2;
x>>1;
x>>2;
};
X=7
X<<
1
X<<
3
X<<
2
X>>
1
0000
0111
0000
1110
0111
0000
1100
0000
0110
0000
7
14
112
192
96