Ich versuche, eine Dezimalzahl in eine binäre Form zu transformieren, aber trotzdem Entfernungsinformation zu behalten. Wie 10-2 = 8 im euklidischen Raum, aber im binären Fall, Hamming (1010-0010) = 1, verlor offensichtlich die Entfernungsinformation viel. Gibt es eine Möglichkeit, 10 in eine binäre Form zu transformieren, aber trotzdem die Distanzeigenschaft in der Hamming-Abstandsmetrik beizubehalten? Der naive Weg ist Hamming (1111111111-0000000011) = 8 ....Wie wandelt man eine Dezimalzahl in eine binäre Form um, behält aber die Entfernungseigenschaft?
Antwort
Sie haben gefunden, was im Grunde die einzige Distanz Erhaltung Karte aus dem metrischen Raum von nichtnegativen ganzen Zahlen mit Abstand d(x,y) = |x-y|
zum metrischen Raum von Bit Vektoren mit der Hamming Entfernung.
Dies ist nicht schwer zu beweisen: d(x,0) = x
, so muss die Transformation von x
x
Bits gesetzt haben. Ähnlich, wenn x<y
, dann müssen die in der Transformation von x
gesetzten Bits eine Teilmenge der in der Transformation von y
gesetzten Bits sein.
Also, was Sie gebaut haben, ist im Grunde Ihre einzige Option, wenn Sie wirklich und wirklich in dem Raum der Bit Vektoren und Hamming Abstand arbeiten müssen.
Vielen Dank für Ihre Antwort, eigentlich dachte ich, es könnte der beste Weg sein, ohne Informationen zu transformieren. Ich denke, ich kann ein bisschen Abstand akzeptieren, vielleicht, aber ich werde versuchen, dafür einen besseren Weg zu finden. Vielen Dank. –
@Hx: Ich denke, wenn Sie als separate Frage darstellen, welches Programmierproblem Sie damit zu lösen versuchten, würden Sie nützliche Antworten bekommen. – Hurkyl
- 1. Dezimale Rundung, aber es eine Dezimalzahl halten
- 2. Wie wandelt man dieses XML-Feld in eine Tabelle um?
- 3. Wie man eine Dezimalzahl begrenzt?
- 4. Wie konvertiert man eine Zeichenfolge in eine Dezimalzahl?
- 5. Wie man eine sich wiederholende Dezimalzahl erkennt
- 6. eine Schaltfläche, um eine Verbindung in Form
- 7. Wie wandelt man eine Zeichenfolge in Kleinbuchstaben mit preg_replace
- 8. Wie überprüft man, ob die Zahl eine Dezimalzahl hat?
- 9. Wie man eine Umleitung macht und die Abfragekette behält?
- 10. Wie zeichnet man eine Form
- 11. Wie man einen Dezimalwert anzeigt, aber die Dezimalzahl entfernt
- 12. Wie wandelt man ausgewählten Text in PHPSstorm in Kleinbuchstaben um?
- 13. Wie wandelt man mehrere Zeilen in bash stdout in eine Zeile um?
- 14. Wie wandelt man Win2K3 in ein Workstation Developement OS um?
- 15. Wie wandelt man das XML-Format in ein anderes um?
- 16. Wie speichert man die strokeOval() -Form in eine Textdatei?
- 17. Wie behält man Klassenmethoden, die überschreiben, um eine andere Methode zu verbergen?
- 18. eine Dezimalzahl umwandeln KnockOut
- 19. Wie wandelt man ein Radio-Eingabeformular in Radio-Bootfaces um?
- 20. Wie man eine Dezimalzahl ohne nachgestellte Nullen formatiert
- 21. Wie erstellt man eine binäre Suchstruktur in Clojure?
- 22. Wie man eine Dezimalzahl richtig rundet und formatiert?
- 23. Konvertieren einer Dezimalzahl in eine gemischte Basisnummer
- 24. Wie man Sitzungsgeschichte behält?
- 25. VirtualDub - Wie behält man die bisherige Videokomprimierungsrate?
- 26. Wie man eine Ansicht auf meine Fragmente behält
- 27. Wie macht man eine rotierende Form dick?
- 28. Regex eine Dezimalzahl mit Komma
- 29. Wie konvertiert man eine IP-Binäradresse in C# in eine Dezimalzahl?
- 30. Wie man 2 Icons für eine einzelne App behält?
Sie haben keine Informationen verloren, indem Sie in binär konvertiert haben: 1010 - 0010 ist immer noch 1000. Sie haben Informationen verloren, indem Sie sich entschieden haben, den Popcount 1000 zu berechnen, anstatt seinen numerischen Wert zu verwenden. – Hurkyl