Angenommen, Sie haben diese beiden Sequenzen von StringsC++: Vorschläge über eine Hash-Funktion für eine Folge von Strings in dem die Reihenfolge der Saiten irrelevant ist
abc cba bc
bc abc cba
Ich versuche, um ein Mapping für solche Sequenzen zu erzeugen (die Sequenz ist auch eine Zeichenkette), so dass die obigen zwei Sequenzen in den gleichen Bucket abgebildet werden.
Mein erster Gedanke wäre, die Ergebnisse einer Hash-Funktion hinzuzufügen, die auf jeden String separat angewendet wird. Auf diese Weise spielt ihre Reihenfolge keine Rolle. Wenn ich die Hashfunktion auf den Sequenzstring als Ganzes anwenden würde, wäre das Hashergebnis natürlich anders.
Allerdings bin ich sehr neu in der Welt der String Hashing-Funktionen und ich habe keine Ahnung, ob dieser Ansatz effizient wäre.
In dieser Website http://www.partow.net/programming/hashfunctions/index.html
ich viele verschiedene Implementierungen für String Hashing gefunden, aber ich bin nicht sicher, welche wäre die „beste“ für meine Bedürfnisse sein.
Einige technische Details zu jeder Zeichenfolge in der Sequenz bestehen darin, dass jede von ihnen nicht mehr als 25 Zeichen enthält. Außerdem hat jede Sequenz nicht mehr als 3 Strings.
Fragen
1.
würde dieser Ansatz zu jeder Zeichenfolge der Sequenz arbeiten, um die Ergebnisse einer Zeichenfolge Hashing-Funktion hinzuzufügen?
2.
Wenn ja, welche String Hashing-Funktion sollte ich verwenden, die eine geringe Anzahl von Kollisionen geben und auch zeitsparend sein würde?
Danke im Voraus
Wäre es nützlich, die Hashing-Funktion auf eine sortierte Kopie der String-Sequenz anzuwenden? –
Wie groß ist das Alphabet (dh welcher Zeichensatz wird verwendet)? – didierc
Sie wollen sie in den gleichen Eimer, aber nicht kollidieren? Große Bestellung. – WhozCraig