Lempel – Ziv - Welch
Pra quê
compactar???
Vamos viajar...
Primeiros passos...
• Definir o lugar;
• Juntar a grana;
.
.
.
.
.
• Arrumar as malas...
Vamos viajar...
Quantas malas você
leva quando vai
viajar????
Nem sempre dá
para levar tudo
que você imagina!!
Por quê???
Espaço que você
imagina para as
suas malas...
Realidade...
Espaço custa caro!!!
Pra quê
compactar???
É preciso otimizar o
uso do espaço da
melhor forma
possível!!
Como ter tudo o que precisamos sem ocupar muito
espaço??
Compactando!!!
Algoritmos de Compressão
› Um minuto de um vídeo HD pode
ocupar mais de 1 GB.
Como colocar duas horas de filme
em um disco...
Algoritmos Lempel-Ziv-Welch (LZW)
› O algoritmo Lempel-Ziv-Welch é um dos
muitos algoritmos utilizados para comprimir
arqu...
Algoritmo Lempel-Ziv-Welch
› Algoritmo LZW utiliza uma tabela
de strings.
› Em poucas palavras, a
compressão LZW substitui...
O que é compressão de
dados???
Compressão
› É baseada na construção de um dicionário de dados (grupo de um ou mais
caracteres) a partir do fluxo de entra...
Pseudocódigo da Compressão
› As convenções adotadas são:
– raiz caracter individual
– string uma sequência de um ou mais c...
Pseudocódigo da Compressão
1. No início o dicionário contém todas as raízes possíveis e P é vazio;
2. C <= próximo caracte...
Exemplo de Compressão
Exemplo de Compressão
Descompressão
› Na descompressão cada código é lido e comparado
com a tabela de códigos para fornecer a tradução.
› O prim...
Pseudocódigo da Descompressão
Exemplo de Descompressão
Exemplo de Descompressão
Índice Dicionário
1 A
2 B
3 W
1º Passo: A tabela é
inicializada com todos os
valores possíveis de...
Exemplo de Descompressão
Índice Dicionário
1 A
2 B
3 W
2º Passo:
pw = string.pw =
cw = 3 string.cw = w
A string.cw consta ...
Exemplo de Descompressão
Índice Dicionário
1 A
2 B
3 W
3º Passo:
pw = 3 string.pw = w
cw = 1 string.cw = a
A string.cw con...
Exemplo de Descompressão
Índice Dicionário
1 A
2 B
3 W
4 wa
4º Passo:
pw = 1 string.pw = a
cw = 2 string.cw = b
A string.c...
Exemplo de Descompressão
Índice Dicionário
1 A
2 B
3 W
4 wa
5 ab
5º Passo:
pw = 2 string.pw = b
cw = 2 string.cw = b
A str...
Exemplo de Descompressão
Índice Dicionário
1 A
2 B
3 W
4 wa
5 ab
6 bb
6º Passo:
pw = 2 string.pw = b
cw = 1 string.cw = a
...
Exemplo de Descompressão
Índice Dicionário
1 A
2 B
3 W
4 wa
5 ab
6 bb
7 ba
7º Passo:
pw = 1 string.pw = a
cw = 4 string.cw...
Exemplo de Descompressão
Índice Dicionário
1 A
2 B
3 W
4 wa
5 ab
6 bb
7 ba
8 aw
8º Passo:
pw = 4 string.pw = wa
cw = 6 str...
Exemplo de Descompressão
Índice Dicionário
1 A
2 B
3 W
4 wa
5 ab
6 bb
7 ba
8 aw
9 wab
10 bba
9º Passo:
pw = 6 string.pw = ...
Vantagens
› É muito eficaz na compressão de
sequências que apresentam algum tipo de
repetição nos dados de entrada;
› È si...
Desvantagens
› Não comprime bem sequências pequenas;
› Não comprime bem sequências com caracteres muito
diversos;
› Arquiv...
Considerações Finais
› Este método de compressão sem perdas é de baixa complexidade,
pelo fato de o LZW usar como seu prin...
Referências Bibliográficas
[1] WIKIPÉDIA. Disponível em:<
http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch > ...
Próximos SlideShares
Carregando em…5
×

LZW - Compressão e Descompressão

2.119 visualizações

Publicada em

Esta apresentação fala sobre como é feita a compressão e descompressão de dados utilizando o método de Lempel-Ziv_Welch.

Publicada em: Educação
2 comentários
2 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
2.119
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
29
Comentários
2
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

