Was ist Falttechnik in hashing und wie es zu implementieren?
Hörte ich auf einer Daten-Strukturen seminar, das wir brechen ein Schlüssel in Gruppen von Ziffern und dann die Zugabe von Gruppen. Dadurch wird sichergestellt, dass alle Ziffern beitragen, den hash-code. Die Anzahl der Ziffern in einer Gruppe entsprechen der Größe des Arrays.
Ich habe zum Beispiel eine Maschine, die Nummer sagen 424-124-9675
, wie kann ich die hash-Funktion unter Verwendung der Falttechnik?
InformationsquelleAutor Yogesh Umesh Vaity | 2016-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es 2 Arten von Falten Methoden
Fold shift
undFold boundary
.Fold Shift
Unterteilen Sie den Schlüssel in Teile, deren Größe entspricht der Größe der gewünschten Adresse. Die Teile werden einfach Hinzugefügt, um die erforderliche Adresse.
Key:123456789 und Größe der gewünschten Adresse ist 3 stellen.
123+456+789 = 1368. Zum reduzieren der Größe 3 (wahlweise 1 oder 8 wird entfernt und entsprechend der Schlüssel wäre, 368 oder 136 beziehungsweise.
Falten Grenze
Du wieder unterteilen der Schlüssel in Teile, deren Größe entspricht der Größe der gewünschten Adresse.Aber jetzt können Sie auch die Anwendung Faltung, außer für den mittleren Teil,wenn Ihr es.
Key:123456789 und Größe der gewünschten Adresse ist 3-stellig
321 (Faltung angewendet)+456+987 (Faltung angewendet) = 1764(wirf 1 oder 4)
Wenn die 123 dann wird es keinen Unterschied zwischen 2 Techniken.
Die Wirkung von 1 oder 4 ist einfach immer die richtige index. wenn Sie ein array der Länge 999, dann auf jeden Fall einen index-Größe 4-stellig ist ungültig. Die Adresse, die im Grunde bedeutet, dass der index des Arrays, in dem die Schlüssel gespeichert werden.
InformationsquelleAutor Sumeet
Folgenden die Antworten von Tony und Sumeet, ich habe etwas mehr Forschung auf Ziffer Falten und beschlossen, die Technik erläutert von Robert Lafore in seinen Datenstrukturen Buch.
Angenommen, Sie möchten hash-10-Ziffer Maschine zahlen. Wenn die array-Größe ist
1,000
Sie einteilen würde die 10-stellige Nummer, die in drei Gruppen von drei Ziffern und einer Gruppe von einem-stelligen. Im Beispiel in Frage, die Maschinen-Nummer ist424-124-9675
, so würden Sie berechnen einen Wert key von424 + 124 + 967 + 5 = 1520
. Sie können die%
Betreiber zu trimmen solchen Summen, so der höchste index ist999
. In diesem Fall1520 % 1000 = 520
.Wenn die array-Größe ist
100
würden Sie brauchen, um zu brechen, die 10-stellige Schlüssel in fünf zweistellige zahlen:42 + 41 + 24 + 96 + 75 = 278
, und278 % 100 = 78
.Es ist einfacher, sich vorzustellen, wie das funktioniert, wenn die array-Größe ist ein Vielfaches von 10.
Aber für die besten Ergebnisse sollte es sein, eine Primzahl.
Hier ist der Java code der Ziffer Falt-Technik, die ich umgesetzt:
Fand ich die Gruppe macht Methode hier. Aber es macht Gruppen von rechts nach Links. Also benutzte ich
String#subString()
Methode, um Links zu rechten Gruppen.InformationsquelleAutor Yogesh Umesh Vaity
Gegeben 424-124-9675, Sie entscheiden, wo Sie wollen, brechen Sie in Gruppen. Zum Beispiel:
alle 3 Ziffern von Links: hash = 424 + 124 + 967 + 5
alle 3 Ziffern von rechts: hash = 675 + 249 + 241 + 4
wo die Striche sind: hash = 424 + 124 + 9675
Es ist eine furchtbar schwache Weg, um hash-obwohl - sehr Kollision anfällig.
es gibt viele Optionen für die Gruppierung... Sie könnten es machen, hängt von deiner Tabelle, und das wäre ok, wenn Ihre Tabelle war die Größe eine Potenz von zehn, oder wenn Sie sagen, Sie würde dreistellige Gruppen könnte man immer noch den mod - % - operator wähle aus einer kleineren Anzahl der buckets, z.B. wenn Ihre Summe-von-Gruppen 123 war, und Ihre Tabelle Größe 37, verwenden 123 % 37.
InformationsquelleAutor Tony Delroy