Compressão de Dadostiagodemelo.info/wp-content/uploads/2019/09/compressao...15/150 Histórico A...

Post on 06-Dec-2020

1 views 0 download

Transcript of Compressão de Dadostiagodemelo.info/wp-content/uploads/2019/09/compressao...15/150 Histórico A...

Algoritmos e Estruturas de Dados II

Compressão de DadosProf. Tiago Eugenio de Melo

tmelo@uea.edu.br

www.tiagodemelo.info

2/150

Observações

● As palavras com a fonte Courier indicam as palavras-reservadas da linguagem de programação.

3/150

Referências

● Projetos de Algoritmos – com implementações em Pascal e C. Nivio Ziviani. 2a edição. Thomson, 2005.

4/150

SIGLAS

● RI – Recuperação de Informação.● NLP – Natural Language Processing

(Processamento de Linguagem Natural).

5/150

INTRODUÇÃO

6/150

Compressão de Dados

7/150

Compressão de Dados

● Representação de uma fonte de dados de forma mais precisa possível utilizando um menor número de bits.

8/150

Compressão de Dados

● Representação de uma fonte de dados de forma mais precisa possível utilizando um menor número de bits.

● Objetivo é fazer com que a mesma quantidade de informação seja representada em um menor espaço de armazenamento.

9/150

Compressão de Dados

● Representação de uma fonte de dados de forma mais precisa possível utilizando um menor número de bits.

● Objetivo é fazer com que a mesma quantidade de informação seja representada em um menor espaço de armazenamento.

● Eliminar redundâncias: recorrências de letras, dígitos ou pixels.

10/150

Compressão de Dados

● Representação de uma fonte de dados de forma mais precisa possível utilizando um menor número de bits.

● Objetivo é fazer com que a mesma quantidade de informação seja representada em um menor espaço de armazenamento.

● Eliminar redundâncias: recorrências de letras, dígitos ou pixels.

● O receptor deve ser capaz de decodificar os dados para acessar a informação.

11/150

Histórico

12/150

Histórico

● A compressão de dados é oriunda da Criptografia: algoritmo de compressão é um codificador e um decodificador.

13/150

Histórico

● A compressão de dados é oriunda da Criptografia: algoritmo de compressão é um codificador e um decodificador.

● Relatos de encriptação por volta de 1.500 a.C. (escrita cifrada para guardar segredos).

14/150

Histórico

● A compressão de dados é oriunda da Criptografia: algoritmo de compressão é um codificador e um decodificador.

● Relatos de encriptação por volta de 1.500 a.C. (escrita cifrada para guardar segredos).

● Gregos e espartanos usavam códigos em movimentos bélicos durante as guerras (475 a.C.).

15/150

Histórico

● A compressão de dados é oriunda da Criptografia: algoritmo de compressão é um codificador e um decodificador.

● Relatos de encriptação por volta de 1.500 a.C. (escrita cifrada para guardar segredos).

● Gregos e espartanos usavam códigos em movimentos bélicos durante as guerras (475 a.C.).

● No Século XIX, a invenção do telégrafo e do Código Morse abriu espaço para a criptografia moderna que deixou de ter processos exclusivamente manuais.

16/150

Histórico

17/150

Histórico

● 1a Guerra Mundial (1914 a 1918): máquinas de codificação mecânicas usadas para codificar e decodificar textos usando encriptações sofisticadas e complexas.

18/150

Histórico

● 1a Guerra Mundial (1914 a 1918): máquinas de codificação mecânicas usadas para codificar e decodificar textos usando encriptações sofisticadas e complexas.

● 2a Guerra Mundial (1939 a 1945): codificação da mensagem para esconder a informação que era passada através dos rádios (surge a compactação dos dados).

19/150

Histórico

● 1a Guerra Mundial (1914 a 1918): máquinas de codificação mecânicas usadas para codificar e decodificar textos usando encriptações sofisticadas e complexas.

