Hash-Tabellen VS assoziative Arrays
Kürzlich habe ich gelesen, über hash-Tabellen in einem sehr berühmten Buch "Einführung in Algorithmen". Ich habe nicht verwendet Sie in jedem realen Anwendungen noch nicht, aber wollen. Aber ich weiß nicht wie ich anfangen soll.
Kann jemand geben Sie mir einige Proben von, z.B., wie zu erkennen, eine Wörterbuch-Anwendung (wie ABBYY Lingvo) mit hash-Tabellen?
Und zum Schluss würde ich gerne wissen, was ist der Unterschied zwischen hash-Tabellen und assoziativen arrays in PHP, ich meine, welche Technik sollte ich verwenden und in welchen Situationen?
Wenn ich mich Irre (ich bitte um Verzeihung) bitte korrigieren Sie mich, denn eigentlich bin ich angefangen mit hash-Tabellen und ich habe nur grundlegende (theoretische) Kenntnisse über Sie.
Vielen Dank.
InformationsquelleAutor der Frage Bakhtiyor | 2010-06-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
In PHP, assoziative arrays implementiert sind als Hashtabellen, mit ein wenig zusätzliche Funktionalität.
Jedoch technisch gesehen, ein assoziatives array ist nicht identisch mit einer hashtable - es ist einfach umgesetzt Teil mit einer hashtable hinter die kulissen. Weil die meisten Ihre Umsetzung ist eine hashtable, es kann alles ein hashtable kann - aber es kann mehr, zu.
Zum Beispiel können Sie eine Schleife durch ein assoziatives array mit einer for-Schleife, die Sie nicht tun können, mit einer hashtable.
So, während Sie ähnlich sind, wird ein assoziatives array ist tatsächlich für ein Obermengewas eine hashtable tun können - so sind Sie nicht genau die gleiche Sache. Betrachten Sie es als hashtables plus zusätzliche Funktionalität.
Code-Beispiele:
Mit einem assoziativen array als hashtable:
Durchlaufen eines assoziativen Arrays:
Beachten Sie vor allem, wie im zweiten Beispiel, die Reihenfolge der einzelnen Elemente aufrechterhalten wird (Tyler, Bill Marc) basierend auf der Reihenfolge, in der Sie eingegeben wurden in das array. Dies ist ein großer Unterschied zwischen assoziative arrays und hashtables. Eine hashtable gibt es keine Verbindung zwischen den Elementen, die er hält, in der Erwägung, dass eine PHP assoziatives array enthält (Sie können sogar zu Sortieren, PHP assoziatives array).
InformationsquelleAutor der Antwort Cam
php-arrays SIND im Grunde die hash-Tabellen
InformationsquelleAutor der Antwort Sergey Eremin
Den Unterschied zwischen einem assoziativen array und eine hash-Tabelle, ein assoziatives array ist ein Datentyp, während eine hash-Tabelle ist eine Datenbank-Implementierung. Offensichtlich ist die assoziative array-Typ ist sehr wichtig, in vielen aktuellen Programmiersprachen: Perl, Python, PHP, etc. Eine hash-Tabelle ist der wichtigste Weg zur Implementierung eines assoziativen Arrays, die aber durchaus nicht die einzige Möglichkeit. Und assoziativen arrays sind die hauptsächliche Verwendung von hash-Tabellen, aber nicht ganz der einzige nutzen. Es ist nicht So, dass Sie identisch sind, aber wenn Sie bereits haben, assoziative arrays, die du dann in der Regel sollten sich keine sorgen machen den Unterschied.
Aus performance-Gründen kann es wichtig sein, zu wissen, dass Ihre assoziative arrays in Ihrer bevorzugten Sprache umgesetzt werden als hashes. Und es kann wichtig sein, um eine Vorstellung von den Kosten für die Umsetzung. Hash-Tabellen sind langsamer und benötigen mehr Speicher als lineare arrays als Sie sehen, wie Sie in C.
Perl Klumpen die beiden Konzepte miteinander durch aufrufen assoziative arrays "hashes". Wie eine Reihe von features von Perl, es ist nicht ganz falsch, aber es ist schlampig.
InformationsquelleAutor der Antwort Greg Kuperberg
Ein array in PHP ist eigentlich eine geordnete map, keine hashtable. Hauptunterschied zwischen Karte und hashtable besteht in der Unfähigkeit, zu erinnern, die Reihenfolge in welcher die Elemente Hinzugefügt wurden. Auf der anderen Seite, hashtables sind wesentlich schneller als die Karten. Die Komplexität des Holens Sie ein element aus der Karte ist O(nlogn) und aus der Hashtabelle O(1).
InformationsquelleAutor der Antwort WoZ
Ein assoziatives array ist ein array, wo man nicht auf Elemente durch einen index, sondern durch einen Schlüssel. Wie diese intern arbeitet, ist die Umsetzung spezifischer (es gibt keine Regel, wie es arbeiten muss). Ein assoziatives array, das könnte umgesetzt werden, indem eine hash-Tabelle (die meisten Implementierungen wird das tun), aber es könnte auch implementiert werden, durch eine Art Baum-Struktur oder eine skip-Liste oder der Algorithmus einfach iteriert über alle Elemente im array und sucht nach einem Schlüssel, der passt (das wäre schrecklich langsam, aber es funktioniert).
Einer hash-Tabelle ist eine Art und Weise, wie Daten zu speichern, in denen Werte zugeordnet sind Tasten und wo Sie wollen zu finden, die Werte für die Schlüssel innerhalb einer (meist nahezu) Konstante Zeit. Das klingt genau wie das, was Sie erwarten von einem assoziativen array, das ist, warum die meisten der Zeit, die hash-Tabellen verwendet werden, die für die Umsetzung der arrays, aber das ist nicht zwingend.
InformationsquelleAutor der Antwort Mecki