2012-04-02 3 views
1

Angenommen, Sie haben eine große Zahl, 99999999999. Gibt es eine Methode, diese auf eine viel kürzere Zahl zu komprimieren, sagen wir "234.56" vorausgesetzt, Sie können Referenzinformationen im Hintergrund speichern (dh Informationen darüber, welche Methoden zum "Dekomprimieren" verwendet werden) , erhalten von 234.56 zurück zu 999999999)Gibt es einen mathematischen/Verschlüsselungsalgorithmus/Modell, mit dem Sie eine beliebige Zahl verkürzen/komprimieren können?

+0

Natürlich gibt es, das ist die gesamte Grundlage der [verlustfreie Datenkomprimierung] (RLE, Lempel-Ziv, oder eine andere). Sie müssen den Umfang der Frage für aussagekräftige Antworten eingrenzen, die anders sind als "Ja, wählen Sie einen Komprimierungsalgorithmus", um möglich zu sein. –

+0

http://en.wikipedia.org/wiki/Kolmogorov_complexity –

+1

Sie haben nicht gesagt, wie Sie die Nummer derzeit speichern. Wenn es in einer Ascii-Dezimalform geschrieben ist, dann ist das erste, was zu tun ist, es in eine binäre umzuwandeln. –

Antwort

5

In der Regel, und Ihre Frage wörtlich nehmen, keine. Einige Zahlen werden immer größer oder bleiben gleich groß.

Es ist einfach, dies zu zeigen: Angenommen, die Antwort auf Ihre Frage war "Ja". Sie erhalten eine kürzere Nummer von Ihrer größeren Nummer. Erneut anwenden, bis Sie mit einer 0-stelligen Nummer enden. Siehst du das Problem?

Aber abgesehen davon können Sie jeden verlustfreien Komprimierungsalgorithmus verwenden. Stecken Sie sie alle in eine Binärdatei und zippen Sie das Ganze bei Bedarf zusammen. Du wirst eine Menge Zahlen brauchen, um sofort zu komprimieren, um den Overhead zu übertreffen. Und wenn das Zufallszahlen sind, hast du kein Glück - no algorithm can compress randomness.

Natürlich können Sie je nach Ihrem Probenraum viel besser machen. Wenn Sie wissen, dass sie zum Beispiel aus 1 Ziffer bestehen, können Sie einfach die Ziffer und die Lauflänge mit einer Escape-Sequenz für Zahlen speichern, die nicht zu diesem Muster passen. Wenn Sie wissen, dass es 256 verschiedene allgemeine Zahlen gibt, speichern Sie diese mit Ihrem Programm und dann nur einen Byte-Index in diesem Array plus eine Escape-Sequenz für Zahlen, die nicht im Array enthalten sind. Usw.

Aber wieder ist die Antwort auf Ihr Problem im Allgemeinen keine.

0

Hängt davon ab, was Sie mit "Referenzinformationen speichern im Hintergrund" meinen. Im Extremfall wäre die "Referenzinformation" die Nummer selbst und die "komprimierte" Nummer wäre nur der Index der "Referenzinformation". Im Grunde haben Sie einen URL-Kürzeren für Zahlen.

Verwandte Themen