




Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Este documento aborda os codigos de huffman, uma técnica de compressão de dados sem perdas. Aprenda sobre a representação de codigos binários, a construção da árvore de huffman e a atribuição de códigos de prefixo. O algoritmo de huffman é otimo para minimizar o comprimento médio do código, o que é essencial para a compressão eficiente de dados. Além disso, é apresentada a noção de codigos de huffman canônicos, que são uma representação ligeiramente diferente do código de huffman original, mais eficiente para decodificação em sistemas de grande volume de texto.
O que você vai aprender
Tipologia: Provas
1 / 8
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Arvores de c´´ odigo
Numa ´arvore qualquer, os n´os que n˜ao tˆem filhos s˜ao chamados de folhas e os demais n´os s˜ao chamados de n´os internos. Se um n´o de uma ´arvore ´e filho de outro, ent˜ao h´a um arco ligando os dois n´os. Um caminho P ligando dois n´os da ´arvore ´e dado por uma seq¨uˆencia de arcos conexos. O tamanho de P ´e calculado pelo n´umero de arcos do seu caminho. O n´ıvel de um n´o em uma ´arvore ´e igual ao tamanho do caminho que conecta a raiz da ´arvore a esse n´o. A altura de uma ´arvore ´e dada pelo n´ıvel do n´o de maior n´ıvel da ´arvore. Assim, as ´arvores da figura 4.1 tˆem alturas iguais a 2, 3 e 4, respectivamente. Arvore bin´^ ´ aria ´e aquela cujos n´os tˆem, no m´aximo, dois filhos. Se al´em disso, a ordem dos filhos de cada n´o tamb´em ´e levada em conta, ent˜ao temos uma ´arvore bin´aria ordenada. Os c´odigos de prefixo s˜ao usualmente representados por ´arvores bin´arias ordenadas. As ´arvores da figura 4.1 s˜ao ´arvores bin´arias ordenadas. Existe uma rela¸c˜ao de um para um entre c´odigo de prefixo com n palavras de c´odigo e ´arvores bin´arias ordenadas com n folhas. Todo c´odigo de prefixo C pode ser representado por uma ´arvore bin´aria ordenada e esta ´arvore ´e ´unica para esse c´odigo. Cada folha da ´arvore est´a associada a uma palavra de c´odigo ci de C. Esta palavra de c´odigo ´e determinada pelo caminho na ´arvore que a conecta `a raiz da mesma. Aregra geral para formar os bits de uma palavra de c´odigo ´e, partindo da raiz, percorrer o caminho at´e a folha correspondente, de tal modo que, cada arco percorrido para a direita equivale, por exemplo, a um bit ’1’ na palavra de c´odigo e cada arco percorrido para a esquerda equivale a um bit ’0’. Afigura 4.1 mostra as ´arvores bin´arias que representam os c´odigos de prefixo 1, 4 e 5 da tabela 2.2. Os c´odigos 2 e 3 n˜ao tˆem representa¸c˜oes em ´arvores bin´arias com palavras de c´odigo nas folhas.
Figura 4.1: Representa¸c˜ao de c´odigos bin´arios por ´arvores bin´arias.
Uma ´arvore ´e estritamente bin´aria quando todos os seus n´os internos tˆem exatamente dois filhos. As ´arvores representativas dos c´odigos 1 e 4 da figura 4.1 s˜ao estritamente bin´arias enquanto que aquela que representa o c´odigo 5 n˜ao. Toda ´arvore estritamente bin´aria com n n´os internos tem n + 1 folhas. Um c´odigo livre de prefixo associado a uma ´arvore estritamente bin´aria ´e dito um c´odigo minimal ou completo. Todo c´odigo ´otimo ´e minimal. Seja um texto T = t 1 .t 2 ...tm , obtido de uma fonte independente e codificado por C = c 1 .c 2 ....cm. Supondo que cada palavra de c´odigo ci seja suficiente para carregar a quantidade de informa¸c˜ao contida no seu s´ımbolo correspondente em T , a entropia fornece um limite inferior para o comprimento m´edio das palavras de um c´odigo utilizado para a codifica¸c˜ao de T. Pode-se entender esse limite inferior do comprimento m´edio como o n´umero esperado de bits por s´ımbolo em um c´odigo C.
C´odigos de Huffman
Uma das melhores t´ecnicas de compress˜ao conhecidas ´e devida a Huffman (7). Para uma dada distribui¸c˜ao de probabilidades gera um c´odigo ´otimo, livre de prefixo e de redundˆancia m´ınima, al´em de produzir uma sequˆencia de bits aleat´orios. Utiliza c´odigos de tamanho vari´avel para representar os s´ımbolos do texto, que podem ser caracteres ou cadeias de caracteres (digramas, trigramas, n-gramas ou palavras). Aid´eia b´asica do algoritmo ´e atribuir c´odigos de bits menores para os s´ımbolos mais freq¨uentes no texto, e c´odigos mais longos para os mais raros. O algoritmo de Huffman original baseia-se no m´etodo guloso e constr´oi um c´odigo ´otimo com esfor¸co computacional O(n.logn). Existem novas vers˜oes que constroem o c´odigo de Huffman com esfor¸co computacional O(n), mas
Figura 4.3: (b) Passo 2.
Figura 4.4: (c) Passo 3.
Figura 4.5: (d) Passo 4.
Figura 4.6: (e) Passo 5 - Arvore de Huffman final.´
Figura 4.7: Navega¸c˜ao na ´arvore de Huffman.
Tabela 4.2: C´odigos de Huffman por s´ımbolo. S´ımbolo C´odigo de Hufffman 0 00 1 10 2 110 3 1110 4 0111 5 0110 6 11111 7 0100 8 0101 9 11110
Para achar o c´odigo de cada s´ımbolo, basta navegar na ´arvore de Huffman da raiz at´e a folha, concatenando os valores encontrados para cada n´o da ´arvore: bit 0 (zero) ao navegar na sub´arvore da esquerda, e bit 1 (um) ao navegar na sub´arvore da direita, conforme a figura 4.7. Atabela 4.2 lista os c´odigos de Huffman resultantes da concatena¸c˜ao dos bits pela navega¸c˜ao na ´arvore. Observando a tabela 4.2 notamos que os c´odigos mais curtos, 00 e 10, s˜ao atribu´ıdos aos s´ımbolos mais frequentes, enquanto os c´odigos mais longos s˜ao atribu´ıdos aos s´ımbolos relativamente mais raros. Dependendo do processo de constru¸c˜ao da ´arvore de Huffman e da atribui¸c˜ao dos bits 0 e 1, podemos obter c´odigos diferentes dos listados na tabela 4.2. Entretanto, isto n˜ao afeta a entropia do c´odigo. O algoritmo de Huffman produz um c´odigo de comprimento m´edio
C´odigos de Huffman canˆonicos
Existe uma representa¸c˜ao ligeiramente diferente do c´odigo de Huffman que ´e muito eficiente para a decodifica¸c˜ao, mesmo que os modelos sejam extremamente grandes, o que pode acontecer em sistemas de recupera¸c˜ao de informa¸c˜ao com grande volume de texto. Esta representa¸c˜ao ´e chamada de c´odigo de Huffman canˆonico. Resulta nos mesmos tamanhos do c´odigo de Huffman, mas necessita de uma representa¸c˜ao particular para os c´odigos. Um c´odigo canˆonico ´e estruturado para permitir uma decodifica¸c˜ao extremamente r´apida, necessitando apenas de alguns bits por s´ımbolo do alfabeto. O c´odigo ´e chamado de canˆonico porque muito do n˜ao determinismo dos c´odigos de Huffman convencionais ´e evitado. Por exemplo, na constru¸c˜ao normal da ´arvore de Huffman, foi assumida a conven¸c˜ao de usar o bit 0 para indicar o ramo esquerdo e o bit 1 para indicar o direito (codifica¸c˜ao 0-left), mas uma escolha diferente conduz a diferentes c´odigos, mas igualmente v´alidos.
4.3. Constru¸c˜ao de c´odigos de Huffman canˆonicos
Os c´odigos de Huffman canˆonicos s˜ao gerados atrav´es de um algoritmo que leva em considera¸c˜ao apenas o tamanho do c´odigo de Huffman para o s´ımbolo, ou seja, a altura do s´ımbolo na ´arvore. Na tabela 4.3, temos os c´odigos de Huffman Canˆonico para a codifica¸c˜ao de Huffman original da tabela 4.2. Aconstru¸c˜ao da ´arvore de Huffman canˆonica ´e detalhada por Moffat et al. (22). Visualmente, a ´arvore canˆonica ´e a mesma ´arvore de Huffman, onde todos os n´os est˜ao deslocados para a esquerda (ou direita) dentro de cada n´ıvel da ´arvore. Afigura 4.8 representa a ´arvore canˆonica correspondente aos c´odigos de Huffman Canˆonicos da tabela 4.. Para construir a ´arvore, basta conhecer o tamanho do c´odigo de Huffman para cada s´ımbolo, e a partir da´ı posicionam-se as folhas nos n´ıveis adequa- dos, da esquerda para a direita, ordenados ascendentemente pela freq¨uˆencia. Depois, completa-se a ´arvore criando os n´os internos. O algoritmo de Huffman tradicional pode ser utilizado para determinar os tamanhos dos c´odigos. O pro- cesso de constru¸c˜ao dos c´odigos de Huffman Canˆonicos ´e r´apido e econˆomico. N˜ao ´e necess´aria a constru¸c˜ao de uma ´arvore realmente, o algoritmo utiliza apenas o comprimento do c´odigo de Huffman para derivar o c´odigo Canˆonico, e a grande vantagem ´e um ganho substancial no processo de decodifica¸c˜ao.
Tabela 4.3: C´odigos de Huffman canˆonico.
S´ımbolo Huffman Tamanho do c´odigo Huffman can^onico 0 00 2 10 1 10 2 11 2 110 3 011 3 1110 4 0101 4 0111 4 0100 5 0110 4 0011 6 11111 5 00001 7 0100 4 0001 8 1101 4 0010 9 11110 5 00000
Figura 4.8: Arvore de Huffman canˆ´ onica.