Problema resolvido na íntegra
-
Seis tokens de "abracadabra" com uma janela de pesquisa de 16 caracteres 5 passos
O painel indica 5,18× após um token. Determine quanto indica após todos os seis. A entrada é "abracadabra", a janela de pesquisa é de 16 carateres e o buffer de antecipação é de 8.
-
Um token é composto por três campos de largura fixa, pelo que o seu custo é determinado pelas duas definições e não pelos dados. O desvio tem de endereçar qualquer posição na janela, o comprimento qualquer valor até ao tamanho do buffer, e o literal é um byte em bruto.
-
O codificador varre da esquerda para a direita e escolhe a correspondência mais longa que a janela oferece. Nada se encontra atrás dos primeiros três carateres, pelo que 'a', 'b' e 'r' custam cada um um token inteiro para serem emitidos uma vez. Apenas o token final compensa o seu custo, copiando "abra" a partir da posição 0.
-
A razão no painel é um valor acumulado e divide a entrada inteira pela saída produzida até ao momento. Após um token, está a comparar onze carateres com dezassete bits, razão pela qual começa tão alta.
-
Seis tokens a dezassete bits cada resultam em 102 bits, contra uma entrada de 88. A codificação é maior do que a coisa que codifica.
-
O ponto de equilíbrio é uma divisão. Um token custa 17 bits e compra um determinado número de carateres que valem 8 bits cada, pelo que o esquema só ganha quando o token médio avança mais do que 17/8 carateres — e, destes seis, apenas o último o faz.
Resposta
O painel indica 5,18× após o primeiro token e 0,86× após o sexto: a mesma cadeia de carateres, a mesma codificação, em lados opostos de 1,0. O valor que vale a pena reter é 2,125 carateres por token, que é apenas a largura do token dividida por oito, sendo este todo o teste para saber se o LZ77 ajuda uma dada entrada. Também atribui um preço a um ajuste que parece gratuito. Alargar a janela de pesquisa para 64 adiciona dois bits a cada campo de desvio e, nesta cadeia, não encontra qualquer correspondência mais longa — a análise produz os mesmos seis tokens —, pelo que a razão cai para 0,77×. Cada duplicação do alcance custa mais um bit em cada token, usado ou não.
-
Percurso de aprendizagem
Compressão manual
Referências (1)
- The algorithm, and the offset-1 trick block 3 turns on: J. Ziv and A. Lempel, "A universal algorithm for sequential data compression." IEEE Transactions on Information Theory 23(3), 337–343, 1977.