Comecei a ler um livro chamado Introdução à compactação de dados, de Guy E. Blelloch. Na página um, ele afirma:
A verdade é que, se qualquer mensagem for encurtada por um algoritmo, outra mensagem precisará ser prolongada. Você pode verificar isso na prática executando o GZIP em um arquivo GIF. De fato, é possível ir além e mostrar que, para um conjunto de mensagens de entrada de tamanho fixo, se uma mensagem for compactada, o comprimento médio das mensagens compactadas em todas as entradas possíveis sempre será maior que o original mensagens de entrada.
Considere, por exemplo, as 8 possíveis mensagens de 3 bits. Se uma é compactada em dois bits, não é difícil se convencer de que duas mensagens terão que se expandir para 4 bits, dando uma média de 3 1/8 bits.
Mesmo? Acho muito difícil me convencer disso. De fato, aqui está um exemplo contrário. Considere o algoritmo que aceita como entrada qualquer sequência de 3 bits e mapeia para as seguintes saídas:
000 -> 0
001 -> 001
010 -> 010
011 -> 011
100 -> 100
101 -> 101
110 -> 110
111 -> 111
Então, aqui está você - nenhuma entrada é mapeada para uma saída mais longa. Certamente não há "duas mensagens" que foram expandidas para 4 bits.
Então, o que exatamente o autor está falando? Eu suspeito que ou há alguma advertência implícita que não é óbvia para mim, ou ele está usando uma linguagem muito abrangente.
Isenção de responsabilidade: percebo que, se meu algoritmo for aplicado iterativamente, você realmente perderá dados. Tente aplicá-lo duas vezes na entrada 110: 110 -> 000 -> 0 e agora você não sabe qual das 110 e 000 foi a entrada original. No entanto, se você aplicá-lo apenas uma vez, parece-me sem perdas. Isso está relacionado ao que o autor está falando?