Algorithmen und Datenstrukturen I

Ähnliche Dokumente
Programmieren in Haskell. Abstrakte Datentypen

Algorithmen und Datenstrukturen I

5. Januar Universität Bielefeld AG Praktische Informatik. Programmieren in Haskell. Stefan Janssen. Abstrakte Datentypen.

Algorithmen und Datenstrukturen II

Gliederung. Algorithmen und Datenstrukturen I. Listen in Haskell: Listen in Haskell: Listen in Haskell. Datentyp Liste Strings Listenkomprehension

Algorithmen und Datenstrukturen II

Algorithmen und Datenstrukturen I

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

Gliederung. Algorithmen und Datenstrukturen I. öschen in Rot-Schwarz-Bäumen. Löschen in Rot-Schwarz-Bäumen

Gliederung. Algorithmen und Datenstrukturen I. Eine wichtige Frage. Algorithmus. Materialien zur Vorlesung. Begriffsbestimmung EUKLID Primzahltest

Gliederung. Funktionale Programmierung. Pattern matching in Haskell. Pattern matching in ERLANG. Materialien zur Vorlesung

Haskell Seminar Abstrakte Datentypen. Nils Bardenhagen ms2725

Algorithmen und Datenstrukturen II

12. Dynamische Datenstrukturen

11. Elementare Datenstrukturen

Programmierparadigmen

ALP II Dynamische Datenmengen Datenabstraktion

Gliederung. Algorithmen und Datenstrukturen II. Graphen: All-pairs shortest paths. Graphen: All-pairs shortest paths. Graphen: Kürzeste Pfade III

Gliederung. Algorithmen und Datenstrukturen II. Prioritätsgesteuerte Suche. Entwurfstechniken für Algorithmen. Entwurfstechniken für Algorithmen

Graphdurchmusterung, Breiten- und Tiefensuche

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen (für ET/IT)

Gliederung. Algorithmen und Datenstrukturen II. Problem: Längste gemeinsame Teilsequenz. Problem: Längste gemeinsame Teilsequenz

Programmieren in Haskell Programmiermethodik

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Abstrakte Datentypen I

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

13. Dynamische Datenstrukturen

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Feld. Feld als sequentielle Liste

1 Abstrakte Datentypen

Programmierparadigmen

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012

Übung Algorithmen und Datenstrukturen

8 Elementare Datenstrukturen

Algorithmen und Programmierung

Stand der Vorlesung. Vergleich verkettete Liste und sequentielle Liste

Technische Universität München

Programmierung im Grossen

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume)

Listen. M. Jakob. Gymnasium Pegnitz. 20. September Hinführung: Wartenschlangen. Grundprinzip von Listen Rekursion

2.3 Spezifikation von Abstrakten Datentypen

Einführung in die funktionale Programmierung

Listen. M. Jakob. 20. September Gymnasium Pegnitz

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Stapel (Stack, Keller)

Gliederung. Algorithmen und Datenstrukturen II. ADT Graph. ADT Graph. Graphen in JAVA. Klasse Graph Suche Breitensuche Tiefensuche. D.

Struktur am Beispiel einer Liste

Informatik II Übung, Woche 14

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Abstrakte Datentypen und Datenstrukturen

Programmieren in Haskell Einstieg in Haskell

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

Einführung in die Informatik I

Schnittstellen, Stack und Queue

Algorithmen und Datenstrukturen Kapitel 4 Neue Datenstrukturen, besseres (?) Sortieren

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Gliederung. Programmierparadigmen. Aussagen. Aktuelle Entwicklungen. Aktuelle Entwicklungen. Aktuelle Entwicklungen Aussagen Köpfe. D.

Vorlesung Datenstrukturen

Lineare Datenstrukturen: Felder, Vektoren, Listen Modelle: math. Folge (a i ) i=1.. mit Basistyp T oder: [T]

Programmieren in Haskell

