Você está na página 1de 2

HUFFMAN

O algoritmo de Huffman recebe um fluxo de bits e devolve um fluxo de bits comprimido que representa o fluxo
original. Em geral, o fluxo comprimido é mais curto que o original. O fluxo de bits original é lido de 8 em 8 bits,
como se fosse um fluxo de caracteres:
010000010100001001010010010000010100001101000001100010000100000101000010010100100100000100100001
A B R A C A D A B R A !

Tudo se passa como se o algoritmo transformasse uma string em uma cadeia de bits. Exemplo:
transforma ABRACADABRA! em 010011110010100010101010011110010001.
A B R A C A D A B R A !
010 011 110 010 100 010 101 010 011 110 010 001

Cada caractere da string original é convertido em uma pequena cadeia de bits, que é o seu código. Por
exemplo: C  100 .
! 001 ! 1010
Ideia do algoritmo de Huffman: usar códigos curtos para os caracteres que ocorrem A 010 A 0
com frequência e deixar os códigos mais longos para os caracteres mais raros. B 011 B 111
C 100 C 1011
D 101 D 100
Os códigos são, portanto, de comprimento variável. Dois exemplos, um com códigos
R 110 R 110
de comprimento fixo e outro com códigos de comprimento variável:
... ...

Expansão (decodificação)

Na decodificação, cada código de caractere deve ser convertido no correspondente caractere.


A tabela de códigos deve ser injetiva (caracteres diferentes devem ter códigos diferentes). Mas isso ! 11
não basta. A 0
Exemplo: A tabela de códigos ao lado transforma ABRACADABRA! em 01000010100100011 . B 1
Mas essa cadeia de bits também representa CRRDDCRCB . Isso contraria a regra do jogo! C 01
D 10
! 101 A tabela deve ser livre de prefixos. Uma tabela de códigos é livre de prefixos R 00
A 0 (prefix-free) se nenhum código é prefixo de outro.
B 1111 Exemplo: A tabela ao lado é livre de prefixos. Assim, ABRACADABRA! é a única decodificação
C 110 possível de 011111110011001000111111100101 .
D 100
R 1110 ATIVIDADES – HUFFMAN

1. Qual a diferença entre código de comprimento fixo e código de comprimento variável? Por que código de
comprimento variável precisa ser livre de prefixos?
2. Quais das tabelas de códigos abaixo são livres de prefixos?

Tabela Código
A 0 100 10 11
B 0 1 00 11
C 1 01 001 0001
D 1 01 001 000

3. Escreva a cadeia de bits que codifica a string ABRACADABRA! usando o código de Huffman. Quantos bits
tem a cadeia? Insira espaços para facilitar a leitura.
4. Unicidade. Mostre que a árvore de Huffman não é unica. Use a string ABRACADABRA! como exemplo. Faça
um exemplo mais interessante que a mera troca de 0 por 1 e vice-versa.
5. Dado um alfabeto A com as seguintes letras {a1, a2, a3, a4, a5}
com a distribuição de probabilidade mostrada na tabela,
desenhe a árvore de Huffman.
6. Construa o código de Huffman para esta fonte. Calcule a
eficiência do código.

7. Uma palavra foi codificada usando o código de Huffman, tendo-se obtido a sequência binária
01000100101100110001010
 O alfabeto original era constituído pelas letras A, B, C, D, E, I, L, R e T e a letra R foi codificada como “11".
 Supondo que estas letras ocorriam com as probabilidades
◦ P(A) = 0,26 P(D) = 0,02 P(L) = 0,01
◦ P(B) = 0,09 P(E) = 0,07 P(R) = 0,19
◦ P(C) = 0,08 P(I) = 0,25 P(T) = 0,03
◦ Qual terá sido a palavra codificada?
Calcule o número médio de bits por caractere obtido pelo uso da codificação de Huffman e compare com a
utilização de um código binário de tamanho fixo otimizado para representação do mesmo alfabeto.
8. Dado um alfabeto A com as seguintes letras {L, M, N, O, P, Q} com a distribuição de probabilidade 0,09; 021;
0,25;0,15; 0,19 e 0,11 (respectivamente), desenhe a árvore de Huffman. Calcule a eficiência da codificação.
9. Imagine um dado de sete faces (D7) com as seguintes probabilidades de ocorrência de cada face: pA = 0,02
pB = 0,04 pC = 0,44 pD = 0,03 pE = 0,05 pF = 0,17 pG=0,25. Construa a codificação de Huffman e responda: a)
quantos bits seriam necessários para esta representação se a codificação fosse fixa? Justifique sua resposta.
b) Qual a eficiência da codificação?
10. Uma fonte tem um alfabeto com |A| = 8 e PA = {0,25; 0,20; 0,15; 0,12; 0,10; 0,08; 0,05; 0,05}. Encontre a
eficiência de informação desta fonte. Utilize método de Huffman.
11.Uma fonte discreta sem memória tem um alfabeto A = {a; b; c; d} com probabilidades dos símbolos {0,25;
0,4; 0,15; 0,2}, respectivamente. Encontre a entropia da fonte. Construa o código de Huffman para esta
fonte. Calcule a eficiência do código.
12.Uma fonte discreta sem memória tem um alfabeto K = {a; b; c; d; e; f; g} com probabilidades dos símbolos
{0,09; 0,25; 0,16; 0,15; 0,21; 0,08; 0,06}, respectivamente. Encontre a entropia da fonte. Construa o código
de Huffman para esta fonte. Calcule a eficiência do código.
13.Construa o código de Huffman para esta fonte. Calcule a eficiência do código.

14. Uma palavra foi codificada usando o código de Huffman, tendo-se obtido a sequência binária:
1001101000110001101110010
O alfabeto original era constituído pelas letras M, O, I, U, C, H, T, E e B. A letra M foi codificada como “10".
Supondo que estas letras ocorriam com as probabilidades:
P(M) = 0,24 P(U) = 0,12 P(T) = 0,07
P(O) = 0,16 P(C) = 0,09 P(E) = 0,06
P(I) = 0,13 P(H) = 0,08 P(B) = 0,05
G1) Qual foi a MENSAGEM codificada?
G2) Calcule o número médio de bits por caractere obtido pelo uso da codificação de Huffman e compare com
a utilização de um código binário de tamanho fixo otimizado para representação do mesmo alfabeto.
G3) Calcule e compare as eficiências de ambas as codificações.
15. Imagine um dado de sete faces (D7) com as seguintes probabilidades de ocorrência de cada face: pA = 1/2
pB = 1/4 pC = 1/4 pD = 1/8 pE = 1/8 pF = 1/16 pG = 1/16. Construa a codificação de Huffman e, utilizando
esta codificação, responda: quantos bits seriam necessários para esta representação? Qual a eficiência da
codificação?

Você também pode gostar