Ho appena iniziato a leggere un libro intitolato Introduzione alla compressione dei dati, di Guy E. Blelloch. Nella prima pagina, afferma:
La verità è che se un singolo messaggio viene abbreviato da un algoritmo, allora alcuni altri messaggi devono essere allungati. Puoi verificarlo in pratica eseguendo GZIP su un file GIF. È infatti possibile andare oltre e mostrare che per un insieme di messaggi di input di lunghezza fissa, se un messaggio è compresso, la lunghezza media dei messaggi compressi su tutti gli input possibili sarà sempre più lunga dell'originale messaggi di input.
Consideriamo, ad esempio, gli 8 possibili messaggi a 3 bit. Se uno è compresso a due bit, non è difficile convincersi che due messaggi dovranno espandersi a 4 bit, dando una media di 3 1/8 bit.
Veramente? Trovo molto difficile convincermi di ciò. In effetti, ecco un contro esempio. Si consideri l'algoritmo che accetta come input qualsiasi stringa a 3 bit e si associa ai seguenti output:
000 -> 0
001 -> 001
010 -> 010
011 -> 011
100 -> 100
101 -> 101
110 -> 110
111 -> 111
Quindi eccoti: nessun input è mappato su un output più lungo. Non ci sono certamente "due messaggi" che si sono espansi a 4 bit.
Quindi di cosa parla esattamente l'autore? Ho il sospetto che ci sia qualche avvertimento implicito che per me non è ovvio, oppure sta usando un linguaggio troppo vasto.
Disclaimer: mi rendo conto che se il mio algoritmo viene applicato in modo iterativo, perdi davvero i dati. Prova ad applicarlo due volte all'ingresso 110: 110 -> 000 -> 0, e ora non sai quale tra 110 e 000 era l'input originale. Tuttavia, se lo applichi solo una volta, mi sembra senza perdite. È legato a ciò di cui parla l'autore?