● 2a Guerra Mundial (1939 a 1945): codificação da mensagem para esconder a informação que era passada através dos rádios (surge a compactação dos dados).

● Advento dos computadores digitais:

20/150

Histórico

● 1a Guerra Mundial (1914 a 1918): máquinas de codificação mecânicas usadas para codificar e decodificar textos usando encriptações sofisticadas e complexas.

● 2a Guerra Mundial (1939 a 1945): codificação da mensagem para esconder a informação que era passada através dos rádios (surge a compactação dos dados).

● Advento dos computadores digitais:– Necessidade de criação de códigos seguros.

21/150

Histórico

● 1a Guerra Mundial (1914 a 1918): máquinas de codificação mecânicas usadas para codificar e decodificar textos usando encriptações sofisticadas e complexas.

● 2a Guerra Mundial (1939 a 1945): codificação da mensagem para esconder a informação que era passada através dos rádios (surge a compactação dos dados).

● Advento dos computadores digitais:– Necessidade de criação de códigos seguros.– Necessidade de redução do espaço de armazenamento.

22/150

Motivação

23/150

Motivação

● Explosão de informação textual disponível on-line:

24/150

Motivação

● Explosão de informação textual disponível on-line:– Bibliotecas digitais.

25/150

Motivação

● Explosão de informação textual disponível on-line:– Bibliotecas digitais.– Sistemas de automação de escritórios.

26/150

Motivação

● Explosão de informação textual disponível on-line:– Bibliotecas digitais.– Sistemas de automação de escritórios.– Bancos de dados de documentos.

27/150

Motivação

● Explosão de informação textual disponível on-line:– Bibliotecas digitais.– Sistemas de automação de escritórios.– Bancos de dados de documentos.– World Wide Web (WWW).

28/150

Motivação

● Explosão de informação textual disponível on-line:– Bibliotecas digitais.– Sistemas de automação de escritórios.– Bancos de dados de documentos.– World Wide Web (WWW).

● Somente a Web tem hoje 1,714,748,192 de páginas estáticas disponíveis.

29/150

Motivação

● Explosão de informação textual disponível on-line:– Bibliotecas digitais.– Sistemas de automação de escritórios.– Bancos de dados de documentos.– World Wide Web (WWW).

● Somente a Web tem hoje 1,714,748,192 de páginas estáticas disponíveis.– Cada bilhão de páginas ocupando aproximadamente

10 terabytes de texto.

30/150

Motivação

● Explosão de informação textual disponível on-line:– Bibliotecas digitais.– Sistemas de automação de escritórios.– Bancos de dados de documentos.– World Wide Web (WWW).

● Somente a Web tem hoje 1,714,748,192 de páginas estáticas disponíveis.– Cada bilhão de páginas ocupando aproximadamente 10

terabytes de texto.– Há uma estimativa do Google ter mais de 60 trilhões de

páginas indexadas.

31/150

Características necessárias para sistemas de RI

[1] Silva de Moura, Edleno, et al. "Fast and flexible word searching on compressed text." ACM Transactions on Information Systems (TOIS) 18.2 (2000): 113-139.

32/150

Características necessárias para sistemas de RI

● Métodos de compressão de dados permitem:

[1] Silva de Moura, Edleno, et al. "Fast and flexible word searching on compressed text." ACM Transactions on Information Systems (TOIS) 18.2 (2000): 113-139.

33/150

Características necessárias para sistemas de RI

● Métodos de compressão de dados permitem:– Pesquisar diretamente o texto comprimido mais

rapidamente do que o texto original.

[1] Silva de Moura, Edleno, et al. "Fast and flexible word searching on compressed text." ACM Transactions on Information Systems (TOIS) 18.2 (2000): 113-139.

34/150

Características necessárias para sistemas de RI

● Métodos de compressão de dados permitem:– Pesquisar diretamente o texto comprimido mais

rapidamente do que o texto original.– Obter maior compressão em relação a métodos

tradicionais, gerando maior economia de espaço.

