Assoziative Reihe

In der Informatik, einer assoziativen Reihe, der Karte oder dem Wörterbuch ist ein abstrakter Datentyp, der aus einer Sammlung (Schlüssel, Wert) Paare zusammengesetzt ist, solch, dass jeder mögliche Schlüssel höchstens einmal in der Sammlung erscheint.

Mit diesem Datentyp vereinigte Operationen erlauben:

  • die Hinzufügung von Paaren zur Sammlung
  • die Eliminierung von Paaren von der Sammlung
  • die Modifizierung der Werte vorhandener Paare
  • der lookup des Werts hat mit einem besonderen Schlüssel verkehrt

Das Wörterbuch-Problem ist die Aufgabe, eine Datenstruktur zu entwerfen, die eine assoziative Reihe durchführt. Eine Standardlösung des Wörterbuch-Problems ist eine Hash-Tabelle; in einigen Fällen ist es auch möglich, das Problem zu beheben, das direkt gerichtete Reihe, binäre Suchbäume oder andere mehr spezialisierte Strukturen verwendet.

Viele Programmiersprachen schließen assoziative Reihe als primitive Datentypen ein, und sie sind in Softwarebibliotheken für viele andere verfügbar. Assoziativspeicher ist eine Form der direkten Unterstützung des Hardware-Niveaus für die assoziative Reihe.

Assoziative Reihe hat viele Anwendungen einschließlich solcher grundsätzlichen Programmiermuster als memoization und des Raumausstatter-Musters.

Operationen

In einer assoziativen Reihe, der Vereinigung zwischen einem Schlüssel und einem Wert ist häufig als eine "Schwergängigkeit" bekannt, und dasselbe Wort "Schwergängigkeit" kann auch verwendet werden, um sich auf den Prozess zu beziehen, eine neue Vereinigung zu schaffen.

Die Operationen, die gewöhnlich für eine assoziative Reihe definiert werden, sind:

  • Fügen Sie hinzu oder fügen Sie ein: Fügen Sie einen neuen {Schlüssel, Wert} Paar zur Sammlung hinzu, den neuen Schlüssel zu seinem neuen Wert bindend. Die Argumente für diese Operation sind der Schlüssel und der Wert.
  • Teilen Sie wiederzu: Ersetzen Sie den Wert in einem (Schlüssel, Wert) Paare, die bereits in der Sammlung sind, einen alten Schlüssel zu einem neuen Wert bindend. Als mit einer Einfügung sind die Argumente für diese Operation der Schlüssel und der Wert.
  • Entfernen Sie oder löschen Sie: Ziehen Sie (Schlüssel, Wert) Paar von der Sammlung um, einen gegebenen Schlüssel von seinem Wert losbindend. Das Argument für diese Operation ist der Schlüssel.
  • Lookup: Finden Sie den Wert (wenn irgendwelcher), der zu einem gegebenen Schlüssel gebunden wird. Das Argument für diese Operation ist der Schlüssel, und der Wert wird von der Operation zurückgegeben. Wenn kein Wert gefunden wird, erheben einige assoziative Reihe-Durchführungen eine Ausnahme.

Außerdem kann assoziative Reihe auch andere Operationen wie Bestimmung der Zahl von bindings oder dem Konstruieren eines iterator einschließen, um sich über den ganzen bindings zu schlingen. Gewöhnlich, für solch eine Operation, kann die Ordnung, in der die bindings zurückgegeben werden, willkürlich sein.

Eine Mehrkarte verallgemeinert eine assoziative Reihe, indem sie vielfachen Werten erlaubt wird, mit einem einzelnen Schlüssel vereinigt zu werden. Eine bidirektionale Karte ist ein zusammenhängender abstrakter Datentyp, in dem die bindings in beiden Richtungen funktionieren: Jeder Wert muss mit einem einzigartigen Schlüssel vereinigt werden, und eine zweite lookup Operation nimmt einen Wert als Argument und schlägt den mit diesem Wert vereinigten Schlüssel nach.

Beispiel

Nehmen Sie an, dass der Satz von von einer Bibliothek vermittelten Darlehen in einer Datenstruktur vertreten werden soll. Jedes Buch in einer Bibliothek kann nur von einem einzelnen Bibliotheksschutzherrn auf einmal überprüft werden. Jedoch kann ein einzelner Schutzherr im Stande sein, vielfache Bücher zu überprüfen. Deshalb ist die Information, über die Bücher überprüft werden, zu dem Schutzherren durch eine assoziative Reihe vertreten werden können, in der die Bücher die Schlüssel und die Schutzherren sind, die Werte. Zum Beispiel (die Notation von der Pythonschlange verwendend, in der eine Schwergängigkeit durch das Stellen eines Doppelpunkts zwischen dem Schlüssel und dem Wert vertreten wird) können die aktuellen Abreisen durch eine assoziative Reihe vertreten werden

"Große Erwartungen": "John",

"Stolz und Vorurteil": "Alice",

"Wuthering Höhen": "Alice"

} </pre>

Eine lookup Operation mit dem Schlüssel "Große Erwartungen" in dieser Reihe würde den Namen der Person zurückgeben, die dieses Buch, John überprüft hat. Wenn John sein Buch zurückgibt, das eine Auswischen-Operation in der assoziativen Reihe verursachen würde, und wenn Pat ein anderes Buch überprüft, das eine Einfügungsoperation verursachen würde, zu einem verschiedenen Staat führend:

"Stolz und Vorurteil": "Alice",

"Die Brüder Karamazov": "Richtig",

"Wuthering Höhen": "Alice"} </pre>

In diesem neuen Staat würde derselbe lookup wie zuvor, mit dem Schlüssel "Große Erwartungen", eine Ausnahme erheben, weil dieser Schlüssel nicht mehr in der Reihe da ist.

