Was ist der Unterschied zwischen abstrakten und konkreten Datenstrukturen?


17

Ich dachte , assoziatives Array (dh Karte oder Wörterbuch) und Hashing - Tabelle war das gleiche Konzept, bis ich sehe , in Wikipedia , dass

Für Wörterbücher mit einer sehr geringen Anzahl von Bindungen kann es sinnvoll sein, das Wörterbuch mithilfe einer Zuordnungsliste, einer verknüpften Liste von Bindungen, zu implementieren. ...

Die am häufigsten verwendete Allzweckimplementierung eines assoziativen Arrays ist eine Hash-Tabelle: ein Array von Bindungen zusammen mit einer Hash-Funktion, die jeden möglichen Schlüssel einem Array-Index zuordnet. ...

Wörterbücher können auch in binären Suchbäumen oder in Datenstrukturen gespeichert werden, die auf einen bestimmten Schlüsseltyp spezialisiert sind, z. B. Radixbäume, Try, Judy-Arrays oder Van-Emde-Boas-Bäume. ...

Ich denke, mein Problem liegt darin, dass ich nicht weiß, dass das assoziative Array (dh die Karte oder das Wörterbuch) ein abstrakter Datentyp ist und die Hashing-Tabelle eine konkrete Datenstruktur ist, und dass verschiedene konkrete Datenstrukturen verwendet werden können, um die zu implementieren gleicher abstrakter Datentyp.

Meine Fragen wären

  • Was ist der Unterschied und die Beziehung zwischen abstrakten Datenstrukturen und konkreten Datenstrukturen?

  • Welche Beispiele gibt es jeweils (abstrakte und konkrete Datenstrukturen)? Je mehr desto besser.

  • Gibt es eine Liste, mit welchen konkreten Datenstrukturen welche abstrakten Datenstrukturen implementiert werden können? Es wäre schön, einen zu haben.

Antworten:


17

Der abstrakte Datentyp (ADT) ist im Wesentlichen eine API, und eine konkrete Datenstruktur bietet eine Implementierung dieser API. Für ein bestimmtes ADT gibt es häufig mehrere verschiedene Auswahlmöglichkeiten für konkrete Datenstrukturen, die die vom ADT beschriebenen Abfrage- und Aktualisierungsvorgänge unterstützen. Jede konkrete Datenstruktur für ein bestimmtes ADT muss alle vom ADT beschriebenen Operationen unterstützen (möglicherweise mit einer gewissen Erfolgswahrscheinlichkeit im Fall von zufälligen Strukturen), aber jede konkrete Struktur kann unterschiedliche Garantien für die Laufzeit jeder Operation geben. Die Wahl, welche konkrete Datenstruktur für ein bestimmtes ADT implementiert werden soll, hängt normalerweise von den Prioritäten der Effizienz jedes Vorgangs (einschließlich der Initialisierung der Struktur) und der Komplexität der Implementierung und Verwaltung der verschiedenen Datentypen ab.

Es gibt viel zu viele ADTs und entsprechende konkrete Strukturen, um sie in einer einzigen Antwort aufzulisten. Hier einige Beispiele:

  • Find(x)xxInsert(x)Delete(x)

  • Findsuccessor(x)SxtSs<t. Konkrete Datenstrukturen, die den Nachfolger-ADT unterstützen, umfassen verschiedene binäre Suchbäume und kompliziertere Strukturen wie z X-Fast-Trie- Baum oder einen Van-Emde-Boas-Baum (wenn die Schlüssel ganze Zahlen sind).

  • Eine Prioritätswarteschlange ist eine ADT, die insertund erfordertdelete-min Vorgänge sind (und manchmal auch andere Vorgänge, z. B. find-min increase-keyoder delete-key). Datenstrukturen, die die Prioritätswarteschlange ADT implementieren, umfassen:

    1. eine unsortierte verknüpfte Liste, die schnell insertaber langsam ist delete-min.

    2. eine sortierte verknüpfte Liste, die schnell delete-minaber langsam istinsert

    3. ein binärer Suchbaum, der logarithmische insertunddelete-min , undsÖrt(n) Initialisierungszeit.

    4. ein binäres heap die logarithmische aufweist insertund delete-minund linear Zeit der Initialisierung.

    5. Es gibt auch andere Varianten von Heap-Implementierungen .

  • Ein Intervall-Stich ADT verwaltet eine Reihe von Intervallen auf der realen Linie und unterstützt eine stabbing(x)Abfrage, die die Teilmenge der Intervalle zurückgibt, die den Punkt enthalten (von ihm gestochen werden)x. Datenstrukturen, die die Stichabfrage ADT implementieren, umfassen einen Segmentbaum und einen Intervallbaum .


9

Der abstrakte Datentyp beschreibt, welche Operationen verfügbar sind und welche Gesetze sie einhalten. Zum Beispiel können Sie mit einem Wörterbuch einen Wert unter einem bestimmten Schlüssel speichern und einen Wert für einen Schlüssel abrufen. Wenn Sie einen Wert zuerst speichern und dann mit demselben Schlüssel abrufen, erhalten Sie den Wert zurück, den Sie gespeichert haben. Ein Stapel verfügt über Push- und Pop-Operationen.

Der konkrete Datentyp gibt an, wie diese Operationen tatsächlich implementiert werden.


Vielen Dank! Gibt es Listen, welche gemeinsame Datenstruktur welche ist, abstrakt oder konkret?
Tim

Keine allgemeine Liste, aber Sie können sich xlinux.nist.gov/dads
Alexey Romanov
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.