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?
Antwort
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.
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.
- 1. Gibt es einen Dienst, mit dem Sie WhatsApp-Nachrichten in Webanwendungen senden und empfangen können?
- 2. Gibt es eine Bildgebungsbibliothek, mit der Sie dünner aussehen können?
- 3. Gibt es eine beliebige LRU-Implementierung von IDictionary?
- 4. Gibt es eine einfache Möglichkeit, einen Verweis auf eine beliebige Instanzvariable in einem Array zu speichern?
- 5. Gibt es ein Quellcodeverwaltungssystem, mit dem Dateinamenänderungen verfolgt werden können?
- 6. Gibt es eine beliebige Gleitkomma-Bibliothek für C/C++, die beliebige Präzisionsexponenten erlaubt?
- 7. Gibt es ein Tool, mit dem Sie eine .NET-DLL direkt bearbeiten können?
- 8. Gibt es einen generischen CIL-Code, um eine beliebige Typinstanz in eine Zeichenfolge zu konvertieren?
- 9. Schneiden Sie eine beliebige Form aus dem Bild (Imagik/Gd)
- 10. gibt es eine Möglichkeit zur Eingabe ("Drücken Sie eine beliebige Taste, um fortzufahren") auf Version 2.6
- 11. Gibt es einen Ort, an dem Sie Ihren Code online hosten können?
- 12. Gibt es einen Algorithmus, der eine Zahl in drei Teile aufteilen kann und deren Summen mit der ursprünglichen Zahl übereinstimmen?
- 13. Öffnen Sie eine beliebige Datei mit VBScript
- 14. Umleiten Sie eine beliebige URL mit/foo/
- 15. Python: Geben Sie eine beliebige Zahl ein und konvertieren Sie sie in Text
- 16. Gibt es einen Vorlagen-Debugger?
- 17. jQuery: Multiplizieren Sie eine Zahl mit 7.5
- 18. Gibt es eine Firefox-Erweiterung (oder einen anderen Browser), die es erlaubt, beliebige POST-Daten an eine Webseite zu senden?
- 19. Gibt es ein Paket, mit dem Sie Ihre Gruntdatei dokumentieren können, ähnlich wie apiDocs für Node?
- 20. Pivot-Tabelle - Filtern Sie eine beliebige Zahl kleiner als ein Wert
- 21. Können Sie in einem MySQL-Ergebnissatz eine Zahl durch einen String ersetzen?
- 22. Gibt es ein Addon, mit dem Sie CSS-Selektoren in Firefox testen können?
- 23. Gibt es eine Möglichkeit, eine Seite nicht aktualisieren zu können?
- 24. Gibt es Entwicklungsmuster, die einen IntentService für Netzwerkanforderungen ersetzen können?
- 25. Gibt es eine Schriftart auf dem iPhone?
- 26. Gibt es eine Möglichkeit, mit ParamArray-Werten wie byRef umzugehen, damit sie aktualisiert werden können?
- 27. Gibt es einen aktualisierten 'vimtutor'?
- 28. Gibt es eine Javascript-Funktion, mit der Sie überprüfen können, ob ein Element geschlossen wurde?
- 29. Serialisieren Sie eine beliebige Zeichenfolge in XML.
- 30. Drücken Sie eine beliebige Zahl als die Summe der vier Primzahlen
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. –
http://en.wikipedia.org/wiki/Kolmogorov_complexity –
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. –