[1] Silva de Moura, Edleno, et al. "Fast and flexible word searching on compressed text." ACM Transactions on Information Systems (TOIS) 18.2 (2000): 113-139.

35/150

Características necessárias para sistemas de RI

● Métodos de compressão de dados permitem:– Pesquisar diretamente o texto comprimido mais

rapidamente do que o texto original.– Obter maior compressão em relação a métodos

tradicionais, gerando maior economia de espaço.– Acessar diretamente qualquer parte do texto

comprimido sem necessidade de descomprimir todo o texto desde o início[1].

[1] Silva de Moura, Edleno, et al. "Fast and flexible word searching on compressed text." ACM Transactions on Information Systems (TOIS) 18.2 (2000): 113-139.

36/150

Características necessárias para sistemas de RI

● Métodos de compressão de dados permitem:– Pesquisar diretamente o texto comprimido mais

rapidamente do que o texto original.– Obter maior compressão em relação a métodos

tradicionais, gerando maior economia de espaço.– Acessar diretamente qualquer parte do texto

comprimido sem necessidade de descomprimir todo o texto desde o início[1].

● Compromisso espaço versus tempo.

[1] Silva de Moura, Edleno, et al. "Fast and flexible word searching on compressed text." ACM Transactions on Information Systems (TOIS) 18.2 (2000): 113-139.

37/150

Por que usar compressão?

38/150

Por que usar compressão?

● Compressão de texto

39/150

Por que usar compressão?

● Compressão de texto– Maneiras de representar o texto original em menos

espaço.

40/150

Por que usar compressão?

● Compressão de texto– Maneiras de representar o texto original em menos

espaço.– Substituir os símbolos do texto por outros que

possam ser representados usando um número menor de bits ou bytes.

41/150

Por que usar compressão?

● Compressão de texto– Maneiras de representar o texto original em menos

espaço.– Substituir os símbolos do texto por outros que

possam ser representados usando um número menor de bits ou bytes.

● Ganho obtido

42/150

Por que usar compressão?

● Compressão de texto– Maneiras de representar o texto original em menos

espaço.– Substituir os símbolos do texto por outros que

possam ser representados usando um número menor de bits ou bytes.

● Ganho obtido– O texto comprimido ocupa menos espaço de

armazenamento.

43/150

Por que usar compressão?

● Compressão de texto– Maneiras de representar o texto original em menos espaço.– Substituir os símbolos do texto por outros que possam ser

representados usando um número menor de bits ou bytes.● Ganho obtido

– O texto comprimido ocupa menos espaço de armazenamento.

– Menos tempo para ser lido do disco ou ser transmitido por um canal de comunicação e para ser pesquisado.

44/150

Por que usar compressão?

45/150

Por que usar compressão?

● Preço a pagar

46/150

Por que usar compressão?

● Preço a pagar– Custo computacional para codificar e decodificar o

texto.

47/150

Por que usar compressão?

● Preço a pagar– Custo computacional para codificar e decodificar o

texto.● Avanço da tecnologia

48/150

Por que usar compressão?

● Preço a pagar– Custo computacional para codificar e decodificar o

texto.● Avanço da tecnologia

– Há estimativas de que em 20 anos, o tempo de acesso a discos magnéticos tem se mantido praticamente constante, enquanto a velocidade de processamento aumentou aproximadamente 2 mil vezes.

49/150

Por que usar compressão?

● Preço a pagar– Custo computacional para codificar e decodificar o texto.

● Avanço da tecnologia– Há estimativas de que em 20 anos, o tempo de acesso a

discos magnéticos tem se mantido praticamente constante, enquanto a velocidade de processamento aumentou aproximadamente 2 mil vezes.

– Aumento do investimento no poder de computação em compressão em troca de menos espaço em disco ou menor tempo de transmissão.

50/150

Razão de Compressão

51/150

Razão de Compressão

● Definida pela porcentagem que o arquivo comprimido representa em relação ao tamanho do arquivo não comprimido.

52/150

Razão de Compressão

