Você está na página 1de 6

UNIVERSIDADE FEDERAL DA PARABA

CENTRO DE INFORMTICA
CURSO DE ENGENHARIA DE COMPUTAO

EWERTON BRUNO LIMA ARAJO 11318323

RELATRIO:
CODIFICADOR - HUFFMAN ADAPTATIVO DE DECREMENTO

JOO PESSOA
2014

EWERTON BRUNO LIMA ARAJO 11318323

RELATRIO:
CODIFICADOR - HUFFMAN ADAPTATIVO DE DECREMENTO

Trabalho acadmico apresentado ao Professor


Doutorando Derzu Omaia, titular da disciplina
Introduo a Teoria da Informao, do curso de
Engenharia de Computao do Centro de
Informtica da Universidade Federal da Paraba,
como requisito parcial para aprovao na respectiva
ctedra.

JOO PESSOA
2014

Introduo
Neste relatrio ser explicado o desenvolvimento da implementao do codificador
de huffman adaptativo de decremento, mostrando como cada funo foi criada, para uma
melhor compreenso do mtodo. A IDE utilizada foi o CodeBlocks, todo o cdigo foi
desenvolvido na plataforma Windows, verso 8.

Huffman Adaptativo de Decremento


Organizao do cdigo
O cdigo foi organizado com os seguintes passos:
1 - Inicialmente feita a anlise do arquivo a ser comprimido, contando a frequncia
de cada byte no arquivo, para isso foi utilizado um vetor de inteiros de 256 posies, onde o
ndice do vetor o byte lido, cada vez que o byte lido, sua frequncia incrementada. Nessa
contagem, foi utilizada tambm uma varivel inteira para contar o nmero de bytes distintos
no arquivo, para armazenar no caberio do novo arquivo comprimido, para indicar o nmero
de bytes que sero lidos adiante, no momento da decodificao.
2 - Aps a contagem, foi criada uma lista encadeada ordenada com a tabela de
frequncias criada no passo anterior, onde todos os bytes com frequncia maior que 0,
inserido na lista.
3 - Com a lista encadeada ordenada montada, gravamos o byte e a frequncia no
novo arquivo comprimido.
4 - Em seguida criada a rvore de Huffman, a partir da lista encadeada anterior, a
criao da rvore de huffman feita criando um novo n, que tem como frequncia a soma
das frequncias dos dois primeiros ns da lista, o novo n tem como filho esquerdo o primeiro
n da lista encadeada, e como filho direito o segundo n da lista, em seguida o inicio da lista
modificado, para o terceiro n, e o novo n re-inserido na lista encadeada ordenada. Se o
terceiro n da lista for NULL, ento o inicio da lista ser o novo n criado, finalizando a
criao da rvore de huffman.
5 - Com a rvore de huffman, criamos uma tabela de cdigos, onde cada byte possui
um cdigo, esse cdigo foi gerado, percorrendo as folhas da rvore e caminhando da folha ao
n, pelo ponteiro do pai, se o n filho da esquerda, ento representado por 0, se o n
filho da direita, representado por 1.
6 - O byte do arquivo a ser comprimido lido, ento atravs da tabela de cdigos,
colocamos o cdigo num buffer que gravado no novo arquivo ao atingir 8 caracteres. Ao
inserir o cdigo no buffer, a frequncia do byte atualizada na tabela de frequncia, sendo

decrementada em 1, e volta-se ao passo 2, criando uma lista encadeada com a nova tabela de
frequncia, liberando a Arvore de Huffman e recriando-a com a nova lista encadeada.
7 - Ao chegar o fim do arquivo, se o buffer no tiver completo com 8 caracteres,
ento inserido um padding com 1s, para preencher os 8 caracteres, para poder ser gravado
no novo arquivo, pois s podemos gravar 8 bits por vez num arquivo, ou seja, 1 byte.
Cada byte lido do arquivo, a varivel lm incrementada para calcular o
comprimento mdio do arquivo e a razo de compresso. A probabilidade e a informao
tambm calculada e acumulada na varivel H que calcula a Entropia.
Ao final, obtemos o valor da razo de compresso, o comprimento mdio e a
Entropia da mensagem.

Execuo do Cdigo
O cdigo foi executado numa mquina com processador core 2 duo - E7500,
2.94GHz , memria 4GB, Inicialmente foi testado com um arquivo texto puro com o nome
ABRACADABRA, para analisar se a compresso estava ocorrendo corretamente, o tempo
de codificao foi de 15ms, quase instantaneo. A razo de compresso foi de 5,18, o
comprimento mdio de 1,55 bits por smbolo e a Entropia de 1,49 bits por smbolo. Portanto a
codificao ocorreu corretamente.
Em seguida foi usado um arquivo de 14,9MB de texto puro, o tempo de codificao
foi de 22 minutos e 17 segundos, a razo de compresso foi 1,77, o comprimento mdio foi
4,52 bits por smbolo, e a Entropia foi de 4,48 bits por smbolo. O arquivo codificado foi
reduzido para 8,41MB.

Concluso
O cdigo de Huffman Adaptativo de Decremento mostrou-se bastante eficiente,
podendo comprimir um arquivo, de maneira eficaz. A causa da lentido para arquivos grandes
se d ao fato de recriar a lista encadeada, liberar a rvore, alocar novo espao de memria e
criar tabela de cdigos a cada leitura de um byte no arquivo. Poderia ter uma melhoria,
utilizando a rvore para decrementar o byte lido e recri-la readaptando-a sem a necessidade
de liberar memria e alocar novamente. No entanto, como esse algoritmo foi apenas para
aprendizado, essa implementao fica para projetos futuros.