• Keine Ergebnisse gefunden

B3. ADTs , Bags, Stack and Queues

N/A
N/A
Protected

Academic year: 2022

Aktie "B3. ADTs , Bags, Stack and Queues"

Copied!
8
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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

(2)

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.

(3)

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.

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

Ausblick: Heaps - Ideale Datenstruktur f¨ ur Priority Queues

Datenstruktur

Datenstruktur Einf¨ ugen Gr¨ osstes Element entfernen

Geordentes Array N 1

Ungeordnetes Array 1 N

Heap log N log N

Testclient

Implementation Zeit Speicher

Sortier-Client N log N N

PQ (einfache Implementation) NM M

Heap Implementation N log M M

Referenzen

ÄHNLICHE DOKUMENTE

Doppelt verkettete Listen bestehen aus Listenzellen mit zwei Zeigern. • Ein Zeiger prev auf die

verschachtelten Prozeduren m¨ ussen viele Zugriffslinks verfolgt werden. Abhilfe: Displays

Agent abgemeldet nicht bereit Agent in Pause.. Wählt man oben rechts das Symbol zum Hinzufügen neuer Widgets, kann auf der folgenden Seite die entsprechende Auswahl getroffen

We look at two regimes that govern the possible order in which the individuals stand should they switch to the other queue: a regime in which cultural convention,

Der Kellerspeicher hat folgende Methoden: push kellert eine Zahl ein, pop kellert eine Zahl aus, size liefert die Anzahl der Zahlen und iterator liefert einen Iterator mit dem

Implementieren Sie eine FIFO-Warteschlange (First-in-first-out) für Zeichen, einmal mit einem Array in der Klasse ArrayQueue (zyklischer Puffer, Array mit fixer Größe) und einmal

Implementieren Sie eine FIFO-Warteschlange (First-in-first-out) für Objekte, einmal mit einem Array in der Klasse ArrayQueue (zyklischer Puffer, Array mit fixer Größe) und einmal

Implementieren Sie einen Kellerspeicher für Objekte, einmal mit einem Array in der Klasse ArrayStack und einmal als verkettete Liste in der Klasse LinkedListStack.. Die