● Definida pela porcentagem que o arquivo comprimido representa em relação ao tamanho do arquivo não comprimido.

● Exemplo: se o arquivo não comprimido possui 100 bytes e o arquivo comprimido resultante por 30 bytes, então a razão de compressão é de 30%.

53/150

Razão de Compressão

● Definida pela porcentagem que o arquivo comprimido representa em relação ao tamanho do arquivo não comprimido.

● Exemplo: se o arquivo não comprimido possui 100 bytes e o arquivo comprimido resultante por 30 bytes, então a razão de compressão é de 30%.

● Utilizada para medir o ganho em espaço obtido por um método de compressão.

54/150

Outros importantes aspectos a considerar

55/150

Outros importantes aspectos a considerar

● Além da economia de espaço, deve-se considerar:

56/150

Outros importantes aspectos a considerar

● Além da economia de espaço, deve-se considerar:– Velocidade de compressão e descompressão.

57/150

Outros importantes aspectos a considerar

● Além da economia de espaço, deve-se considerar:– Velocidade de compressão e descompressão.– Possibilidade de realizar casamento de cadeias

diretamente do texto comprimido.

58/150

Outros importantes aspectos a considerar

● Além da economia de espaço, deve-se considerar:– Velocidade de compressão e descompressão.– Possibilidade de realizar casamento de cadeias

diretamente do texto comprimido.– Permitir acesso direto a qualquer parte do texto

comprimido e iniciar a descompressão a partir da parte acessada.

59/150

Outros importantes aspectos a considerar

● Além da economia de espaço, deve-se considerar:– Velocidade de compressão e descompressão.– Possibilidade de realizar casamento de cadeias diretamente

do texto comprimido.– Permitir acesso direto a qualquer parte do texto comprimido

e iniciar a descompressão a partir da parte acessada.● Um sistema de RI para grandes coleções de

documentos que estejam comprimidos necessitam acesso direto a qualquer ponto do texto comprimido.

60/150

Código de Huffman

61/150

O que é?

62/150

O que é?

● É um método de compactação que usa as probabilidades de ocorrências dos símbolos no conjunto de dados a ser compactado para determinar códigos de tamanho variável para cada símbolo.

63/150

Procedimento

64/150

Procedimento

● É construída uma árvore binária baseada na frequência de uso das letras do alfabeto de modo que as mais frequentemente utilizadas apareçam mais perto da raiz.

65/150

Procedimento

● É construída uma árvore binária baseada na frequência de uso das letras do alfabeto de modo que as mais frequentemente utilizadas apareçam mais perto da raiz.

● A árvore é construída de baixo para cima (das folhas para a raiz), começando a partir das letras menos usadas até atingir a raiz.

66/150

Procedimento

67/150

Procedimento

● Etapas:

68/150

Procedimento

● Etapas:– Cálculo da frequência de cada caractere no

arquivo.

69/150

Procedimento

● Etapas:– Cálculo da frequência de cada caractere no

arquivo.– Execução do algoritmo de Huffman para a

construção de uma árvore binária.

70/150

Procedimento

● Etapas:– Cálculo da frequência de cada caractere no

arquivo.– Execução do algoritmo de Huffman para a

construção de uma árvore binária.– Codificação propriamente dita.

71/150

Compressão de textos em linguagem natural

72/150

Compressão de textos em linguagem natural

● Um dos métodos de codificação mais conhecidos é o de Huffman (1952):

73/150

Compressão de textos em linguagem natural

● Um dos métodos de codificação mais conhecidos é o de Huffman (1952):– Atribui códigos mais curtos a símbolos com

frequências altas.

74/150

Compressão de textos em linguagem natural

● Um dos métodos de codificação mais conhecidos é o de Huffman (1952):– Atribui códigos mais curtos a símbolos com

frequências altas.– Um código único, de tamanho variável, é atribuído

a cada símbolo diferente do texto.

75/150

Compressão de textos em linguagem natural

