Kürzlich habe ich in einem sehr bekannten Buch " Introduction to Algorithms " über Hash-Tabellen gelesen . Ich habe sie noch nicht in echten Anwendungen verwendet, möchte es aber. Aber ich weiß nicht, wie ich anfangen soll.
Kann mir jemand einige Beispiele für die Verwendung geben, zum Beispiel, wie man eine Wörterbuchanwendung (wie ABBYY Lingvo) mithilfe von Hash-Tabellen realisiert?
Und schließlich möchte ich wissen, was der Unterschied zwischen Hash-Tabellen und assoziativen Arrays in PHP ist. Ich meine, welche Technologie soll ich in welchen Situationen verwenden?
Wenn ich falsch liege (ich bitte um Verzeihung), korrigieren Sie mich bitte, da ich eigentlich mit Hash-Tabellen beginne und nur grundlegende (theoretische) Kenntnisse darüber habe.
Vielen Dank.
quelle
Antworten:
In PHP werden assoziative Arrays als Hashtabellen mit einigen zusätzlichen Funktionen implementiert.
Technisch gesehen ist ein assoziatives Array jedoch nicht identisch mit einer Hashtabelle - es wird einfach teilweise mit einer Hashtabelle hinter den Kulissen implementiert . Da der größte Teil seiner Implementierung eine Hashtabelle ist, kann sie alles tun, was eine Hashtabelle kann - aber sie kann auch mehr.
Sie können beispielsweise ein assoziatives Array mit einer for-Schleife durchlaufen, was mit einer Hashtabelle nicht möglich ist.
Während sie ähnlich sind, kann ein assoziatives Array tatsächlich eine Obermenge dessen ausführen, was eine Hashtabelle kann - sie sind also nicht genau dasselbe. Stellen Sie sich das als Hashtabellen und zusätzliche Funktionen vor.
Codebeispiele:
Verwenden eines assoziativen Arrays als Hashtabelle :
Durchlaufen eines assoziativen Arrays :
Beachten Sie insbesondere, wie im zweiten Beispiel die Reihenfolge der einzelnen Elemente (Tyler, Bill Marc) basierend auf der Reihenfolge beibehalten wird, in der sie in das Array eingegeben wurden. Dies ist ein wesentlicher Unterschied zwischen assoziativen Arrays und Hashtabellen. Eine Hashtabelle behält keine Verbindung zwischen den darin enthaltenen Elementen bei, während dies bei einem assoziativen PHP-Array der Fall ist (Sie können sogar ein assoziatives PHP-Array sortieren).
quelle
PHP-Arrays sind im Grunde Hash-Tabellen
quelle
Der Unterschied zwischen einem assoziativen Array und einer Hash-Tabelle besteht darin, dass ein assoziatives Array ein Datentyp ist, während eine Hash-Tabelle eine Datenimplementierung ist. Offensichtlich ist der assoziative Array-Typ in vielen aktuellen Programmiersprachen sehr wichtig: Perl, Python, PHP usw. Eine Hash-Tabelle ist die Hauptmethode zum Implementieren eines assoziativen Arrays, aber nicht die einzige. Und assoziative Arrays sind die Hauptverwendung von Hash-Tabellen, aber nicht ganz die einzige Verwendung. Es ist also nicht so, dass sie gleich sind, aber wenn Sie bereits assoziative Arrays haben, sollten Sie sich normalerweise keine Gedanken über den Unterschied machen.
Aus Leistungsgründen kann es wichtig sein zu wissen, dass Ihre assoziativen Arrays in Ihrer Lieblingssprache als Hashes implementiert sind. Und es kann wichtig sein, eine Vorstellung von den Gemeinkosten dieser Implementierung zu haben. Hash-Tabellen sind langsamer und verbrauchen mehr Speicher als lineare Arrays, wie Sie in C sehen.
Perl fasst die beiden Konzepte zusammen, indem es assoziative Arrays "Hashes" nennt. Wie eine Reihe von Funktionen von Perl ist es nicht ganz falsch, aber es ist schlampig.
quelle
Ein Array in PHP ist eigentlich eine geordnete Karte, keine Hashtabelle. Der Hauptunterschied zwischen Karte und Hashtabelle besteht darin, dass die Reihenfolge, in der Elemente hinzugefügt wurden, nicht gespeichert werden kann. Andererseits sind Hashtabellen viel schneller als Karten. Die Komplexität beim Abrufen eines Elements aus der Karte ist O (nlogn) und aus der Hashtabelle ist O (1).
quelle
Ein assoziatives Array ist ein Array, in dem Sie nicht über einen Index, sondern über einen Schlüssel auf Elemente zugreifen. Wie dies intern funktioniert, ist implementierungsspezifisch (es gibt keine Regel, wie es funktionieren muss). Ein assoziatives Array könnte durch eine Hash-Tabelle implementiert werden (die meisten Implementierungen tun dies), aber es könnte auch durch eine Baumstruktur oder eine Sprungliste implementiert werden, oder der Algorithmus iteriert einfach über alle Elemente im Array und sucht nach einem Schlüssel das passt (das wäre furchtbar langsam, aber es funktioniert).
Eine Hash-Tabelle ist eine Möglichkeit, Daten zu speichern, bei denen Werte Schlüsseln zugeordnet sind und bei denen Sie Werte für Schlüssel innerhalb einer (normalerweise fast) konstanten Zeit suchen möchten. Dies klingt genau so, wie Sie es von einem assoziativen Array erwarten. Deshalb werden die meisten Hash-Tabellen für die Implementierung dieser Arrays verwendet, dies ist jedoch nicht obligatorisch.
quelle