37
Lempel – Ziv - Welch

LZW - Compressão e Descompressão

Embed Size (px)

Citation preview

Page 1: LZW - Compressão e Descompressão

Lempel – Ziv - Welch

Page 2: LZW - Compressão e Descompressão

Pra quê

compactar???

Page 3: LZW - Compressão e Descompressão

Vamos viajar...Primeiros passos...

• Definir o lugar;• Juntar a grana;.....

• Arrumar as malas...

Page 4: LZW - Compressão e Descompressão

Vamos viajar...

Quantas malas você leva quando vai

viajar????

Page 5: LZW - Compressão e Descompressão

Nem sempre dá

para levar tudo

que você imagina!!

Page 6: LZW - Compressão e Descompressão

Por quê???

Page 7: LZW - Compressão e Descompressão

Espaço que você

imagina para as

suas malas...

Page 8: LZW - Compressão e Descompressão

Realidade...

Espaço custa caro!!!

Page 9: LZW - Compressão e Descompressão

Pra quê

compactar???

Page 10: LZW - Compressão e Descompressão

É preciso otimizar o

uso do espaço da

melhor forma

possível!!

Page 11: LZW - Compressão e Descompressão

Como ter tudo o que precisamos sem ocupar muito

espaço??

Page 12: LZW - Compressão e Descompressão

Compactando!!!

Page 13: LZW - Compressão e Descompressão

Algoritmos de Compressão

› Um minuto de um vídeo HD podeocupar mais de 1 GB.

Como colocar duas horas de filmeem um disco blu-ray de 25 GB

apenas?

Page 14: LZW - Compressão e Descompressão

Algoritmos Lempel-Ziv-Welch (LZW)

› O algoritmo Lempel-Ziv-Welch é um dosmuitos algoritmos utilizados para comprimirarquivos.

› É conhecido como um algoritmo semperdas, ou seja, durante a compressãodados não são perdidos.

› Foi criado por Abraham Lempel, Jacob Ziv eTerry Welch. Foi publicado por Welch em1984 como um refinamento do algoritmoLZ78 publicado por Lempel e Ziv, em 1978.

Page 15: LZW - Compressão e Descompressão

Algoritmo Lempel-Ziv-Welch

› Algoritmo LZW utiliza uma tabelade strings.

› Em poucas palavras, acompressão LZW substituisequências de caracteres porcódigos individuais.

› Os códigos 0-255 na tabela destrings representam bytesindividuais do arquivo de entrada eos códigos de 256 a 4.095 sãousados para representar assequências de bytes.

Page 16: LZW - Compressão e Descompressão

O que é compressão de

dados???

Page 17: LZW - Compressão e Descompressão

Compressão

› É baseada na construção de um dicionário de dados (grupo de um ou maiscaracteres) 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 nodicionário;

Page 18: LZW - Compressão e Descompressão

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

Page 19: LZW - Compressão e Descompressão

Pseudocódigo da Compressão1. 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.

Page 20: LZW - Compressão e Descompressão

Exemplo de Compressão

Page 21: LZW - Compressão e Descompressão

Exemplo de Compressão

Page 22: LZW - Compressão e Descompressão

Descompressão

› Na descompressão cada código é lido e comparadocom a tabela de códigos para fornecer a tradução.

› O primeiro passo é reconstruir a tabela de string damesma maneira como foi construída durante acodificação;

› Desta forma, o decodificador baseia-se em umatabela, que é idêntica a utilizada pelo codificador, eusa-a para decodificar os valores de entradasubsequentes.

Page 23: LZW - Compressão e Descompressão

Pseudocódigo da Descompressão

Page 24: LZW - Compressão e Descompressão

Exemplo de Descompressão

Page 25: LZW - Compressão e 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 caracteres.

Para o nosso exemplo serão necessários apenas exibir os

caracteres que nos interessa.

Page 26: LZW - Compressão e Descompressão

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

Page 27: LZW - Compressão e Descompressão

Exemplo de Descompressão

Índice Dicionário

1 A

2 B

3 W

3º Passo:

pw = 3 string.pw = wcw = 1 string.cw = a

A string.cw consta na tabela;Imprime string.cw.p = w p+c = wac = aAdiciona p+c na tabela;pw = cw => pw = 3

Console:

W A

Page 28: LZW - Compressão e Descompressão

Exemplo de Descompressão

Índice Dicionário

1 A

2 B

3 W

4 wa

4º Passo:

pw = 1 string.pw = acw = 2 string.cw = b

A string.cw consta na tabela;Imprime string.cw.p = a p+c = abc = bpw = cw => pw = 2

Console:

W A B

Page 29: LZW - Compressão e Descompressão

Exemplo de Descompressão

Índice Dicionário

1 A

2 B

3 W

4 wa

5 ab

5º Passo:

pw = 2 string.pw = bcw = 2 string.cw = b

A string.cw consta na tabela;Imprime string.cw.p = b p+c = bbc = bpw = cw => pw = 2

Console:

W A B B

Page 30: LZW - Compressão e Descompressão

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 = bcw = 1 string.cw = a

A string.cw consta na tabela;Imprime string.cw.p = b p+c = bac = apw = cw => pw = 1

Console:

W A B B A

Page 31: LZW - Compressão e Descompressão

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 = acw = 4 string.cw = wa

A string.cw consta na tabela;Imprime string.cw.p = a p+c = awc = wpw = cw => pw = 4

Console:

W A B B A W A

Page 32: LZW - Compressão e Descompressão

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 = wacw = 6 string.cw = bb

A string.cw consta na tabela;Imprime string.cw.p = wa p+c = wabc = bpw = cw => pw = 6

Console:

W A B B A W A B B

Page 33: LZW - Compressão e Descompressão

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 = bbcw = 1 string.cw = a

A string.cw consta na tabela;Imprime string.cw.p = bb p+c = bbac = apw = cw => pw = 1

Console:

O algoritmo terminou!

W A B B A W A B B A

Page 34: LZW - Compressão e Descompressão

Vantagens

› É muito eficaz na compressão desequências que apresentam algum tipo derepetição nos dados de entrada;

› È simples de entender;

› Rápida execução;

› Não necessita de nenhuma informação apriori sobre os dados de entrada;

› Pode comprimir dados em apenas umpasso;

› Faz a compressão e descompressão dosarquivos.

Page 35: LZW - Compressão e Descompressão

Desvantagens

› Não comprime bem sequências pequenas;

› Não comprime bem sequências com caracteres muitodiversos;

› Arquivos longos degradam a taxa de compressãoconforme o arquivo é lido.

› A razão para isso é simples. Uma vez que atabela de strings é de tamanho finito, depoisque certo número de inserções foram feitas,strings não mais podem ser adicionadas.

Page 36: LZW - Compressão e Descompressão

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 dedicionários com comprimento fixo. Com isso, o desempenhoproporcionado 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 dotamanho do fluxo de dados comprimidos, obtendo uma maiorrapidez de execução.

Page 37: LZW - Compressão e Descompressão

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.