A ocorrência tamanho ASCII codificação de Huffman é um A Codificação método de compactação de Huffman caracteres (American e a variável codificação dos usado símbolos Standard para por cada muitas no Code conjunto símbolo. linguages for Information de dados de programação. a Interchange) ser compactado Neste que é um para usa padrão, determinar as probabilidades cada codificação códigos caracter de (7) comuns, compacta mais bits. codificado (8) possíveis caracteres frequentemente como dados combinações o diferentes mesmo alfanuméricos, usando de maneira número para podem número pontuação que representar de ser nem bits menor codificados por todos e caracteres os de os bits caracteres com para (e.x., de 7 controle codificar bits. 8 em precisem bits). ASCII. A usam codificação caracteres Desta ser Os apenas codificados maneira, caracteres que de 7 bits. Huffman ocorrem há com mais 18 58 é Considere 1 funciona. caracteres a string dessa bom b o m e s string Char esse usam bombom. 18 ASCII 10 8 115 111 101 Usando bits. A a tabela codificação Binário 0111 0110 a seguir ASCII 1101 0011 1111 0101 0010 ilustra (8 bits como por character), a codificação os A 101 0010 0110 Considere string 0000 1101 8 bom agora 0110 111 esse 10 que 0010 0101 bombom 8 estamos Espaço 10. seria Em escrita binário, numericamente seria assim: 0010 assim: 0110 0000 Char b 0110 01111111 0011 utilizando 0110 0111 01101. uma 0011 codificação 01100101 Binário 000 baseada 00100000 em 8111 -bits 0110 10 por 0010 1111 caracter: 101 0110 1151101 1111 A string seria numericamente o m e s Espaço escrita 541 assim: 0154101 010 100 001 011 usando bits caracteres menos 18. 001 Usando 010 A economia vezes -bits 101 que 011 (e, por aparecem s). 100 caracter, de Essa 100 bits é mais 011 poderia a idéia string 101 vezes ser 000 básica bom (b, ainda 001 o, da esse 010 maior m codificação bombom ) 000 e se 001 mais usarmos 4 de 010. bits Huffman: 5 um para 0 menos 1 total caracteres 0 usar 148 e menor bits em bits que para binário: ao número aparecem invés codificar 000 as folhas para uma provêm representar árvore a sequência binária caracteres que armazena bits com que maior são caracteres frequencia. usados para nas Essa folhas, codificar técnica e cujos respectivos pode caminhos ser implementada caracteres. raiz até de
seguindo código direita-esquerda-esquerda-esquerda-esquerda-direita enquanto Árvore Usando uma o árvore caminho ASCII de uma o arcos Codificação caminho completa árvore 7 da da (1100001 raiz binária, da (ver à raiz folhas Figuras com podemos à folha sempre binário) 1. 1 e O representar concatenando ). tem código é Na 7 representando arcos. Figura ASCII todos Arcos, (Figura para a 0 s os árvore da na qualquer e caracteres ). esquerda 1 s. árvore tem Por 8 caracter/folha pelo exemplo ASCII são níveis, numerados caminho: como o a, que folhas é que significa direita- com obtido tem de 0 usando nós Podemos A compactação, estrutura teremos a convenção usar de uma precisamos uma esse codificação árvore 0/1 tipo atribuída encontrar pode diferente. codificação ser aos usada uma arcos, árvore para como determinar compactação ótima, descrito. que o Se apresente código de usarmos arquivos. de um qualquer uma número Para árvore folha maximar mínimo diferente, apenas Assuma de codificação vezes que de por cada de o Huffman, caracter caracter. e aparece foi em O inventando algoritmo em texto um está arquivo. por para D. associado encontrar Huffman Na string a em um essa bom 15. peso, árvore esse que bombom, é ótima definido é os chamado pelo caracteres número de a, árvores. caracter. Isso O 1. algoritmo Comece apenas, o faz e com Inicialmente À de m cada com de Huffman, têm uma o iteração número peso lista é essas da necessário, assume do enquando algoritmo, árvores. que igual calcular os têm diminua Inicialmente, uma duas ao caracteres um peso esses árvores a único do cada pesos será, caracter todas são passo. nó (ver construída com juntadas e do Dica árvores Este espaço um nó. 1). é criando Caracteres o caracter a são têm algoritmo: partir compostas peso uma e. o um nova Para peso ocorrerem de grupo árvore. usar um deste mais têm raiz da o frequentemente menor primeira peso. árvore Ordene têm seja o a maior o lista caracter peso. de árvores de Caracteres menor de peso forma que e ocorrerem crescente, o nó raiz da menos fazendo última frequentemente árvore seja o nó.. Repita A caracter árvore os Pegue subárvore Exclua maneira de final passos maior será T1 Tr que a duas cuja e peso. esquerda a seguir T árvore a raiz primeiras lista até lista tenha seja ótima que (mantendo mantida árvores T1 o sobre de e codificação. subárvore apenas igual da ordenada. T1 lista e à T soma uma direita e na única chame dos memória) seja pesos árvore: T. de T1 de e inclua e T1 T. e T Tr Crie na e cuja uma lista,de nova o string. mostrados A Figura Note 4 mostra com que o a peso a lista fase está inicial representa ordenada do algoritmo segundo o número para os a pesos string vezes dos bom o respectivo caracteres. esse bombom. caracter aparece Os nós são na Figure 1 - Exemplo de árvore de codificação binária o o Figure - Nós folhas de uma árvore binária representando caracteres ASCII Figure - Caminho de codificação ASCII para o caracter "a"
árvores. Os soma nós dois são dos primeiros retirados Figura nós 5 mosta da nós pesos lista são a dos nova e juntados o nós árvore raiz filhos para sendo da (Figura formar ávore inserida 5). criada uma Seguindo no nova é final inserido árvore, da o lista algoritmo, ordenadamente cujo (raiz peso com os o dois peso nó na primeiros raiz 4). lista é de a Lista o m Figure 4 - Etapa inicial algoritmo de Huffman (após passo 1) 4 o m o m 4 Figure 5 - Após passo do algoritmo (pela prímeira vez)
Repete-se demonstra os o resto passos da acima execução até do que algoritmo sobre apenas passo-a-passo. uma árvore. A tabela de figuras a seguir 1 5 5 o m 4 7 o 4 5 o m 4 5 15 m A 0 para codificação arcos da de esquerda caracteres e 1 induzida para Char arcos pela da última direita): Binário árvore (árvore 8) é a seguinte (considerando 4 4 5 8 15 o m Usando b o 111 111 essa 00 tabela 01110 de codificação, 100101101 m e s Espaço a 100 string 110 bom 111 110 101 100 esse 0001 bombom 1110001 ficaria assim:
Desta como Implementação Há programa um duas arquivo mostramos forma arquivo partes que usamos faz descompactado distintas usando da a descompactação. Codificação na bits a codificação Compactador implementação: para descompactador. codificar Chamaremos Huffman de e -bits. o a um programa string o bom programa que esse que produz faz que bombom, a um lê compactação de arquivo ao arquivo invés normal e um de e a produz 48 partir bits. Para exemplo de Assumindo criado 1. compactação. Construa Leia compactar seguindo o bom arquivo que a esse tabela um os seguintes número arquivo, bombom. ser de compactado codificação; fixo é passos: necessário Como de bits vimos, e é processe escrito a tabela esta em tabela um de um compactação, caracter é arquivo, construída de um cada como arquivo vez mostramos uma (veja compactado árvore dica para binária 1). é Para o O ao um arquivo cabeçalho 111000111010010110110011011100011110001 Veja processar de compactado. caracteres Dica compactado original o no para caracter Por que a partir manipulação exemplo, foi deve e criada chegar conter arquivo para no de à as passo sequencia código compactar informações compactado. anterior. deve binário. de conter a bits necessárias As Escreva string seria que seguintes árvore bom representa essa escrita para informações esse sequencia codificação; no o bombom, chegar caracter, arquivo de são corretamente e bits alguma necessárias: compactado. use a no sequencia a arquivo tabela marca bits descompactador e navegar final deve arquivo árvore criar até para a encontrar árvore indicar de que os codificação nós a sequencia folhas correspondentes está bits no chegou cabeçalho àquela ao fim. arquivo, sequencia O programa ler de os iternos). lidos. Cabeçalho A maneiras cada árvore nó O custo visitado Uma de codificação armazenar deste maneira arquivo pela algoritmo travessia. pode a compactado árvore. fazer ser de a Nós armazenada busca diferenciação folha o é trabalho, proporcional devem no é início ser escrever use diferenciados à a do altura travessia arquivo um único da compactado. ávore. de bit pré-ordem nós para não-folhas cada Existem para nó, (nós escrever por várias bits que Caracter O pedaços comum escrever exemplo sistema se trata 1 o de operacional para caracter de final um nós da nó armazenado. folhas sequencia não-folha. e escreve 0 para Para de dados nós bits nós não-folha. bit a bit e Para sim é necessário nós-folha, em pedaços apenas é também maiores o bit necessário e gravá-los o de sistema de tamanho uma operacional vez. múltiplo Se o seu da usar arquitetura programa um mecanismo escreve específica de buffer bits do SO). e depois para Desta acumular maneira, todos os indicando dados (geralmente é muito bits são de mecanismo em Imagine tente para nenhuma algum completar escrever que informação. momento para o 1 sistema os desconsiderar bits. 4 escritos, bits Nesta operacional (múltiplo situação, mas estes não escreva de bits 8). é o possível sistema extra, O programa pedaços operacional ter uma certeza descompactador vez múltiplos que completará eles quando não 8 bits, deve eles representam os e 1 serão criar o bits seu algum escritos. com programa bits
programa devem explicitamente Uma solução entrar descompactador. na possível pelo árvore/tabela programador poderia Quando de introduzir codificação ao um final arquivo um da para pseudo-caracter sequencia compactado seja de bits corretamente de é válidos. escrito, final de os Este arquivo, descompactado últimos caracter introduzido inteiros calcular 1: ser os a bits frequencia representam com a qual o pseudo-caracter. os caracteres aparecem no arquivo, use bits um também escritos pelo Dica Para cedido número o caracter manipular : pelo de no do vezes qual Prof. arquivo binários, o João esse índice e Paulo caracter fazer use do Almeida. o vetor V[códigoASCII_caracter_lido]++. TAD é encontrado é Bitmap o (disponível no arquivo. na caracter, Desta página forma, da e professora), o é conteúdo necessário do cordialmente apenas vetor é ler de o