Algorithmen I. Sascha Witt Institut für Theoretische Informatik Web:

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.

Programmieren in Haskell

Materialien zu unseren Lehrwerken

Informatik II, SS 2016

Abstract Data Type and the Development of Data Structures

ADS: Algorithmen und Datenstrukturen

Abstrakte Datentypen.

Konkatenation zweier Listen mit concat

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

Kapitel 4: Datentyp Keller und Schlange

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie

Einfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).

Informatik II Prüfungsvorbereitungskurs

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Teil IV. Grundlegende Datenstrukturen

Programmierkurs II. Typsynonyme & algebraische Datentypen

26 Hierarchisch strukturierte Daten

2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.

Grundlagen der Informatik

Übung Algorithmen und Datenstrukturen

2.4 Datenabstraktion und Objektorientierung Datenabstraktion in Programmiersprachen

1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil III SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Musterlösung zur 2. Aufgabe der 4. Übung

11 Fallstudie: Reguläre Ausdrücke

Programmieren in Haskell

Kapitel 12: Induktive

Datenstrukturen und Algorithmen. Vorlesung 8

Programmieren in Haskell

Listenverarbeitung in Python

Advanced Programming in C

Logische Datenstrukturen

12.3 Ein Datenmodell für Listen

Funktionale Programmierung

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2017/18. Pro f. Dr. Sán do r Fe k e te

Transkript:

Algorithmen und Datenstrukturen I Abstrakte Datentypen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Winter 2009/10, 22. November 2009, c 2009/10 D.Rösner D. Rösner AuD I 2009/10... 1

Gliederung 1 2 s im Alltag ADT 3 s im Alltag ADT D. Rösner AuD I 2009/10... 2

Abstrakte Datentypen abstrakte Datentypen kurz oft nur ADT genannt sind im Unterschied zu den bisher betrachteten konkreten Datentypen nicht an eine bestimmte Repräsentation gebunden ADTs werden implizit definiert durch die Menge der auf ihnen zugelassenen Operationen: Konstruktoren, Selektoren, Prädikate diese werden auch als das Interface des ADT bezeichnet... D. Rösner AuD I 2009/10... 3

Abstrakte Datentypen abstrakte Datentypen... nur das Interface wird Nutzern offengelegt die interne Struktur die sog. Implementierung des ADT bleibt verborgen (Kapselung, information hiding ) und könnte jederzeit geändert werden solange das Interface unverändert bleibt, ist Code, der den ADT nutzt, davon nicht betroffen m.a.w.: ADTs dienen der Modularisierung D. Rösner AuD I 2009/10... 4

Abstrakte Datentypen in Haskell in Haskell können ADTs durch Haskell-Module realisiert werden ein Modul in Haskell definiert eine Menge von Funktionen und Datentypen in einer geschlossenen Umgebung ein Modul kann alle oder auch nur einige ausgewählte seiner Definitionen exportieren definiert wird ein Modul in Haskell durch module <name> (<exportliste>) where <definitionen> D. Rösner AuD I 2009/10... 5

ADT s im Alltag ADT... dt. Stapel im folgenden einige Beispiele aus dem Alltag D. Rösner AuD I 2009/10... 7

: Alltagsbeispiele s im Alltag ADT Quelle: http://www.fromoldbooks.org/pictures-of-old-books/pages/ D. Rösner AuD I 2009/10... 8

: Alltagsbeispiele s im Alltag ADT Quelle: http://www.rotten.com/library/culture/the-simpsons/homer-pez-dispenser.jpg D. Rösner AuD I 2009/10... 9

: Alltagsbeispiele s im Alltag ADT Quelle: http://www.pacificcatering.com.au/files/categories/md/ D. Rösner AuD I 2009/10... 10