Durchführung

Für Wörterbücher mit sehr kleinen Zahlen von bindings kann es Sinn haben, das Wörterbuch mit einer Vereinigungsliste, einer verbundenen Liste von bindings durchzuführen. Mit dieser Durchführung ist die Zeit, um die grundlegenden Wörterbuch-Operationen durchzuführen, in der Gesamtzahl von bindings geradlinig; jedoch ist es leicht durchzuführen, und die unveränderlichen Faktoren in seiner Laufzeit sind klein. Eine andere sehr einfache Durchführungstechnik, verwendbar, wenn die Schlüssel auf eine schmale Reihe von ganzen Zahlen eingeschränkt werden, ist das direkte Wenden in eine Reihe: Der Wert für einen gegebenen Schlüssel k wird an der Reihe-Zelle [k] versorgt, oder wenn es keine Schwergängigkeit für k dann gibt, versorgt die Zelle einen speziellen Wächter-Wert, der die Abwesenheit einer Schwergängigkeit anzeigt. Sowie einfach seiend, ist diese Technik schnell: Jede Wörterbuch-Operation nimmt Zeit in Anspruch. Jedoch ist die Raumvoraussetzung für diese Struktur die Größe des kompletten keyspace, es unpraktisch machend, wenn der keyspace nicht klein ist.

Die am häufigsten verwendete allgemeine Zweck-Durchführung einer assoziativen Reihe ist mit einer Hash-Tabelle: Eine Reihe von bindings, zusammen mit einer Kuddelmuddel-Funktion, die jeden möglichen Schlüssel in einen Reihe-Index kartografisch darstellt. Die Grundidee einer Hash-Tabelle besteht darin, dass die Schwergängigkeit für einen gegebenen Schlüssel an der gegebenen Position durch die Verwendung der Kuddelmuddel-Funktion auf diesen Schlüssel versorgt wird, und dass lookup Operationen durch das Schauen auf diese Zelle der Reihe und das Verwenden der Schwergängigkeit gefunden dort durchgeführt werden. Jedoch müssen gestützte Wörterbücher der Hash-Tabelle bereit sein, Kollisionen zu behandeln, die vorkommen, wenn zwei Schlüssel durch die Kuddelmuddel-Funktion zu demselben Index kartografisch dargestellt werden, und viele verschiedene Kollisionsentschlossenheitsstrategien entwickelt worden sind, um sich mit dieser Situation zu befassen, häufig hat irgendeinen auf dem offenen Wenden gestützt (auf eine Folge von Hash-Tabelle-Indizes statt eines einzelnen Index, bis zur Entdeckung entweder der gegebene Schlüssel oder eine leere Zelle schauend), oder auf dem Kuddelmuddel-Anketten (eine kleine Vereinigungsliste statt einer einzelnen Schwergängigkeit in jeder Hash-Tabelle-Zelle versorgend).

Wörterbücher können auch in binären Suchbäumen oder in Datenstrukturen versorgt werden, die zu einem besonderen Typ von Schlüsseln wie Basis-Bäume, Versuche, Reihe von Judy oder Bäume von van Emde Boas spezialisiert sind, aber diese Durchführungsmethoden sind weniger effizient als Hash-Tabellen sowie das Stellen größerer Beschränkungen der Typen von Daten, die sie behandeln können. Die Vorteile dieser alternativen Strukturen kommen aus ihrer Fähigkeit, Operationen außer den grundlegenden einer assoziativen Reihe, wie Entdeckung der Schwergängigkeit zu behandeln, deren Schlüssel an einem gefragten Schlüssel am nächsten ist, wenn die Abfrage nicht selbst Gegenwart im Satz von bindings ist.

Sprachunterstützung

Assoziative Reihe kann auf jeder Programmiersprache als ein Paket durchgeführt werden, und viele Sprachsysteme stellen ihnen als ein Teil ihrer Standardbibliothek zur Verfügung. Auf einigen Sprachen werden sie ins Standardsystem nicht nur eingebaut, aber haben spezielle Syntax häufig mit einer Reihe ähnlichem subscripting.

Die eingebaute syntaktische Unterstützung für die assoziative Reihe wurde durch SNOBOL4, unter dem Namen "Tisch" eingeführt. MUMPS hat mehrdimensionale assoziative Reihe, fakultativ beharrlich, seine Schlüsseldatenstruktur gemacht. SETL hat sie als eine mögliche Durchführung von Sätzen und Karten unterstützt. Die meisten modernen scripting Sprachen, mit AWK und einschließlich Perl, Tcl, JavaScript, Pythonschlange, Rubins, und Lua anfangend, unterstützen assoziative Reihe als ein primärer Behältertyp. Auf noch vielen Sprachen sind sie verfügbar, weil Bibliothek ohne spezielle Syntax fungiert.

In Plausch, Ziel-C.NET, Pythonschlange und REALbasic werden sie Wörterbücher genannt; in Perl und Ruby werden sie Kuddelmuddel genannt; in C ++, Java, und Gehen sie werden Karten genannt (sieh Karte (C ++), unordered_map (C ++), und); im allgemeinen Lispeln und Windows PowerShell werden sie Hash-Tabellen genannt (da beide normalerweise diese Durchführung verwenden). In PHP kann die ganze Reihe assoziativ sein, außer dass die Schlüssel auf ganze Zahlen und Schnuren beschränkt werden. In JavaScript (sieh auch JSON), benehmen sich alle Gegenstände als assoziative Reihe. In Lua werden sie Tische genannt, und werden als der primitive Baustein für alle Datenstrukturen verwendet. In Visuellem FoxPro werden sie Sammlungen genannt.

Links


Wiegenlied / Symbolik (Künste)
Impressum & Datenschutz