LZ77: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
Linha 6:
O [[algoritmo]] LZ77 é relativamente simples. Define-se inicialmente duas estruturas que serão usadas: A ''janela'' de procura, e o ''buffer'' de ''look-ahead'' (num tradução livre poderia ser chamado de ''buffer'' de pré-visualização). A janela representa as partes do [[arquivo]] que já foram lidos, enquanto o ''look-ahead'' representa o que ainda será lido e processado pelo algoritmo. Na prática, o ''look-ahead'' é preenchido de antemão com os próximos [[byte]]s a serem processados pelo compressor. A janela tem tamanho definido, e deve permitir que os dados sejam [[fila|enfileirados]] dentro dela, eliminando os bytes mais antigos quando seu limite de tamanho é atingido. O ''buffer'' de ''look-ahead'' também tem tamanho definido, em geral dezenas de vezes menor que a ''janela''.
 
De posse dessas estruturas verificamos a seqüênciasequência de caracteres atualmente presente no ''buffer'', e qual o maior [[casamento de padrões|casamento]] de prefixo dessa seqüência dentro da janela (qual a maior seqüênciasequência da janela casa exatamente com o início da seqüência do ''buffer''). Ao encontrar tal seqüênciasequência emitimos na saída a [[tupla]] <math>(S_{pos}, S_{tam}, c)</math> onde <math>S_{pos}</math> é a posição da seqüência casada dentro da janela (contada em geral de traz para diante), <math>S_{tam}</math> é o tamanho dessa seqüência, e <math>c</math> é o próximo caractere presente no ''buffer'' depois dessa seqüência. Este caractere <math>c</math> é comumente chamado de ''literal'', ou ''caractere literal'' (do inglês ''literal character'').
 
Transferimos então toda a seqüênciasequência casada e mais o caractere extra para a janela (chama-se esse processo de ''deslizamento a janela'' ou ''window slide'' em inglês), que tem seus elementos mais antigos removidos (caso esteja cheia). O ''buffer'' é preenchido com novos dados lidos do arquivo, e continuamos o processo até o final do arquivo.
 
No caso de não ser encontrado nenhum casamento dentro da janela, emite-se a tupla <math>(0, 0, c)</math>, indicando que houve um "casamento" de tamanho 0, e apenas o caractere <math>c</math> é transferido para o ''buffer''.