Betrachten Sie die Menge der Schlüssel und eine Hash-Tabelle, in der die Anzahl der Eimer . Da ein Faktor von , werden die Schlüssel, die ein Vielfaches von sind, in Eimer gehasht, die ein Vielfaches von :K={0,1,...,100}m=1231233
- Die Schlüssel werden in Bucket gehasht .{0,12,24,36,...}0
- Die Schlüssel werden in Bucket gehasht .{3,15,27,39,...}3
- Die Schlüssel werden in Bucket gehasht .{6,18,30,42,...}6
- Die Schlüssel werden in Bucket gehasht .{9,21,33,45,...}9
Wenn gleichmäßig verteilt ist (dh jeder Schlüssel in ist gleich wahrscheinlich), ist die Wahl von nicht so kritisch. Aber was passiert, wenn nicht gleichmäßig verteilt ist? Stellen Sie sich vor, dass die wahrscheinlichsten Schlüssel ein Vielfaches von . In diesem Fall sind alle Buckets, bei denen es sich nicht um Vielfache von , mit hoher Wahrscheinlichkeit leer (was in Bezug auf die Leistung der Hash-Tabelle wirklich schlecht ist).KKmK33
Diese Situation ist häufiger, als es scheint. Stellen Sie sich zum Beispiel vor, Sie verfolgen Objekte anhand ihres Speicherorts. Wenn die Wortgröße Ihres Computers vier Bytes beträgt, werden Sie Hashing-Schlüssel haben, die ein Vielfaches von . Es erübrigt sich zu erwähnen, dass es eine schreckliche Wahl wäre , als Vielfaches von zu wählen : Sie hätten Eimer komplett leer und alle Ihre Schlüssel kollidieren in den verbleibenden Eimern.4m43m/4m/4
Im Allgemeinen:
Jeder Schlüssel in , der einen gemeinsamen Faktor mit der Anzahl der Buckets wird in einen Bucket gehasht, der ein Vielfaches dieses Faktors ist.Km
Um Kollisionen zu minimieren, ist es daher wichtig, die Anzahl gemeinsamer Faktoren zwischen und den Elementen von zu reduzieren . Wie kann das erreicht werden? Indem Sie als eine Zahl wählen , die nur wenige Faktoren hat: eine Primzahl .mKm