Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Compressão de Dados- Lempel-Ziv • Método de compressão baseado em dicionário que codificam strings de símbolos, de comprimentos variáveis, como códigos individuais. • Esse código formam um índice para um dicionário de frases. • O algoritmo de Lempel-Ziv utiliza duas áreas de trabalho: � Dicionário���� onde ficam armazenadas as informações codificadas. � Área de pesquisa ���� onde fica o string a comprimir ou descomprimir. • Ométodo consiste de: • compressão: identificar, na área de pesquisa, a maior seqüência de símbolos armazenada no dicionário e substituí-la por um código. • descompressão: os códigos da área de pesquisa devem ser substituídos pelas seqüências de símbolos do dicionário, correspondentes. • Existe variações de algoritmos de Lempel-Ziv, nós vamos estudar apenas um deles [LZ78]. 2 Compressão de Dados- Lempel-Ziv • O algoritmo [LZ78] mantém um dicionário de “frases” já ocorridas no arquivo. • Esse dicionário começa, por definição com o símbolo null. A cada passo é criada uma nova frase, constituída de uma frase já presente no dicionário e um caractere representado explicitamente. • Desta forma, uma dupla (N,C) é gravada no arquivo compactado • N���� número da frase já ocorrida • C���� O próximo caractere • Essa dupla significa, copie a frase N seguida pelo caractere C 3 Compressão de Dados- Lempel-Ziv Exemplo: texto utilizando um albabeto de duas letras aaababbbaaabaaaaaaabaabb Regra: separar essa cadeia de caracteres em pedaços de texto, tal que cada pedaço é a menor cadeia de caracteres que ainda não apareceu. aaababbbaaabaaaaaaabaabb Index: 0 1 2 3 4 5 6 7 8 9 10 0 aaababbbaaabaaaaaaabaabb 0���� null 4 Compressão de Dados- Lempel-Ziv Codificação Lempel-ZIV Index: 0 1 2 3 4 5 6 7 8 9 10 0 aaababbbaaabaaaaaaabaabb Codificação: 1 2 3 4 5 6 7 8 9 10 0a1a0b1b3b2a3a6a2b9b 1 3 2 4 6 9 7 5 108 b a a a a a b b b b A árvore não é binária 5 Compressão de Dados- Lempel-Ziv Exercício: Codifique a seguinte mensagem: ARARAQUARA 1 A 2 R 3 AR 4 AQ 5 U 6 ARA 2 3 1 4 6 5 Q A R A R U 6 Compressão de Dados- Lempel-Ziv Exercício: Decodifique a seguinte mensagem: 0A0 1N 1 1M4O2N3D0O 1 A 2 b 3 AN 4 Ab 5 AM 6 AbO 7 bN 8 AND 9 O bb A ANA AMA O NANDO 7 Compressão de Dados- Lempel-Ziv O número de bits requerido para codificar o arquivo • Cada letra é representada por 8 bits • Cada índice é representado pelo maior número de bits possível • Quantos bits são necessário para representar os n índices? 1 2 3 4 5 6 7 8 9 10 a1a0b1b3b2a3a6a2b9b Índice 1: nenhum bit Índice 2: no máximo 1 bit ����pode apontar para 0 ou 1 Índice 3: no máximo 2���� pode apontar para 0, 1 ou 2 Índice 4: no máximo 2���� pode apontar para 0, 1, 2 ou 3 Índice 5-8: no máximo 3���� pode apontar para índice entre 0 e 7 Índice 9-16: no máximo 4���� pode apontar p/ índice entre 0 e 17 8 Compressão de Dados- Lempel-Ziv • Exemplo: no. de bits são necessário para representar a cadeia aaababbbaaabaaaaaaabaabb 1 2 3 4 5 6 7 8 9 10 a1a0b1b3b2a3a6a2b9b seqüência enviada: a1a0b1b11b10a11a110a10b1001b índice Ind binário frase código 0 0 null 1 1 a a 2 10 aa 1a 3 11 b 0b 4 100 ab 1b 5 101 bb 11b 6 110 aaa 10a 7 111 ba 11a 8 1000 aaaa 110a 9 1001 aab 10b 10 1010 aabb 1001b n.o total de bits no arquivo codificado: No. Bits para caracteres= (10letras x 8bits)=80 No. Bits para índices= 3x1+4x2+1x3+1x4=18 Total de bits no arquivo = 24 letras x 8 bits=192 bits Total de bits no arquivo codificado=98 bits 9 Compressão de Dados- Lempel-Ziv Exercício: calcule o espaço para armazenar a mensagem do exercício:A ANA AMA O NANDO cadeias: null AbANAbAMAbObNANDO Índices: 0 1 2 3 4 5 6 7 8 9 codificado � A0b1N1b1M100O10N11D0O NORMAL=17 letras X 8 BITS =136 BITS COMPACTADO=(9cadeias x8bits)+ 5 x 1 + 2 x 2 + 1 x 4 =13 bits 10 Compressão de Dados- Lempel-Ziv • utilizam os códigos Lempel-Ziv • zip e unzip do Windows e • compress e uncompress do Unix 11 Compressão de Dados- Lempel-Ziv Exercícios 1. Qual é o número de bits necessários para codificar a string (ABCAACDDEAACCCDAECDE) usando Lempel- Ziv? 2. Mostre a decodificação de uma cadeia de uma cadeia de DNA que foi codificada utilizando Lempel-Ziv. Cada base foi representada por dois bits como segue: A ���� 00 C ���� 01 G ���� 10 T ���� 11 O resultado da codificação de arquivo é: 000100110001101011100010110100101 12 Compressão de Dados- Lempel-Ziv Exercício-1 – Solução A cadeia é parcionada em 12 frases como segue: A|B|C|AA|CD|D|E|AAC|CC|DA|EC|DE| As frses serão codoficados utilizando 12 índices: 1 2 3 4 5 6 7 8 9 10 11 12 |A|0B|0C|1A|3D|0D|0E|4C|3C|6A|7C|6E número de bits por índice:0 1 1 1 2 1 1 2 2 3 3 3 =20 Número de bits para codificar o arquivo = (nº de bits para 12 caracteres) + (nº de bits para os 12 índices) = (12x8) + 20= 96 +21=116 13 Compressão de Dados- Lempel-Ziv Exercício-2 – Solução A ���� 00 C ���� 01 G ���� 10 T ���� 11 Separando as bases dos índices: índices ���� vermelho e bases���� azul 1 2 3 4 5 6 7 8 |00|010|110|011|1011|10001|1101|101| Convertendo as bases: 1 2 3 4 5 6 7 8 |A |0G |1G |0T |2T | 4C |3C |1C| Decodificando: A G AG T GT TC AGC AC Resultado: AGAGTGTTCAGCAC 14 Compressão de dados Bibliografia: • Introduction to Data Compression, Khalid Sayood, ed Morgan Kaufmann, Feb/ 2000. • Lossless Compression Handbook, Khalid Sayood - ed Elsevier- Science, 2003.
Compartilhar