ADT s im Alltag ADT abstrakter Datentyp Ein ist eine homogene Sammlung von Objekten, auf denen zwei zentrale Operationen definiert sind: Definition push x s füge x als neues oberstes Element in den s ein und gib den veränderten mit x als oberstem Element (sog. top) zurück pop s entferne das aktuelle oberste Element vom und gib den veränderten ohne x als oberstem Element als Wert zurück; Fehler, falls leer s.a. [RL99], Ch. 5 D. Rösner AuD I 2009/10... 12

ADT s im Alltag ADT abstrakter Datentyp realisiert das LIFO-Prinzip: last-in, first-out weitere Definitionen: das oberste Element eines s s wird durch den Selektor top s geliefert (dieses bleibt aber auf dem ) mit dem Konstruktor empty wird ein leerer kreiert das Prädikat stackempty prüft, ob ein noch Elemente enthält oder nicht manchmal kann auch noch mit size die Anzahl der Elemente auf dem erfragt werden s.a. [RL99], Ch. 5 bzw. [GT01], Ch. 4 D. Rösner AuD I 2009/10... 13

ADT s im Alltag ADT s and queues are among the simplest of all data structure, but are also among the most important. ([GT01], p. 136) wegen ihrer Bedeutung oft sogar in Hardware in den sog. Mikroinstruktionen in der CPU implementiert zentrales Element in vielen Programmierumgebungen, so z.b. in Hugs, aber auch in der Java Virtual Machine (JVM) s.a. [GT01], Ch. 4 D. Rösner AuD I 2009/10... 14

ADT s im Alltag ADT Beispiele für Verwendung von s: mit offenen Frames verschachtelter (rekursiver) Aufrufe von Funktionen sog. Operandenstack beim Auswerten arithmetischer Ausdrücke wie ((a + b)*(c + d))/e Speichern kürzlich besuchter WWW-Seiten in einem in einem Webbrowser Undo-Mechanismus in Texteditoren realisiert über einen mit den Operationen zur Textänderung s.a. [GT01], Ch. 4 D. Rösner AuD I 2009/10... 15

ADT s im Alltag ADT Bedeutung von pop als engl. Verb (aus WordNet 2.0): The verb pop has 13 senses (first 4 from tagged texts) 1. (3) protrude, pop, pop out, bulge, bulge out, bug out, come out -- (bulge outward; "His eyes popped") 2. (3) pop -- (hit a pop-fly; "He popped out to shortstop") 3. (1) pop -- (make a sharp explosive noise; "The cork of the champagne bottle popped") 4. (1) pop -- (fire a weapon with a loud explosive noise; "The soldiers were popping") 5. pop -- (cause to make a sharp explosive sound; "He popped the champagne bottle") 6. crop up, pop up, pop -- (appear suddenly or unexpectedly; "The farm popped into view as we turned the corner"; "He suddenly popped up out of nowhere") D. Rösner AuD I 2009/10... 16

ADT s im Alltag ADT Bedeutung von pop als engl. Verb (aus WordNet 2.0) (cont.): 7. pop -- (put or thrust suddenly and forcefully; "pop the pizza into the microwave oven"; "He popped the petit-four into his mouth") 8. pop -- (release suddenly; "pop the clutch") 9. pop -- (hit or strike; "He popped me on the head") 10. toss off, pop, bolt down, belt down, pour down, down, drink down, kill -- (drink down entirely; "He downed three martinis before dinner"; "She killed a bottle of brandy that night"; "They popped a few beer after work") 11. pop -- (take drugs, especially orally; "The man charged with murder popped a valium to calm his nerves") 12. pop -- (cause to burst with a lound, explosive sound; "The child popped the balloon") 13. pop -- (burst open with a sharp, explosive sound; "The balloon popped"; "This popcorn pops quickly in the microwave oven") D. Rösner AuD I 2009/10... 17

ADT s im Alltag ADT die Modul-Definition (s.a. [RL99], Ch. 5): module (,push,pop,top,empty,stackempty) where empty:: a stackempty:: a -> Bool push :: a -> a -> a pop :: a -> a top :: a -> a D. Rösner AuD I 2009/10... 19