● Um dos métodos de codificação mais conhecidos é o de Huffman (1952):– Atribui códigos mais curtos a símbolos com

frequências altas.– Um código único, de tamanho variável, é atribuído

a cada símbolo diferente do texto.– As implementações tradicionais do método de

Huffman consideram caracteres como símbolos.

76/150

Compressão de textos em linguagem natural

● Um dos métodos de codificação mais conhecidos é o de Huffman (1952):– Atribui códigos mais curtos a símbolos com frequências

altas.– Um código único, de tamanho variável, é atribuído a cada

símbolo diferente do texto.– As implementações tradicionais do método de Huffman

consideram caracteres como símbolos.– Para aliar as necessidades dos algoritmos de

compressão às necessidades dos sistemas de RI apontadas acima, deve-se considerar palavras como símbolos a serem codificados.

77/150

Compressão de textos em linguagem natural

● Um dos métodos de codificação mais conhecidos é o de Huffman (1952):– Atribui códigos mais curtos a símbolos com frequências altas.– Um código único, de tamanho variável, é atribuído a cada

símbolo diferente do texto.– As implementações tradicionais do método de Huffman

consideram caracteres como símbolos.– Para aliar as necessidades dos algoritmos de compressão às

necessidades dos sistemas de RI apontadas acima, deve-se considerar palavras como símbolos a serem codificados.

– Métodos de Huffman baseados em caracteres comprimem o texto para aproximadamente 60%.

78/150

Compressão de textos em linguagem natural

● Um dos métodos de codificação mais conhecidos é o de Huffman (1952):– Atribui códigos mais curtos a símbolos com frequências altas.– Um código único, de tamanho variável, é atribuído a cada símbolo

diferente do texto.– As implementações tradicionais do método de Huffman consideram

caracteres como símbolos.– Para aliar as necessidades dos algoritmos de compressão às

necessidades dos sistemas de RI apontadas acima, deve-se considerar palavras como símbolos a serem codificados.

– Métodos de Huffman baseados em caracteres comprimem o texto para aproximadamente 60%.

– Métodos de Huffman baseados em palavras comprimem o texto para valores pouco acima de 25%.

79/150

Métodos de Huffman baseados em palavras: vantagens

80/150

Métodos de Huffman baseados em palavras: vantagens

● Permitem acesso randômico a palavras dentro do texto comprimido.

81/150

Métodos de Huffman baseados em palavras: vantagens

● Permitem acesso randômico a palavras dentro do texto comprimido.

● Considerar palavras como símbolos significa que a tabela de símbolos do codificador é exatamente o vocabulário do texto.

82/150

Métodos de Huffman baseados em palavras: vantagens

● Permitem acesso randômico a palavras dentro do texto comprimido.

● Considerar palavras como símbolos significa que a tabela de símbolos do codificador é exatamente o vocabulário do texto.– Isso permite uma integração natural entre o método

de compressão e o arquivo invertido.

83/150

Compressão de Huffman usando palavras

84/150

Compressão de Huffman usando palavras

● Técnica de compressão mais eficaz para textos em linguagem natural.

85/150

Compressão de Huffman usando palavras

● Técnica de compressão mais eficaz para textos em linguagem natural.

● O método considera cada palavra diferente do texto como um símbolo.

86/150

Compressão de Huffman usando palavras

● Técnica de compressão mais eficaz para textos em linguagem natural.

● O método considera cada palavra diferente do texto como um símbolo.– Conta suas frequências e gera um código de

Huffman para as suas palavras.

87/150

Compressão de Huffman usando palavras

● Técnica de compressão mais eficaz para textos em linguagem natural.

● O método considera cada palavra diferente do texto como um símbolo.– Conta suas frequências e gera um código de

Huffman para as suas palavras.– A seguir, comprime o texto substituindo cada

palavra pelo seu código.

88/150

Compressão de Huffman usando palavras

● Técnica de compressão mais eficaz para textos em linguagem natural.

● O método considera cada palavra diferente do texto como um símbolo.– Conta suas frequências e gera um código de

