Você está na página 1de 3

UNIVERSIDADE FEDERAL DE MINAS GERAIS Departamento de Cincia da Computao Disciplina Algoritmos e Estruturas de Dados II Professores Gisele Pappa, talo

Cunha, William Schwartz Curso Turno Vespertino Perodo 2

Trabalho Prtico Extra Codicao de Dados


Pontuao: 5 pontos Prazo de entrega: 05/07/2012 Penalizao por atraso: reduo de 5 pontos

O objetivo deste trabalho codicar caracteres de modo a reduzir o nmero de bits necessrios para representar smbolos (caracteres da tabela ASCII). O mtodo de codicao a ser implementado consiste de duas etapas: 1. Gerao de cdigos de comprimento varivel, o qual ordena decrescentemente de acordo com o nmero de ocorrncias de cada smbolo (tabela 1) e agrupa os dois smbolos com menor probabilidade em um novo smbolo. Esta operao repetida at que reste apenas um smbolo. A sequncia de agrupamentos compe uma rvore binria onde os smbolos de entrada esto nas folhas (gura 1). 2. Atribuio de um cdigo a cada smbolo resultante. O cdigo para cada smbolo composto pelos dgitos obtidos no caminho a partir da raiz at o respectivo smbolo (n folha), conforme ilustrado na tabela 2. caractere e h l o p t w nmero de ocorrncias 3320 1458 1067 1749 547 2474 266

Tabela 1: Nmero de ocorrncias de cada smbolo. caractere e h l o p t w dgitos do cdigo resultante 00 011 110 010 1110 10 1111

Tabela 2: Cdigo obtido para cada smbolo.

Figura 1: rvore resultante da codicao.

O que deve ser feito


Dado trs arquivos de entrada: 1. arq1: arquivo de entrada contendo uma srie de caracteres. 2. arq2: arquivo de entrada contendo uma srie de caracteres. 3. arq3: arquivo de entrada contendo uma srie de dgitos inteiros zeros e uns. Implementar um programa em linguagem C capaz de: 1. Computar o nmero de ocorrncias de cada caractere do arquivo arq1 (incluindo espaos e quebras de linha e ignorando caracteres acentuados) e gerar cdigos utilizando o mtodo de codicao descrito anteriormente. 2. Codicar o contedo do arquivo arq2 utilizando os cdigos gerados no item 1. O resultado deve ser impresso no arquivo arq4 (apenas os dgitos devem ser impressos). Nota: os dgitos devem ser impressos como inteiros e no com codicao binria. Exemplo: considerando o nmero de ocorrncias conforme mostrado na tabela 1, resultando na codicao mostrada na tabela 2, tem-se: arq2: pptwle arq4: 1110111010111111000 3. Decodicar o contedo do arquivo arq3 utilizando os cdigos gerados no item 1. O resultado deve ser impresso no arquivo arq5 (apenas os caracteres decodicados devem ser impressos). Exemplo: considerando o nmero de ocorrncias conforme mostrado na tabela 1, resultando na codicao mostrada na tabela 2, tem-se: arq3: 00011011111110 arq5: ehhwt O seu programa deve ser executado da seguinte maneira: ./programa arq1.txt arq2.txt arq3.txt arq4.txt arq5.txt

O que deve ser entregue


Deve ser submetido o cdigo fonte, seus arquivos .h (com as declaraes das funes) e seus arquivos .c (com a implementao das funes). O programa deve ser ANSI, ou seja, o cdigo fonte do programa deve ser compilvel no Linux, no devendo ser utilizada nenhuma biblioteca que seja especca do sistema operacional MS-Windows. Documentao sobre o trabalho (em .pdf), incluindo uma breve descrio das estruturas de dados utilizadas para resolver o problema e as decises tomadas relativas aos casos e detalhes de especicao que porventura estejam omissos no enunciado. A documentao deve ter no mximo uma pgina em fonte 11, espaamento simples e com margens de 1,5 cm. O trabalho ser entregue atravs do sistema de submisso de trabalhos prticos: http://aeds.dcc.ufmg.br, em um arquivo compactado (.zip) contendo os arquivos fonte (arquivo .c, o arquivo .h, o main.c). A documentao deve ser enviada em pdf, no link especial para sua submisso no sistema.