trabalho estrutura de dados algoritmos de compactação

Download Trabalho Estrutura De Dados   Algoritmos De CompactaçãO

If you can't read please download the document

Upload: mateus-ramos-pereira

Post on 23-Jun-2015

11.885 views

Category:

Technology


2 download

TRANSCRIPT

  • 1. Universidade Catlica de Pelotas Centro Politcnico Disciplina de Estrutura de Dados Algoritmos de Compactao de DadosCodificao Huffman e LZWComponentes: Guilherme Cunha e Mateus Pereira

2. Codificao HuffmanOs cdigos de Huffman so cdigos binrios (atribudos, por exemplo, a caracteres em um texto) de comprimentos variados que so determinados a partir da frequncia de uso de um determinado caracter.A idia central associar nmeros binrios com menos bits aos caracteres mais usados num texto, possibilitando a sua compactao. 3. Codificao Huffman O algoritmo de compactao usando os cdigos de Huffman consiste basicamente de trs fases:Clculo da frequncia de cada caracter no arquivo.Execuo do algoritmo de Huffman para construo de uma rvore binria (rvore de Huffman).Codificao propriamente dita. 4. Codificao HuffmanO algoritmo de Huffman tem por objetivo a construo de uma rvore binria baseada na frequncia do uso destas letras de modo que as mais frequentemente usadas apaream mais perto da raiz. Esta rvore binria construda de baixo para cima (das folhas para raiz), comeando a partir das letras menos usadas at atingir a raiz. 5. Codificao HuffmanNo incio do algoritmo, cada uma das letras forma uma rvore que composta apenas pela raiz e cujo contedo a freqncia (f) com que esta letra ocorre no texto. Em seguida, so escolhidas as duas rvores com as menores freqncias associadas e elas so unidas em uma s rvore cujo valor da raiz a soma do valor destas duas. Este processo repetido at a existncia de uma nica rvore. 6. Codificao Huffman Exemplo de rvore de Huffman: Caracteres: FECBDAFrequencia: 5 9 12 13 16 45 (respectivamente)Sequncia de caracteres: FFAAFEEEAAAAEEEECCAAAAAAAAACFFCCAAAACCBBCCAAAACCCBAA ABBBBDDAAAAAAAADDDDBBBBBBDDDDAAAAAADDDDDDAAAAEEDados iniciais, ordenados por frequncia de ocorrncia: 7. Codificao HuffmanSo combinadas as duas frequncias de ocorrncia mais baixa (F e E), de forma a obter uma sub-rvore de peso 14. Logo aps deve ser movido para o lugar que lhe corresponde, face ao peso combinado de 14. 8. Codificao HuffmanMais uma vez, devem ser combinadas as frequncias com ocorrncia de valor mais baixo. So os elementos C e B, que iro formar uma sub-rvore de peso 25. Logo aps, a sub- rvore deve ser movida para a sua nova posio. 9. Codificao HuffmanNeste passo, a sub-rvore de peso 14 e o elemento D so combinados e formam uma nova sub-rvore de peso 30. Deve ser movida para a sua nova posio. 10. Codificao HuffmanAgora os dois pesos mais baixos pertencem a duas sub-rvores. A rvore de peso 25 e a rvore de peso 30 so combinadas e formam uma nova sub-rvore de peso 55. Como o peso da nova sub-rvore superior ao do elemento A, a nova sub- rvore fica "depois" do elemento A. 11. Codificao HuffmanFinalmente, combina-se o elemento A e a sub-rvore de peso 55, para produzir a rvore final de codificao. 12. Codificao Huffman Codificao:Associa-se 0 as arestas da arvore de Huffman que ligam um n com seu filho esquerdo e 1, as arestas que ligam um n com seu filho direito. O cdigo correspondente a cada letra ser formado pelo nmero binrio associado ao caminho da raiz at a folha correspondente. A tabela de codificao resultante : A 0 C 100 B 101 F 1100 E 1101 D 111 (O resultado obtido foi: 010010111001101111) 13. Codificao HuffmanDecodificao: Para decodificar uma mensagem obtida, basta ir utilizando cada bit da mensagem para percorrer a rvore de Huffman desde a raiz at alguma folha, quando se obtm o simbolo decodificado. Volte ento para a raiz e continue a percorrer a rvore para decodificar o prximo smbolo. 14. Codificao Huffman Algoritmo Huffmanenquanto tamanho(alfabeto) > 1: S0 := retira_menor_probabilidade(alfabeto)S1 := retira_menor_probabilidade(alfabeto)X := novo_nX.filho0 := S0X.filho1 := S1X.probabilidade := S0.probabilidade + S1.probabilidadeinsere(alfabeto, X)fim enquantoX = retira_menor_smbolo(alfabeto) # nesse ponto s existe um smbolo.para cada folha em folhas(X): cdigo[folha] := percorre_da_raiz_at_a_folha(folha) fim para 15. Codificao HuffmanA funo tamanho retorna a quantidade de ns ou folhas armazenados no nosso repositrio, chamado aqui de alfabeto. A funo retira_menor_smbolo(alfabeto) retorna o n ou folha de menor probabilidade no nosso repositrio, e remove este smbolo do repositrio.O comando novo_n cria um novo n vazio.A funo insere(alfabeto, X) insere o smbolo X no nosso repositrio.A funo percorre_da_raiz_at_a_folha(folha) percorre a rvore binria da raiz at a folha acumulando os valores associados com as arestas em seu valor de retorno. 16. Codificao HuffmanDesta forma, o caractere de maior freqncia possui o cdigo de menor comprimento que exatamente a meta da compresso estatstica. Assim acontece com os demais caracteres, em ordem proporcionalmente crescente do nmero de bits. 17. Lempel-Ziv um algoritmo de compresso de dados sem perda da informao, criado por Abraham Lempel e Jacob Ziv. utilizado para compresso de arquivos binrios e imagens, como o formato bmp, tem maior desempenho em arquivos que possuam grupos de repeties de caracteres. 18. Lempel-ZivComparao de compactaes: Huffman LZW Arquivo de texto 66%44% Arquivo de som 65%64% Arquivo de imagem94%88% 19. Lempel-ZivE como funciona a compactao? realizada uma leitura no arquivo solicitado e realizada a substituio de caracteres por cdigos que utilizam menos bits.Funciona como um dicionrio de caracteres, quando iniciado o algoritmo verificado se este caracter j est inserido no dicionrio, caso no esteja ele inserido e retornado um bit, caso ele j esteja no dicionrio, retornado o bit referente ao caracter. 20. Lempel-ZivAbaixo mostrarei um simples algoritmo para entendermos como funciona a compactao 1.No incio o dicionrio contm todas as razes possveis e P vazio; 2.C