Huffman para as suas palavras.– A seguir, comprime o texto substituindo cada

palavra pelo seu código.● Assim, a compressão é realizada em duas

passadas sobre o texto:

89/150

Compressão de Huffman usando palavras

● Técnica de compressão mais eficaz para textos em linguagem natural.

● O método considera cada palavra diferente do texto como um símbolo.– Conta suas frequências e gera um código de Huffman

para as suas palavras.– A seguir, comprime o texto substituindo cada palavra

pelo seu código.● Assim, a compressão é realizada em duas

passadas sobre o texto:– Obtenção da frequência de cada palavra diferente.

90/150

Compressão de Huffman usando palavras

● Técnica de compressão mais eficaz para textos em linguagem natural.

● O método considera cada palavra diferente do texto como um símbolo.– Conta suas frequências e gera um código de Huffman para

as suas palavras.– A seguir, comprime o texto substituindo cada palavra pelo

seu código.● Assim, a compressão é realizada em duas passadas

sobre o texto:– Obtenção da frequência de cada palavra diferente.– Realização da compressão.

91/150

Forma eficiente de lidar com palavras e separadores

92/150

Forma eficiente de lidar com palavras e separadores

● Um texto em linguagem natural é constituído de palavras e separadores.

93/150

Forma eficiente de lidar com palavras e separadores

● Um texto em linguagem natural é constituído de palavras e separadores.

● Separadores são caracteres que aparecem entre palavras:

94/150

Forma eficiente de lidar com palavras e separadores

● Um texto em linguagem natural é constituído de palavras e separadores.

● Separadores são caracteres que aparecem entre palavras:– Espaço, vírgula, ponto, ponto e vírgula,

interrogação, entre outros.

95/150

Forma eficiente de lidar com palavras e separadores

● Um texto em linguagem natural é constituído de palavras e separadores.

● Separadores são caracteres que aparecem entre palavras:– Espaço, vírgula, ponto, ponto e vírgula,

interrogação, entre outros.● Uma forma eficiente de lidar com palavras e

separadores é representar o espaço simples de forma implícita no texto comprimido.

96/150

Forma eficiente de lidar com palavras e separadores

● Um texto em linguagem natural é constituído de palavras e separadores.

● Separadores são caracteres que aparecem entre palavras:– Espaço, vírgula, ponto, ponto e vírgula, interrogação,

entre outros.● Uma forma eficiente de lidar com palavras e

separadores é representar o espaço simples de forma implícita no texto comprimido.– Nesse modelo, se uma palavra é seguida de um espaço,

então somente a palavra é codificada.

97/150

Forma eficiente de lidar com palavras e separadores

● Um texto em linguagem natural é constituído de palavras e separadores.

● Separadores são caracteres que aparecem entre palavras:– Espaço, vírgula, ponto, ponto e vírgula, interrogação, entre

outros.● Uma forma eficiente de lidar com palavras e separadores

é representar o espaço simples de forma implícita no texto comprimido.– Nesse modelo, se uma palavra é seguida de um espaço, então

somente a palavra é codificada.– Senão, a palavra e o separador são codificados separadamente.

98/150

Forma eficiente de lidar com palavras e separadores

● Um texto em linguagem natural é constituído de palavras e separadores.

● Separadores são caracteres que aparecem entre palavras:– Espaço, vírgula, ponto, ponto e vírgula, interrogação, entre outros.

● Uma forma eficiente de lidar com palavras e separadores é representar o espaço simples de forma implícita no texto comprimido.– Nesse modelo, se uma palavra é seguida de um espaço, então

somente a palavra é codificada.– Senão, a palavra e o separador são codificados separadamente.

● No momento da decodificação, supõe-se que um espaço simples segue cada palavra, a não ser que o próximo símbolo corresponda a um separador.

100/150

Árvore de Huffman

101/150

Árvore de Huffman

● O método de Huffman produz a árvore de codificação que minimiza o comprimento do arquivo compactado.

102/150

