Die Implementierung einer hash-Tabelle

Ich begann zu Lesen über die Umsetzung der verschiedenen Daten-Strukturen, die ein paar Tage zurück, und gekommen, um zu hash-Tabellen und steckten fest auf einen bestimmten Punkt.

Meinem Verständnis, wie eine hash-Tabelle implementiert ist:
Ein Schlüssel K ist an eine hash-Funktion H gibt, die eine verschlüsselte version von K, HK. HK sollte wohl mindestens ein uint32_t berücksichtigen, Kollisionen, wir haben ein array der Größe X, die das Element gespeichert wird, auf den index HK dieses array.. aber wäre das nicht verlangen, eine pre-allokiert array der Länge uint32_t atleast (oder was auch immer der return-Wert von H ist)? unter der Annahme, dass wir nicht die Daten gespeichert, die sich innerhalb des Arrays, und stattdessen store einen ptr auf die Daten, dann würden wir benötigen ein array von ptr_t der Länge uint32_t.. das scheint ziemlich verschwenderisch, auf 64bit würde das bedeuten, dass die Speicherauslastung von:
2^32 * 8 = 34359738368 Byte oder ~32GB nur für die Reihe von ptrs zu den Daten, die offensichtlich nicht, wie Ihr tatsächlich in die Praxis umgesetzt..

So was bin ich?

  • Ich denke, die typische Umsetzung ist nicht mit einem array, sondern eine verknüpfte Liste.
  • Ich denke, die typische Implementierung ist nicht mit einer verknüpften Liste sondern ein array.
  • Über Kollisionen, bei Verwendung einer Hashtabelle, wird es collsions. Sollten Sie behandelt werden, nicht vermieden. Sie können minimiert werden durch anständiges hashing und dimension.
  • tatsächlich, Sie verwenden ein array von verknüpften Listen für die run-of-the-mill Umsetzung. Es ist nicht optimal, im Falle von Kollision und hat eine schlechte Lokalität der Referenz (zwischen den Elementen), aber die Komplexität der Vorgänge ist ziemlich vorhersehbar.
  • Nun ja, das war ein missunderstanding, ich dachte, er Sprach über die zweite Stufe.
InformationsquelleAutor Kim Sun-wu | 2012-01-20
Schreibe einen Kommentar