ADT s im Alltag ADT mit einem Konstruktor data a = EmptyStk Stk a ( a) empty = EmptyStk stackempty EmptyStk = True stackempty _ = False D. Rösner AuD I 2009/10... 20

ADT s im Alltag ADT mit einem Konstruktor (cont.) push x s = Stk x s pop EmptyStk = error "pop from an empty stack" pop (Stk _ s) = s top EmptyStk = error "top from an empty stack" top (Stk x _) = x D. Rösner AuD I 2009/10... 21

ADT s im Alltag ADT Alternative durch Liste: newtype a = Stk [a] empty = Stk [] stackempty (Stk []) = True stackempty (Stk _ ) = False D. Rösner AuD I 2009/10... 22

ADT s im Alltag ADT Alternative durch Liste (cont.): push x (Stk xs) = Stk (x:xs) pop (Stk []) = error "pop from an empty stack" pop (Stk (_:xs)) = Stk xs top (Stk []) = error "top from an empty stack" top (Stk (x:_)) = x D. Rösner AuD I 2009/10... 23

ADT s im Alltag ADT Beispiel eine mit deriving gewonnene show-funktion würde die offenlegen daher Definition einer eigenen Darstellung für s für die mit Konstruktor: instance (Show a) => Show ( a) where showsprec p EmptyStk str = showchar - str showsprec p (Stk x s) str = shows x (showchar (shows s str)) D. Rösner AuD I 2009/10... 24

ADT s im Alltag ADT Beispiel Definition einer eigenen Darstellung für s für die mit Liste: instance (Show a) => Show ( a) where showsprec p (Stk []) str = showchar - str showsprec p (Stk (x:xs)) str = shows x (showchar (shows (Stk xs) str)) D. Rösner AuD I 2009/10... 25

ADT s im Alltag ADT... dt. Schlange (im Sinne von Warteschlange) im folgenden einige Beispiele aus dem Alltag D. Rösner AuD I 2009/10... 27

: Alltagsbeispiele s im Alltag ADT Quelle: http://www.istockphoto.com/ D. Rösner AuD I 2009/10... 28

: Alltagsbeispiele s im Alltag ADT Waiting queue in front of the Science Express Quelle: www.science-express.com/.../2008/02/amit5.jpg D. Rösner AuD I 2009/10... 29

: Alltagsbeispiele s im Alltag ADT Quelle: http://www.cartoonstock.com/newscartoons/cartoonists/kty/lowres/ktyn35l.jpg D. Rösner AuD I 2009/10... 30

ADT s im Alltag ADT abstrakter Datentyp Eine ist ähnlich wie ein eine homogene Sammlung von Objekten, auf denen zwei zentrale Operationen definiert sind: Definition enqueue x q füge x als neues letztes Element hinten (rear) an die q an und gib die veränderte zurück dequeue q entferne das aktuelle erste Element (front) aus der und gib die veränderte als Wert zurück; Fehler, falls leer s.a. [RL99], Ch. 5.3 D. Rösner AuD I 2009/10... 32

ADT s im Alltag ADT abstrakter Datentyp realisiert das FIFO-Prinzip: first-in, first-out weitere Definitionen: das erste Element einer q wird durch den Selektor front q geliefert (aber nicht aus der entfernt) mit dem Konstruktor empty wird eine leere kreiert das Prädikat queueempty prüft, ob eine noch Elemente enthält oder nicht manchmal kann auch noch mit size die Anzahl der Elemente in der erfragt werden s.a. [RL99], Ch. 5.3 bzw. [GT01], Ch. 4.2 D. Rösner AuD I 2009/10... 33