Árvore de Huffman

● O método de Huffman produz a árvore de codificação que minimiza o comprimento do arquivo compactado.

● Existem diversas árvores que produzem a mesma compressão:

103/150

Árvore de Huffman

● O método de Huffman produz a árvore de codificação que minimiza o comprimento do arquivo compactado.

● Existem diversas árvores que produzem a mesma compressão:– Por exemplo, trocar o filho à esquerda de um nó

por um filho à direita leva a uma árvore de codificação alternativa com a mesma razão de compressão.

104/150

Árvore de Huffman

● O método de Huffman produz a árvore de codificação que minimiza o comprimento do arquivo compactado.

● Existem diversas árvores que produzem a mesma compressão:– Por exemplo, trocar o filho à esquerda de um nó

por um filho à direita leva a uma árvore de codificação alternativa com a mesma razão de compressão.

– Entretanto, a escolha preferencial para a maioria das aplicações é a árvore canônica.

105/150

Árvore de Huffman

● O método de Huffman produz a árvore de codificação que minimiza o comprimento do arquivo compactado.

● Existem diversas árvores que produzem a mesma compressão:– Por exemplo, trocar o filho à esquerda de um nó por um

filho à direita leva a uma árvore de codificação alternativa com a mesma razão de compressão.

– Entretanto, a escolha preferencial para a maioria das aplicações é a árvore canônica.

● Uma árvore de Huffman é canônica quando a altura da subárvore à direita de qualquer nó nunca é menor que a altura da subárvore à esquerda.

106/150

Árvore de Huffman

107/150

Árvore de Huffman

● A representação do código na forma de árvore facilita a visualização.

108/150

Árvore de Huffman

● A representação do código na forma de árvore facilita a visualização.

● Sugere métodos de codificação e decodificação triviais:

109/150

Árvore de Huffman

● A representação do código na forma de árvore facilita a visualização.

● Sugere métodos de codificação e decodificação triviais:– Codificação: a árvore é percorrida emitindo bits ao

longo de suas arestas.

110/150

Árvore de Huffman

● A representação do código na forma de árvore facilita a visualização.

● Sugere métodos de codificação e decodificação triviais:– Codificação: a árvore é percorrida emitindo bits ao

longo de suas arestas.– Decodificação: os bits de entrada são usados para

selecionar as arestas.

111/150

Árvore de Huffman

● A representação do código na forma de árvore facilita a visualização.

● Sugere métodos de codificação e decodificação triviais:– Codificação: a árvore é percorrida emitindo bits ao

longo de suas arestas.– Decodificação: os bits de entrada são usados para

selecionar as arestas.– Essa abordagem é ineficiente tanto em termos de

espaço quanto em termos de tempo.

112/150

Algoritmo baseado na codificação canônica com comportamento linear

em tempo e espaço

113/150

Algoritmo baseado na codificação canônica com comportamento linear

em tempo e espaço● O algoritmo é atribuído a Moffat e Katajainen

(1995)

114/150

Algoritmo baseado na codificação canônica com comportamento linear

em tempo e espaço● O algoritmo é atribuído a Moffat e Katajainen

(1995)● Calcula os comprimentos dos códigos em lugar

dos códigos propriamente ditos.

115/150

Algoritmo baseado na codificação canônica com comportamento linear

em tempo e espaço● O algoritmo é atribuído a Moffat e Katajainen

(1995)● Calcula os comprimentos dos códigos em lugar

dos códigos propriamente ditos.● A compressão atingida é a mesma,

independentemente dos códigos utilizados.

116/150

Algoritmo baseado na codificação canônica com comportamento linear

em tempo e espaço● O algoritmo é atribuído a Moffat e Katajainen

(1995)● Calcula os comprimentos dos códigos em lugar

dos códigos propriamente ditos.● A compressão atingida é a mesma,

independentemente dos códigos utilizados.● Após o cálculo dos comprimentos, há uma forma

elegante e eficiente para a codificação e a decodificação.

117/150

