Ich habe gerade angefangen, ein Buch mit dem Titel Einführung in die Datenkomprimierung von Guy E. Blelloch zu lesen. Auf Seite eins sagt er:
Die Wahrheit ist, dass, wenn eine Nachricht durch einen Algorithmus verkürzt wird, eine andere Nachricht verlängert werden muss. Sie können dies in der Praxis überprüfen, indem Sie GZIP für eine GIF-Datei ausführen. Es ist in der Tat möglich, weiter zu gehen und zu zeigen, dass für eine Reihe von Eingabenachrichten fester Länge, wenn eine Nachricht komprimiert wird, die durchschnittliche Länge der komprimierten Nachrichten über alle möglichen Eingaben immer länger als das Original sein wird Eingabenachrichten.
Betrachten Sie zum Beispiel die 8 möglichen 3-Bit-Nachrichten. Wenn eine auf zwei Bits komprimiert ist, ist es nicht schwer, sich davon zu überzeugen, dass zwei Nachrichten auf 4 Bits erweitert werden müssen, was einem Durchschnitt von 3 1/8 Bits entspricht.
"Ja wirklich?" Es fällt mir sehr schwer, mich davon zu überzeugen. In der Tat ist hier ein Gegenbeispiel. Betrachten Sie den Algorithmus, der eine 3-Bit-Zeichenfolge als Eingabe akzeptiert und den folgenden Ausgaben zugeordnet ist:
000 -> 0
001 -> 001
010 -> 010
011 -> 011
100 -> 100
101 -> 101
110 -> 110
111 -> 111
Da sind Sie also - kein Eingang ist einem längeren Ausgang zugeordnet. Es gibt sicherlich keine "zwei Nachrichten", die auf 4 Bit erweitert wurden.
Worüber spricht der Autor genau? Ich vermute, dass es entweder eine implizite Einschränkung gibt, die mir einfach nicht klar ist, oder dass er eine Sprache verwendet, die viel zu umfassend ist.
Haftungsausschluss: Mir ist klar, dass Sie tatsächlich Daten verlieren, wenn mein Algorithmus iterativ angewendet wird. Versuchen Sie, es zweimal auf den Eingang 110 anzuwenden: 110 -> 000 -> 0, und jetzt wissen Sie nicht, welcher von 110 und 000 der ursprüngliche Eingang war. Wenn Sie es jedoch nur einmal anwenden, erscheint es mir verlustfrei. Hat das etwas mit dem zu tun, worüber der Autor spricht?