ADT s im Alltag ADT Beispiele für Verwendung von s: Behörden, Läden, Theater, aber auch Mensen, Prüfungsämer u.ä. bedienen ihre Kunden üblicherweise nach dem FIFO-Prinzip als Datenstruktur geeignet für Verwaltung aller Arten von Transaktionen nach diesem Prinzip z.b. Verwaltung eingehender (telefonischer) Anfragen bei einem Reservierungssystem oder sonstigen Call-Center s.a. [GT01], Ch. 4.2 D. Rösner AuD I 2009/10... 34

ADT s im Alltag ADT die Modul-Definition (s.a. [RL99], Ch. 5.3): module (,empty,queueempty, enqueue,dequeue,front) where empty :: a queueempty :: a -> Bool enqueue :: a -> a -> a dequeue :: a -> a front :: a -> a D. Rösner AuD I 2009/10... 36

ADT s im Alltag ADT durch Liste: newtype a deriving Show = Q [a] empty = Q [] queueempty (Q []) queueempty (Q _ ) = True = False D. Rösner AuD I 2009/10... 37

ADT s im Alltag ADT durch Liste (cont.): enqueue x (Q q) = Q (q ++ [x]) dequeue (Q (_:xs)) = Q xs dequeue (Q []) = error "dequeue: empty queue" front (Q (x:_)) = x front (Q []) = error "front: empty queue" D. Rösner AuD I 2009/10... 38

ADT s im Alltag ADT durch Liste (cont.): Nachteil dieser Aufwand für enqueue ist O(n) denn:......... alle anderen Operationen haben konstanten Aufwand (O(1)) D. Rösner AuD I 2009/10... 39

ADT s im Alltag ADT Alternative durch ein Paar von Listen: Idee: erste Liste repräsentiert den Anfangsteil der, zweite den hinteren Teil in umgedrehter Ordnung an den hinteren Teil kann dann mit konstantem Aufwand angefügt werden wird der Anfangsteil der leer, dann wird der hintere Teil (einmal) umgedreht und zum Anfangsteil gemacht D. Rösner AuD I 2009/10... 40

ADT s im Alltag ADT wird für reverse eine mit linearem Aufwand verwendet, dann ist der durchschnittliche Aufwand über eine Sequenz von -Operationen O(1), im schlechtesten Fall kann er aber O(n) betragen (vgl. [RL99], Ch. 5.3) D. Rösner AuD I 2009/10... 41

ADT s im Alltag ADT Alternative durch ein Paar von Listen (cont.): newtype a = Q ([a],[a]) enqueue x (Q ([],[])) = Q ([x],[]) enqueue y (Q (xs,ys)) = Q (xs,y:ys) dequeue (Q ([],[])) = error "dequeue:empty queue" dequeue (Q ([],ys)) = Q (tail(reverse ys), []) dequeue (Q (x:xs,ys)) = Q (xs,ys) D. Rösner AuD I 2009/10... 42

ADT s im Alltag ADT Alternative durch ein Paar von Listen (cont.): queueempty (Q ([],[])) = True queueempty _ = False empty = Q ([],[]) front (Q ([],[])) = error "front:empty queue" front (Q ([],ys)) = last ys front (Q (x:xs,ys)) = x D. Rösner AuD I 2009/10... 43

ADT s im Alltag ADT Alternative durch ein Paar von Listen (cont.): Definition der gedruckten Darstellung in Analogie zu der bei der Listenimplementation durch deriving abgeleiteten instance (Show a) => Show ( a) where showsprec p (Q (front, rear)) str = showstring "Q " (showlist (front ++ reverse rear) str) D. Rösner AuD I 2009/10... 44

Literatur: I s im Alltag ADT Michael T. Goodrich and Roberto Tamassia. Data Structures and Algorithms in Java. John Wiley & Sons, New York, 2001. ISBN 0-471-38367-8; 2nd edition. Fethi Rabhi and Guy Lapalme. Algorithms A Functional Programming Approach. Pearson Education Ltd., Essex, 1999. 2nd edition, ISBN 0-201-59604-0. D. Rösner AuD I 2009/10... 45