Warum ist die Größe 127 (prime) besser als die 128 für eine hash-Tabelle?

Angenommen, dass simple uniform hashing, das Wesen, jedem gegebenen Wert ist ebenso wie hash in die slots der hash. Warum ist es besser, eine Tabelle mit der Größe 127 und nicht 128? Ich verstehe wirklich nicht, was ist das problem mit der Potenz von 2 zahlen. Oder, wie es eigentlich überhaupt einen Unterschied macht.

Beim Einsatz der division-Methode,
wir in der Regel zu vermeiden, bestimmte Werte
von m (Tabellengröße). Zum Beispiel, m
sollte es nicht eine Potenz von 2 ist, denn wenn m
= 2^p , dann ist h(k) ist genau die p niedrigsten bits von k.

Nehmen wir an, die Elemente, die sind nur zwischen 1 und 10000 und ich nahm die Größe der Tabelle als 128. Wie kann 127, besser zu sein?
Also 128 ist 2^6 (1000000) und 127 ist 0111111. Welchen Unterschied macht dies? Alle zahlen (als Hash) sind immer noch die niedrigsten p-bits von k 127 zu. Habe ich etwas falsch gemacht?

Ich bin auf der Suche nach einige Beispiele, wie ich kann wirklich nicht verstehen, warum das schlecht ist. Vielen Dank im Voraus!

PS: ich bin mir bewusst:
Hash-Tabelle: warum sollte die Größe Primzahl?

  • > PS: I am aware of: Hash table: why size should be prime? - dann Lesen Sie es erneut, oder der link durch diese one
  • Der thread verlinkt wurde, macht eine Vermutung, dass die Elemente innerhalb einer Beziehung ("Dann, wenn eine Reihe von Zeichenfolgen alle mit dem gleichen ersten char zugeführt, dann werden die Ergebnisse alle gleich modulo k")
  • Sorry, aber wenn Sie darauf bestehen, dass es nicht notwendig ist zu optimieren, die gegen Kollisionen für Ihre spezifischen hash-Werte, die Sie verwirren könnten Indizierung mit hashing. Eine perfekte hash-kann verwendet werden als index, aber alle möglichen Werte müssen bekannt sein, bis vor. Mit einer solchen Konfiguration ist es egal, auch wenn die Anzahl der buckets, ist tatsächlich ein Fakt (n!). Das ist aber nicht die generische Wissenschaft hinter hashing.
  • OT: Clash ist ein sehr schönes screen-Namen verwenden, wenn im Gespräch über hash-Kollisionen 🙂
  • Ich bin nicht darauf bestehen, dass ich keine Kollisionen. Ich versuche nur zu verstehen, warum eine Primzahl ist, obwohl kleiner als eine Potenz von 2 ist, ist besser als eine Potenz von zwei. Den link den du mir gegeben hast, bezieht sich auf eine situation, wo eine bestimmte Gruppe von Elementen ist wahrscheinlicher zu geschehen. Vielen Dank für Ihre Antworten!
  • möglich, Duplikat der Warum Einstellung Hashtabelle der Länge eine Primzahl ist eine gute Praxis ?
  • Da Reale Daten fast nie gleichverteilt. Wenn Sie hash-strings mit 128, erhalten Sie 26 Eimer ungleichmäßig gefüllt und der rest leer. Wenn Sie 127 Sie werden wahrscheinlich bekommen Sie alle gefüllt gleichmäßiger.
  • Nur die Korrektur eines Tippfehler: 128 2^7, 2^6.

InformationsquelleAutor Clash | 2011-05-08
Schreibe einen Kommentar