Exemplo

118/150

Exemplo

● Considere a seguinte sequência de caracteres:

119/150

Exemplo

● Considere a seguinte sequência de caracteres:

AAAAAABBBBBCCCCDDDEEF

120/150

Exemplo

● Considere a seguinte sequência de caracteres:

AAAAAABBBBBCCCCDDDEEF● A menor codificação possível para os

caracteres é em binário de três bits por caractere.

121/150

Exemplo

● Considere a seguinte sequência de caracteres:

AAAAAABBBBBCCCCDDDEEF● A menor codificação possível para os

caracteres é em binário de três bits por caractere.

● Portanto:

122/150

Exemplo

● Considere a seguinte sequência de caracteres:

AAAAAABBBBBCCCCDDDEEF● A menor codificação possível para os

caracteres é em binário de três bits por caractere.

● Portanto:

123/150

Exemplo

● Considere a seguinte sequência de caracteres:

AAAAAABBBBBCCCCDDDEEF● A menor codificação possível para os caracteres

é em binário de três bits por caractere.● Portanto:

● Gerando:

124/150

Exemplo

● Considere a seguinte sequência de caracteres:

AAAAAABBBBBCCCCDDDEEF● A menor codificação possível para os caracteres é

em binário de três bits por caractere.● Portanto:

● Gerando:000000000000000000001001001001001010010010010011011011100100101

125/150

Exemplo

● Considere a seguinte sequência de caracteres:

AAAAAABBBBBCCCCDDDEEF● A menor codificação possível para os caracteres é

em binário de três bits por caractere.● Portanto:

● Gerando:000000000000000000001001001001001010010010010011011011100100101

63 bits de comprimento

126/150

Exemplo (cont.)

127/150

Exemplo (cont.)

● Para usar o código de Huffman, é necessário montar uma árvore.

128/150

Exemplo (cont.)

● Para usar o código de Huffman, é necessário montar uma árvore.

● O primeiro passo é contar as ocorrências de cada símbolo da cadeia:

129/150

Exemplo (cont.)

● Para usar o código de Huffman, é necessário montar uma árvore.

● O primeiro passo é contar as ocorrências de cada símbolo da cadeia:

130/150

Exemplo (cont.)

131/150

Exemplo (cont.)

● Passo 1

132/150

Exemplo (cont.)

● Passo 1

133/150

Exemplo (cont.)

● Passo 1

● Passo 2

134/150

Exemplo (cont.)

● Passo 1

● Passo 2

135/150

Exemplo (cont.)

136/150

Exemplo (cont.)

● Passo 3

137/150

Exemplo (cont.)

● Passo 3

138/150

Exemplo (cont.)

139/150

Exemplo (cont.)

● Passo 4

140/150

Exemplo (cont.)

● Passo 4

141/150

Exemplo (cont.)

142/150

Exemplo (cont.)

● Árvore de Huffman

143/150

Exemplo (cont.)

● Árvore de Huffman

144/150

Exemplo (cont.)

● Árvore de Huffman

145/150

Exemplo (cont.)

146/150

Exemplo (cont.)

● A sequência original agora é representada por:

147/150

Exemplo (cont.)

● A sequência original agora é representada por:● 000000000000101010101011111111010010010011001100111

148/150

Exemplo (cont.)

● A sequência original agora é representada por:● 000000000000101010101011111111010010010011001100111

● Totalizando 51 bits.

149/150

Exemplo (cont.)

● A sequência original agora é representada por:● 000000000000101010101011111111010010010011001100111

● Totalizando 51 bits.● A compressão foi de 12 bits ou cerca de 20%.

151/150

Exercícios

152/150

Exercícios

● Desenhar a árvore de Huffman para o seguinte conjunto de chaves e frequências descrito abaixo:– {A:1, B:6, C:2, D:1, E:1, F:9, G:2, H:3}

● A árvore fornecida pelo algoritmo de Huffman é única, ou seja, a árvore sempre fornecerá a mesma árvore?