Die Auswahl einer geeigneten Tabelle Größe für Hash
Wenn ich eine Taste Satz von 1000, was ist eine passende Größe für meine Hash-Tabelle, und wie wird das bestimmt?
- Eine Primzahl, die größer als 1000X2 geeignet sein wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hängt es von der Auslastung ("Prozent voll" Stelle, wo die Tabelle zu vergrößern und neu zu verteilen, seine Elemente). Wenn Sie wissen, Sie haben genau 1000 Einträge, und diese Zahl wird sich nie ändern, können Sie nur setzen Sie den load-Faktor auf 1,0 und die Anfangsgröße 1000 für maximale Effizienz. Wenn Sie nicht sicher über die genaue Größe, die Sie verlassen konnte die Auslastung auf der Standardeinstellung von 0.75 und stellen Sie Ihre ursprüngliche Größe zu 1334 (erwartete Größe/LF) für wirklich gute Leistung, auf Kosten von zusätzlichem Speicher.
Können Sie den folgenden Konstruktor legen Sie den load-Faktor:
Müssen Sie Faktor in die hash-Funktion auch.
einer Faustregel sagt stellen Sie die Größe der Tabelle zu verdoppeln, so dass es Raum zu erweitern, und hoffentlich halten Sie die Anzahl der Kollisionen gering.
Andere Faustregel ist anzunehmen, dass Sie dabei eine Art von modulo im Zusammenhang hashing, dann Runden Sie Ihren Tisch der Größe bis zu der nächste größte Primzahl, und verwenden Sie, dass prime-Anzahl als modulo-Wert.
Welche Art von Dingen sind Sie hashing? Mehr Details generieren soll besser beraten.
Es gibt einige Diskussionen über diese Faktoren in der Dokumentation für
Hash
Wachsen lassen. Mit dieser Größe, das automatische handling ist in Ordnung. Andere als, dass, 2 x groß + 1 ist eine einfache Formel. Primzahlen sind auch gut, aber sobald Ihre Daten legen eine bestimmte Größe erreicht, wird der hash-Implementierung könnte sich entscheiden, um wiederzukäuen und wachsen der Tabelle.
Ihre Schlüssel fahren die Wirksamkeit und hoffentlich Verschieden genug.
Fazit: Fragen Sie die Größe Frage, wenn Sie Probleme haben, wie beispielsweise die Größe oder die Leistung verlangsamen, als die anderen: keine Sorge!
Zweimal ist gut.
Sie haben keine großen keyset.
Kümmern Sie sich nicht über die schwierigen Diskussionen über Ihre HashTable-Implementierung, und gehen für das Jahr 2000.
Möchte ich bekräftigen, was https://stackoverflow.com/users/33229/wwwflickrcomphotosrene-germany oben gesagt. 1000 scheint nicht, wie eine sehr große hash zu mir. Ich habe mit einer Menge von hashtables über diese Größe in java ohne zu sehen, viel in der Art von performance-Problemen. Und ich kaum jemals muck ungefähr mit der Größe oder Auslastung.
Wenn Sie ausgeführt haben, einen profiler auf Ihren code und festgestellt, dass die Hashtabelle ist Ihr problem, dann starten tweaking. Ansonsten würde ich nicht davon ausgehen, du hast ein problem, bis du sicher bist.
Nachdem alle, in den meisten code, das performance-problem nicht da, wo Sie denken, es ist. Ich versuche nicht zu antizipieren.