Algorithmen und Datenstrukturen
B3. ADTs , Bags, Stack and Queues
Marcel L¨ uthi and Gabriele R¨ oger
Universit¨ at Basel
21. M¨ arz 2019
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 1 / 32
Algorithmen und Datenstrukturen
21. M¨ arz 2019 — B3. ADTs , Bags, Stack and Queues
B3.1 Abstrakte Datentypen
B3.2 Multimengen, Warteschlange und Stapel B3.3 Anwendung von Stacks
B3.4 Priority Queues
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 2 / 32
B3. ADTs , Bags, Stack and Queues Abstrakte Datentypen
B3.1 Abstrakte Datentypen
B3. ADTs , Bags, Stack and Queues Abstrakte Datentypen
Abstrakte Datentypen : Definition
Abstrakter Datentyp
Die Beschreibung eines Datentyps durch eine Zusammenfassung von Daten und anwendbaren Operationen.
Beispiele:
I Integer mit arithmetischen Operationen
I Komplexe Zahlen mit Operationen add und subtract
I Mengen mit Operationen union, intersection und setminus
I Geordnete Sequenz von von Objekten
B3. ADTs , Bags, Stack and Queues Abstrakte Datentypen
Informatikerin des Tages
Barbara Liskov
I Eine der ersten Frauen in USA mit Doktor in Informatik
I Gewinnering des Turing Awards
I Hat Konzept von
” Abstrakt Data Types “eingef¨ uhrt.
Liskov, Barbara, and Stephen Zilles. Programming with abstract data types. ACM Sigplan Notices. ACM, 1974.
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 5 / 32
B3. ADTs , Bags, Stack and Queues Abstrakte Datentypen
Abstrakte Datentypen und Klassen
I Abstrakte Datentypen entsprechen Klassen in OO Programmierung
p u b l i c c l a s s C o m p l e x {
p r i v a t e d o u b l e r e a l ; p r i v a t e d o u b l e i m a g ;
p u b l i c C o m p l e x (d o u b l e real , d o u b l e i m a g ) { ... } p u b l i c C o m p l e x (d o u b l e m a g n i t u d e , d o u b l e p h a s e ) { ... }
p u b l i c C o m p l e x add ( C o m p l e x c1 , C o m p l e x c2 ) { ... } p u b l i c C o m p l e x s u b t r a c t ( C o m p l e x c1 , C o m p l e x c2 ) { ... } ...
}
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 6 / 32
B3. ADTs , Bags, Stack and Queues Abstrakte Datentypen
Vorteile von Abstrakten Datentypen
I Nutzer programmiert gegen Schnittstelle
I Verwendete Datenstruktur (Repr¨ asentation) ist versteckt (gekapselt)
I Repr¨ asentation kann jederzeit ausgetauscht werden I Verst¨ andnis auf zwei Ebenen
1
Was macht der Datentyp (Schnittstelle)
2
Wie wird es gemacht (Interne Datenstruktur) I Erlaubt komplexe Sachverhalte zu abstrahieren
B3. ADTs , Bags, Stack and Queues Abstrakte Datentypen
Beispiel: Listen in Java
i n t e r f a c e List < E >:
E get (int i n d e x );
v o i d add ( E e l e m e n t );
v o i d add (int pos , E e l e m e n t );
...
Achtung
Verschiedene Listen haben dieselbe Schnittstelle, aber Operationen
haben nicht dieselbe Komplexit¨ at.
B3. ADTs , Bags, Stack and Queues Abstrakte Datentypen
Datentypdesign
Wir werden f¨ ur jeden Datentyp folgende Punkte besprechen I Beschreiben der Schnittstelle (API)
I Beispielanwendungen (Client) die die Schnittstelle nutzen I Implementation
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 9 / 32
B3. ADTs , Bags, Stack and Queues Abstrakte Datentypen
Quiz: Abstrakte Datentypen
I Ist eine verkettete Liste ein Datentyp oder eine Datenstruktur?
I Ist ein Array nur eine Datenstruktur oder auch Abstrakter Datentyp?
I Was w¨ aren die Operationen auf einem Array, welche den ADT Array Charakterisieren?
I Welche Datenstruktur w¨ urden Sie f¨ ur die Implementation eines Array Datentyps verwenden?
I Was ist die Gefahr, bei der Verwendung eines abstrakten Datentypen?
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 10 / 32
B3. ADTs , Bags, Stack and Queues Multimengen, Warteschlange und Stapel
B3.2 Multimengen, Warteschlange und Stapel
B3. ADTs , Bags, Stack and Queues Multimengen, Warteschlange und Stapel
Ein Besuch in der Mensa
(Teller-)Stapel
Multimenge (von
Essen) Schlange
Stapel, Multimenge und Schlange sind wichtige Datentypen, die
wir vom t¨ aglichen Leben kennen.
B3. ADTs , Bags, Stack and Queues Multimengen, Warteschlange und Stapel
Multimengen (Bag)
c l a s s Bag [ I t e m ]:
# E l e m e n t h i n z u f u e g e n
def add ( i t e m : I t e m ) - > I t e m
# I s t d i e M u l t i m e n g e l e e r ? def i s E m p t y () - > b o o l
# W i e v i e l e E l e m e n t e s i n d in d e r M e n g e ? def s i z e () - > int
# A b s t r a k t i o n um u e b e r E l e m e n t e zu i t e r i e r e n def i t e r a t o r () - > I t e r a t o r [ I t e m ]
}
I Anmerkung: Typ Annotation angelehnt an Python Typing Module (PEP 484)
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 13 / 32
B3. ADTs , Bags, Stack and Queues Multimengen, Warteschlange und Stapel
Multimenge (bag)
I Undefinierte Reihenfolge der Elemente
I Welches Element man nimmt ist undefiniert.
I Aber: Jedes Element wird nur einmal entnommen I Nicht zu verwechseln mit
Liste / Array, die die Reihenfolge garantieren.
Quelle: Abbildung 1.30 - Algorithms, Sedgewick & Wayne
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 14 / 32
B3. ADTs , Bags, Stack and Queues Multimengen, Warteschlange und Stapel
Warteschlange (Queue)
c l a s s Q u e u e [ I t e m ] {
# E l e m e n t zu S c h l a n g e h i n z u f u e g e n def e n q u e u e ( i t e m : I t e m )
# E l e m e n t v o n S c h l a n g e e n t f e r n e n def d e q u e u e () - > I t e m
# A n z a h l E l e m e n t e in d e r S c h l a n g e def s i z e () - > int //
# I s t d i e S c h l a n g e l e e r ? def i s E m p t y () - > b o o l }
B3. ADTs , Bags, Stack and Queues Multimengen, Warteschlange und Stapel
Warteschlange (queue)
I Reihenfolge: First in - first out.
I Elemente werden nur von vorne entnommen I Elemente werden nur von
hinten hinzugef¨ ugt.
I Anwendung:
Zwischenspeicher von Elementen, ohne dass die Reihenfolge ver¨ andert wird.
Quelle: Abbildung 1.31, Algorithmen,
Sedgewick & Wayne
B3. ADTs , Bags, Stack and Queues Multimengen, Warteschlange und Stapel
Stapel (Stack)
c l a s s S t a c k [ I t e m ] {
# E l e m e n t zu S t a p e l h i n z u f u e g e n def p u s h ( i t e m : I t e m )
# E l e m e n t v o n S t a p e l e n t f e r n e n
def pop () - > I t e m // E l e m e n t e n t n e h m e n
# I s t S t a p e l l e e r ? def i s E m p t y () - > B o o l e a n
# A n z a h l E l e m e n t in S t a p e l def s i z e () - > int
}
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 17 / 32
B3. ADTs , Bags, Stack and Queues Multimengen, Warteschlange und Stapel
Stapel (Stack)
I Reihenfolge: last in - first out (LIFO)
I Jedes element wird oben den Stapel gelegt.
I Nur oberstes Element kann entfernt werden.
I Anwendung: Stapeln und Schachtelung von Dingen
I Verschachtelte Funktionen / arithmetische Ausdr¨ ucke I E-Mail organisation
I Browser history (back button)
Quelle: Abbildung 1.32,
Algorithmen, Sedgewick & Wayne
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 18 / 32
B3. ADTs , Bags, Stack and Queues Multimengen, Warteschlange und Stapel
Multimengen, Warteschlangen und Stapel
I Nichts Neues: Nur Listen mit eingeschr¨ ankter Funktionalit¨ at I In Python: Alle Operationen definiert im Datentype List
Siehe: https://docs.python.org/3.1/tutorial/datastructures.html
Einschr¨ ankungen helfen Intention und Nutzung klar zu machen und Fehler in Nutzung zu verhindern.
B3. ADTs , Bags, Stack and Queues Multimengen, Warteschlange und Stapel
ADTs in Bibliotheken (Java)
I ADTs sind heute Teil jeder Standardbibliothek
Quelle: By Ramlmn - Own work, CC BY-SA 4.0,
https://commons.wikimedia.org/w/index.php?curid=64043967
B3. ADTs , Bags, Stack and Queues Multimengen, Warteschlange und Stapel
Beispiele und Implementation
IPython Notebooks: fundamental-adts.ipynb
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 21 / 32
B3. ADTs , Bags, Stack and Queues Anwendung von Stacks
B3.3 Anwendung von Stacks
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 22 / 32
B3. ADTs , Bags, Stack and Queues Anwendung von Stacks
Auswerten arithmetischer Operationen
Beispiel: (1 + ((2 + 3) ∗ (4 ∗ 5)))
Two-Stack Algorithmus (Dijkstra) I Wert: push auf Wertestapel I Operator: push auf
Operatorenstapel
I Linke Klammer: Ignorieren I Rechte Klammer: pop Operator
und zwei Werte
I Operation auf Werte anwenden I push Resultat der Operation auf
Wertestapel
Quelle:https://algs4.cs.princeton.edu/
lectures/13StacksAndQueues-2x2.pdf
B3. ADTs , Bags, Stack and Queues Anwendung von Stacks
Warum funktioniert das?
Beobachtung:
I Nach Auswertung eines geklammerten Ausdrucks ist der Stack im selben Zustand wie wenn der Wert anstelle des Ausdrucks gestanden h¨ atte.
I (1 + ((2 + 3) ∗ (4 ∗ 5))) wird zu (1 + (5 ∗ (4 ∗ 5))) I (1 + (5 ∗ (4 ∗ 5))) wird zu (1 + (5 ∗ 20)
I (1 + (5 ∗ 20)) wird zu (1 + 100)
I (1 + 100) wird zu 101
B3. ADTs , Bags, Stack and Queues Priority Queues
B3.4 Priority Queues
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 25 / 32
B3. ADTs , Bags, Stack and Queues Priority Queues
Vorrangwarteschlangen (Priority Queue)
Anwendung:
I Gr¨ osste Elemente m¨ ussen verabeitet werden. Nicht alle auf einmal.
Beispiele:
I Job-Scheduling (Elemente: Priorit¨ aten von Prozessen) I Numerische Berechung: (Elemente: Berechnungsfehler, die
zuerst zu beheben sind)
I Simulationssysteme (Elemente (Schl¨ ussel): Ereignisszeiten)
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 26 / 32
B3. ADTs , Bags, Stack and Queues Priority Queues
Priority Queue ADT
c l a s s M a x P Q [ I t e m ]:
# E l e m e n t e i n f u e g e n
def i n s e r t ( k : I t e m ) - > N o n e
# G r o e s s t e s E l e m e n t z u r u e c k g e b e n def max () - > I t e m
# G r o e s s t e s E l e m e n t e n t f e r n e n u n d z u r u e c k g e b e n def d e l M a x () - > I t e m
# I s t d i e Q u e u e l e e r ? def i s E m p t y () - > b o o l
# A n z a h l E l e m e n t e in d e r P r i o r i t y Q u e u e def s i z e () - > int
B3. ADTs , Bags, Stack and Queues Priority Queues
Einfache Implementationen
Arrayrepr¨ asentation (ungeordnet)
I Insert: Schl¨ ussel zu Array hinzuf¨ ugen
I max: Suche gr¨ ossten Schl¨ ussel
I - Swap mit letztem Element
I - Siehe: Selection sort
Arrayrepr¨ asentation (geordnet)
I Insert: Schl¨ ussel an richtiger Stelle im Array hinzuf¨ ugen
I - Siehe: Insertion sort I max: Letztes Element in
Array zur¨ uckgeben.
Datenstruktur Einf¨ ugen Gr¨ osstes Element entfernen
Ungeordnetes Array 1 N
Geordentes Array N 1
B3. ADTs , Bags, Stack and Queues Priority Queues
Beispielclient
Gegeben: Sehr grosser Stream von N Elementen N so gross, dass Speichern nicht m¨ oglich ist.
Gesucht: M gr¨ osste Elemente.
Einfachste Implementierungen (Nicht praktikabel) I Daten werden in Array gespeichert
I Daten werden sortiert und M gr¨ osste Elemente zur¨ uckgegeben Bessere Idee
Halte M gr¨ osste Elemente in Priority Queue.
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 29 / 32
B3. ADTs , Bags, Stack and Queues Priority Queues
Implementation
IPython Notebooks: PQ.ipynb
M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 21. M¨arz 2019 30 / 32
B3. ADTs , Bags, Stack and Queues Priority Queues
Komplexit¨ at Beispielclient
Implementation Zeit Speicher
Sortier-Client N log N N
PQ (einfache Implementation) NM M
I Grosse Vorteile in Laufzeit und Speicherkomplexit¨ at wenn M N
B3. ADTs , Bags, Stack and Queues Priority Queues