Ich habe gehört, dass zum Beispiel MurmurHash2 nicht "inkrementell" ist, sondern MurmurHash3 inkrementell ist. Was bedeutet das? Und warum ist es nützlich?Was bedeutet es für eine Hash-Funktion, inkrementell zu sein?
Antwort
Incremental-Hash-Funktionen für Situationen geeignet, bei denen, wenn eine zuvor gehashte Nachricht, M leicht in eine neue Nachricht aktualisiert wird, M *, dann ist es sollten ziemlich schnell sein, den Hash-Wert der aktualisierten Nachricht zu berechnen, M *. Dies geschieht durch die Berechnung des neuen Hashs m * aus dem alten Hash-Wert, m, im Gegensatz zu herkömmlichen Hash-Funktionen, die den neuen Hash m * von Grund auf neu berechnen müssen, was eine längere Zeit in Anspruch nimmt.
http://www.cs.berkeley.edu/~daw/papers/inchash-cs06.pdf
Sie nützlich sind aufgrund der Tatsache, dass sie leichter zu berechnen und daher weniger teuer in Bezug auf Leistung und Rechenzeit.
Sie sind jedoch nicht für jede Situation geeignet. Dieses Dokument aus Berkeley hat einige schöne Beispiele, wann sie im Einführungsteil nützlich sein können.
Ich bin kein Experte auf diesem, aber ich denke, MurmurHash3 ist nicht inkrementell in dem Sinne, wie Tommarshall beschreibt.
Wenn die Leute beschreiben es als inkrementelle sie wahrscheinlich bedeuten, dass Sie Hash eines Stroms in O berechnen kann (1) Speicher, dh Sie eine API haben können, dass Sie lassen Sie wie folgt (in Pseudo-Code):
x = Hasher()
x.add("hello ")
x.add("world!")
x.get_hash()
und das würde einen Hash der Zeichenfolge "Hallo Welt" erzeugen, ohne die ganze Zeichenfolge zu irgendeinem Zeitpunkt im Speicher zu halten.
Insbesondere das imurmurhash-js JavaScript-Paket scheint das Wort 'inkremental' in dieser Bedeutung zu verwenden.
Gleiche Bedeutung scheint in MetroHash Docs verwendet werden.
Vielleicht sollte es "Stream Hashing" genannt werden. – CMCDragonkai
- 1. Was bedeutet es für eine ComboBox, "heiß" zu sein?
- 2. Konstruieren eine Hashtabelle/Hashfunktion
- 3. Was bedeutet es, ein beständiger Rückruf zu sein?
- 4. Was bedeutet es, eine Serviceverbindung zu verlieren?
- 5. Was bedeutet es für eine Sammlung, in Java endgültig zu sein?
- 6. Was bedeutet es, eine Steckdose zu spülen?
- 7. Was ist der kanonische Weg, eine Hashfunktion für TEqualityComparer.Construct zu schreiben?
- 8. Was bedeutet es, dass REST hypertextgesteuert sein sollte?
- 9. Was bedeutet es, zwei Funktoren zu komponieren?
- 10. Was bedeutet es, etwas "zu schließen"?
- 11. Was bedeutet es, einen Wert zu normalisieren?
- 12. Was bedeutet "die Wahl muss für alle Verbraucher konsistent sein"?
- 13. Was bedeutet es, eine Sammlung "vertikal" und "horizontal" zu filtern?
- 14. Was bedeutet es, einen Index für skalare Variablenfehler zu haben?
- 15. Was bedeutet es, gegen etwas zu verlinken?
- 16. Was bedeutet es, auf GitHub zu verzweigen?
- 17. Was bedeutet es, mehrere Sortierschlüsselspalten zu haben?
- 18. Was bedeutet es, MPI für Shared Memory zu konfigurieren?
- 19. Was bedeutet es, eine Datenbank abzusaugen?
- 20. Was bedeutet es für TCP-Verbindungen zu Abwanderung?
- 21. Eine Datei inkrementell teilen
- 22. Was bedeutet es, "Nachteile zu hacken"?
- 23. Was bedeutet es, ein Objekt zu klonen()?
- 24. Was bedeutet es, eine Klasse oder einen Parameter zu dekorieren?
- 25. wechseln (! 0) Was bedeutet es
- 26. Was bedeutet Zuweisung für eine C11 Atom?
- 27. Was bedeutet @ für eine Prozedur in MySQL?
- 28. Was bedeutet es wirklich, dass eine Programmiersprache stapellos ist?
- 29. Was bedeutet es, eine Funktion in eine Tabelle umzuwandeln?
- 30. Was ist POI und was bedeutet es?
Danke! Virus Beispiel ist großartig (aus Papier). –
Ich bin durch diese Antwort verwirrt. Die Frage fragt genau, in welchem Sinne MurmurHash3 inkrementell ist, aber ich denke nicht, dass es in dem in der Antwort beschriebenen Sinne inkrementell ist. Vielleicht sehe ich nur nicht wie. – Rotsor