Forum: PC-Programmierung Hashing mit offener Adressierung


von ahnungsloser (Gast)


Lesenswert?

Hallo,

warum muss beim Hashing mit offener Adressierung die Tabellengröße eine 
Primzahl sein?

von Klaus W. (mfgkw)


Lesenswert?

Das muß sie nicht unbedingt sein, aber es reduziert etwas
Kollisionen (oft) und verbessert damit etwas die Effizienz.

Je nach Berechnung der Positionen im Einzelfall kann es vorkommen,
daß bestimmte Teiler gehäuft vorkommen, also z.B. jeder zweite, oder
jeder dritte oder jeder soundsovielte.
Oft auch kombiniert, z.B. könnte die Wahrscheinlichkeit
sowohl für Vielfache von 2 als auch 7 etwas höher sein als andere
Werte. Hat in einem solchen Fall meine Tabelle eine Länge eines
Vielfachen von 14, sind einige Stellen überfüllt, während andere
leer laufen. Das ist natürlich ungünstig.
Mit einer Tabellenlänge, die eine Primzahl ist, werden solche
Schlüssel besser verteilt.

Hat man eine ideale Schlüsselberechnung, ist die genaue
Tabellenlänge egal; auch eine nicht-Primzahl wäre ok.
Das weiß man aber oft nicht so genau, und eine Primzahl schadet
auch nicht und hilft halt oft etwas; deshalb nimmt man sie.

von (prx) A. K. (prx)


Lesenswert?

Wobei das eine Abwägung sein kann. Mit Primzahl hat man eine Division an 
der Backe, andernfalls vielleicht nicht. Jetzt kommt es drauf an, was 
teurer ist: die Kollisionen oder die Divisionen. 
Datenstruktur-Theoretiker sind da gnadenlos, für sind alle skalaren 
Operation gleich teuer.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.