LZW - Compressão e Descompressão

  1. 1. Lempel – Ziv - Welch
  2. 2. Pra quê compactar???
  3. 3. Vamos viajar... Primeiros passos... • Definir o lugar; • Juntar a grana; . . . . . • Arrumar as malas...
  4. 4. Vamos viajar... Quantas malas você leva quando vai viajar????
  5. 5. Nem sempre dá para levar tudo que você imagina!!
  6. 6. Por quê???
  7. 7. Espaço que você imagina para as suas malas...
  8. 8. Realidade... Espaço custa caro!!!
  9. 9. Pra quê compactar???
  10. 10. É preciso otimizar o uso do espaço da melhor forma possível!!
  11. 11. Como ter tudo o que precisamos sem ocupar muito espaço??
  12. 12. Compactando!!!
  13. 13. Algoritmos de Compressão › Um minuto de um vídeo HD pode ocupar mais de 1 GB. Como colocar duas horas de filme em um disco blu-ray de 25 GB apenas?
  14. 14. Algoritmos Lempel-Ziv-Welch (LZW) › O algoritmo Lempel-Ziv-Welch é um dos muitos algoritmos utilizados para comprimir arquivos. › É conhecido como um algoritmo sem perdas, ou seja, durante a compressão dados não são perdidos. › Foi criado por Abraham Lempel, Jacob Ziv e Terry Welch. Foi publicado por Welch em 1984 como um refinamento do algoritmo LZ78 publicado por Lempel e Ziv, em 1978.
  15. 15. Algoritmo Lempel-Ziv-Welch › Algoritmo LZW utiliza uma tabela de strings. › Em poucas palavras, a compressão LZW substitui sequências de caracteres por códigos individuais. › Os códigos 0-255 na tabela de strings representam bytes individuais do arquivo de entrada e os códigos de 256 a 4.095 são usados para representar as sequências de bytes.
  16. 16. O que é compressão de dados???
  17. 17. Compressão › É baseada na construção de um dicionário de dados (grupo de um ou mais caracteres) a partir do fluxo de entrada; › Os padrões dos dados são identificados e registrados no dicionário; › Quando é iniciado o algoritmo, verifica-se se o caractere já está inserido no dicionário;
  18. 18. Pseudocódigo da Compressão › As convenções adotadas são: – raiz caracter individual – string uma sequência de um ou mais caracteres – palavra código valor associado a uma string – dicionário tabela que relaciona palavras código e strings – P string que representa um prefixo – C caracter – cW palavra código – pW palavra código que representa um prefixo – X <= Y string X assume o valor da string Y – X+Y concatenação das string X e Y – string(w) string correspondente à palavra código w
  19. 19. Pseudocódigo da Compressão 1. No início o dicionário contém todas as raízes possíveis e P é vazio; 2. C <= próximo caractere da sequência de entrada; 3. A string P+C existe no dicionário ? a. se sim, i. P <= P+C; b. se não, i. coloque a palavra código correspondente a P na seqüência codificada; ii. adicione a string P+C ao dicionário; iii. P <= C; 4. Existem mais caracteres na seqüência de entrada ? a. se sim, i. volte ao passo 2; b. se não, ii. coloque a palavra código correspondente a P na seqüência codificada; iii. FIM.
  20. 20. Exemplo de Compressão
  21. 21. Exemplo de Compressão
  22. 22. Descompressão › Na descompressão cada código é lido e comparado com a tabela de códigos para fornecer a tradução. › O primeiro passo é reconstruir a tabela de string da mesma maneira como foi construída durante a codificação; › Desta forma, o decodificador baseia-se em uma tabela, que é idêntica a utilizada pelo codificador, e usa-a para decodificar os valores de entrada subsequentes.
  23. 23. Pseudocódigo da Descompressão
  24. 24. Exemplo de Descompressão
  25. 25. Exemplo de Descompressão Índice Dicionário 1 A 2 B 3 W 1º Passo: A tabela é inicializada com todos os valores possíveis de caracteres. Para o nosso exemplo serão necessários apenas exibir os caracteres que nos interessa.
  26. 26. Exemplo de Descompressão Índice Dicionário 1 A 2 B 3 W 2º Passo: pw = string.pw = cw = 3 string.cw = w A string.cw consta na tabela; Imprime string.cw. pw = cw => pw = 3 Console: W
  27. 27. Exemplo de Descompressão Índice Dicionário 1 A 2 B 3 W 3º Passo: pw = 3 string.pw = w cw = 1 string.cw = a A string.cw consta na tabela; Imprime string.cw. p = w p+c = wa c = a Adiciona p+c na tabela; pw = cw => pw = 3 Console: W A
  28. 28. Exemplo de Descompressão Índice Dicionário 1 A 2 B 3 W 4 wa 4º Passo: pw = 1 string.pw = a cw = 2 string.cw = b A string.cw consta na tabela; Imprime string.cw. p = a p+c = ab c = b pw = cw => pw = 2 Console: W A B
  29. 29. Exemplo de Descompressão Índice Dicionário 1 A 2 B 3 W 4 wa 5 ab 5º Passo: pw = 2 string.pw = b cw = 2 string.cw = b A string.cw consta na tabela; Imprime string.cw. p = b p+c = bb c = b pw = cw => pw = 2 Console: W A B B
  30. 30. Exemplo de Descompressão Índice Dicionário 1 A 2 B 3 W 4 wa 5 ab 6 bb 6º Passo: pw = 2 string.pw = b cw = 1 string.cw = a A string.cw consta na tabela; Imprime string.cw. p = b p+c = ba c = a pw = cw => pw = 1 Console: W A B B A
  31. 31. Exemplo de Descompressão Índice Dicionário 1 A 2 B 3 W 4 wa 5 ab 6 bb 7 ba 7º Passo: pw = 1 string.pw = a cw = 4 string.cw = wa A string.cw consta na tabela; Imprime string.cw. p = a p+c = aw c = w pw = cw => pw = 4 Console: W A B B A W A
  32. 32. Exemplo de Descompressão Índice Dicionário 1 A 2 B 3 W 4 wa 5 ab 6 bb 7 ba 8 aw 8º Passo: pw = 4 string.pw = wa cw = 6 string.cw = bb A string.cw consta na tabela; Imprime string.cw. p = wa p+c = wab c = b pw = cw => pw = 6 Console: W A B B A W A B B
  33. 33. Exemplo de Descompressão Índice Dicionário 1 A 2 B 3 W 4 wa 5 ab 6 bb 7 ba 8 aw 9 wab 10 bba 9º Passo: pw = 6 string.pw = bb cw = 1 string.cw = a A string.cw consta na tabela; Imprime string.cw. p = bb p+c = bba c = a pw = cw => pw = 1 Console: O algoritmo terminou! W A B B A W A B B A
  34. 34. Vantagens › É muito eficaz na compressão de sequências que apresentam algum tipo de repetição nos dados de entrada; › È simples de entender; › Rápida execução; › Não necessita de nenhuma informação a priori sobre os dados de entrada; › Pode comprimir dados em apenas um passo; › Faz a compressão e descompressão dos arquivos.
  35. 35. Desvantagens › Não comprime bem sequências pequenas; › Não comprime bem sequências com caracteres muito diversos; › Arquivos longos degradam a taxa de compressão conforme o arquivo é lido. › A razão para isso é simples. Uma vez que a tabela de strings é de tamanho finito, depois que certo número de inserções foram feitas, strings não mais podem ser adicionadas.
  36. 36. Considerações Finais › Este método de compressão sem perdas é de baixa complexidade, pelo fato de o LZW usar como seu principal foco a criação de dicionários com comprimento fixo. Com isso, o desempenho proporcionado pela compressão e descompressão é rápida. › Comparando-o com algoritmos semelhantes, anteriores ao mesmo (LZ77 e LZ78), é um dos algoritmos mais eficaz na redução do tamanho do fluxo de dados comprimidos, obtendo uma maior rapidez de execução.
  37. 37. Referências Bibliográficas [1] WIKIPÉDIA. Disponível em:< http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch > Acesso em 25 de maio de 2015. [2] The Scientist and Engineer’s Guide to Digital Sign Processing. Data 27: Data Compression – LZW Compression. Disponível em: < http://www.dspguide.com/ch27/5.htm > Acesso em: 28 de maio de 2015. [3] YOUTUBE. Lempel-Ziv-Welch Compression Algoritm – Tutorial. Disponível em: <https://www.youtube.com/watch?v=j2HSd3HCpDs> Acesso em 27 de maio de 2015. [4] Terry Welch, "A Technique for High-Performance Data Compression", Computer, June 19 [5] Mark Nelson. Programming mostly. Disponível em: < http://marknelson.us/1989/10/01/lzw- data-compression/ > Acesso em: 27 de maio de 2015. [6] MITOPENCOURSEWARE.Massachusetts Institute of Technology. Unit Two: Compression, Lecture One. Disponível em: >http://ocw.mit.edu/courses/electrical-engineering-and-computer- science/6-050j-information-and-entropy-spring-2008/videos-homework-and-readings/unit-2- lecture-1/ > Acesso em 28 de maio de 2015. [7] Implementações do LZW. Disponível em: <http://rosettacode.org/wiki/LZW_compression> Acesso em 27 de maio de 2015.

×