Sortieren. Ziel: Bringe Folge von Objekten in eine bestimmte Reihenfolge. Beispiel



Ähnliche Dokumente
Sortieren durch Einfügen (Insertion Sort) fügt die restlichen Elemente nach und nach in die bereits sortierte Liste der abgearbeiteten Zahlen.

Grundlagen der Programmierung 2. Sortierverfahren

Grundlagen der Programmierung 2. Operationale Semantik

Informatik II Sortieren

Informatik II Sortieren

Prof. Dr. Margarita Esponda

(08 - Einfache Sortierverfahren)

Ströme als unendliche Listen in Haskell

Die Korrektheit von Mergesort

Einführung in die funktionale Programmierung

Funktionale Programmierung mit Haskell

JAVA - Suchen - Sortieren

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 9. Sortieren

4. Sortieren 4.1 Vorbemerkungen

3.2. Divide-and-Conquer-Methoden

INFORMATIK FÜR BIOLOGEN

Grundlagen der Programmierung 2. Unendliche Listen und Ströme(B)

Programmieren in Haskell Programmiermethodik

Abschnitt 19: Sortierverfahren

Übung Algorithmen I

Vorkurs Mathematik für Informatiker

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

Übung Algorithmen und Datenstrukturen

Programmieren I. Kapitel 7. Sortieren und Suchen

Sortieren durch Mischen (Mergesort; John von Neumann 1945)

Algorithmen und Datenstrukturen I

Algorithmen und Datenstrukturen

Grundlegende Sortieralgorithmen

Grundlegende Sortieralgorithmen

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Mergesort. Inhaltsverzeichnis. Veranschaulichung der Funktionsweise. aus Wikipedia, der freien Enzyklopädie

Kapitel 3: Sortierverfahren Gliederung

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Suchen und Sortieren

2 Sortieren. Beispiel: Es seien n = 8 und a = i : a i : ϕ(i) : a ϕ(i) :

A3.1 Sortieralgorithmen

Programmiertechnik II

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Agenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.

Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

Prof. Dr. Margarita Esponda

Grundlegende Sortieralgorithmen

Prof. Dr. Margarita Esponda

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

Listenverarbeitung in Python

Datenstrukturen und Algorithmen

WS 2011/2012. RobertGiegerich. November 12, 2013

Sortieren & Co. KIT Institut für Theoretische Informatik

A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.2 Quicksort. A7.

Heapsort. 1. Erstelle aus dem gegebenen Array einen Max-Heap (DownHeap) 2. Tausche erstes und letztes Element des Arrays

Algorithmen und Datenstrukturen

WS 2011/2012. RobertGiegerich. November 12, 2013

Programmierung 1 - Repetitorium

Übung: Algorithmen und Datenstrukturen SS 2007

Stackmaschine; Speicheradressierung

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Präsenzübung Datenstrukturen und Algorithmen SS 2014

Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen:

Algorithmen und Datenstrukturen 1

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur -

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

Datenstrukturen und Algorithmen (SS 2013)

Einführung in die Informatik Algorithmen und Datenstrukturen. Thema 17 Sortieren

Algorithmen und Datenstrukturen 1

13. Bäume: effektives Suchen und Sortieren

1. Teilklausur. Name:... Vorname:... Matrikel-Nummer:...

Heapsort. Erstellung eines Heaps

Heapsort. 1. Erstelle aus dem gegebenen Array einen Heap (DownHeap) 2. Tausche erstes und letztes Element des Arrays

Ströme als unendliche Listen in Haskell

13. Bäume: effektives Suchen und Sortieren

Informatik II, SS 2018

Algorithmen und Programmieren II

Algorithmen und Datenstrukturen SS09. Foliensatz 15. Michael Brinkmeier. Technische Universität Ilmenau Institut für Theoretische Informatik

Algorithmen und Datenstrukturen II

Paradigmen der Programmierung

Operationale Semantik: Haskell

Klausur - Informatik I SS 05. Note: Bearbeitungszeit 120 Minuten Keine Hilfsmittel

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Datenstrukturen Kurzanleitung

T (n) = max. g(x)=n t(n) S(n) = max. g(x)=n s(n)

Inhaltsübersicht. Vorwort 15. Vorwort zur deutschen Ausgabe 22. Kapitel 1 Elemente der Programmierung 25. Kapitel 2 Funktionen und Module 203

Inhaltsverzeichnis. Teil 1 Grundlagen 23

Inhaltsverzeichnis. Teil 1 Grundlagen 21. Teil 2 Datenstrukturen 85

Geheimnisprinzip: (information hiding principle, Parnas 1972)

6 Sortieren. Speziell ist zu beachten, dass viele Sortier-Algorithmen auf Array-Strukturen zwar sehr schnell aber nicht stabil sind.

14. Sortieren II Heapsort. Heapsort. [Max-]Heap 7. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

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

damit hätten wir nach Ende der Schleife: "a[0 n-1] enthält nur Elemente aus a[0 n-1], aber in sortierter Reihenfolge".

Heapsort, Quicksort, Mergesort. 8. Sortieren II

Datenstrukturen und Algorithmen (SS 2013) Prof. Dr. Leif Kobbelt Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer

Zahlen in Haskell Kapitel 3

Grundlagen: Algorithmen und Datenstrukturen

Transkript:

Sortieren Ziel: Bringe Folge von Objekten in eine bestimmte Reihenfolge Beispiel ( Müller, Darmstadt, 456) ( Meier, Wiesbaden,123 ) ( Schmitt, Frankfurt, 789) ( Adam, Hamburg, 999) Aufsteigend nach Namen sortiert: ( Adam, Hamburg, 999) ( Meier, Wiesbaden, 456) ( Müller, Darmstadt, 123) ( Schmitt, Frankfurt, 789) P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 1

Sortieren, Beispiel (2) Aufsteigend nach Kundennummer sortiert: ( Müller, Darmstadt, 123) ( Meier, Wiesbaden, 456) ( Schmitt, Frankfurt, 789) ( Adam, Hamburg, 999) P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 2

Sortieren Eingabe: Liste von Objekten Vergleichsoperator auf den Objekten Ausgabe: Liste der Objekte mit i.a. anderer Reihenfolge [a 1,... a n ] so dass i j a i a j Annahme: Ordnung ist transitiv, reflexiv, total, aber nicht notwendig antisymmetrisch total : es gilt a b oder b a. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 3

Sortiermethoden Annahme im Folgenden: Liste von Zahlen. Wir betrachten: Insert-Sort Bubble-Sort Merge-Sort Quick-Sort Sortieren durch Einfügen Sortieren durch binäres Vertauschen Sortieren durch rekursives Mischen Sortieren durch rekursive Zerlegung und Vergleichen Es gibt noch weitere Sortierverfahren P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 4

Sortieren Sortierprogramme in Haskell für Listen Demonstration der Prinzipien Abschätzung der Komplexität Sortierprogramme in Python für Array Prinzipien der destruktiven Abänderung In-place-Algorithmen P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 5

Sortieren durch Einfügen (Insert-Sort) Idee: geordnetes Einfügen der Elemente in die bereits sortierte Liste Sortiere: 5,3,99,1,2,7 sortierte Liste restliche Elemente 5 3,99,1,2,7 3,5 99,1,2,7 3,5, 99 1,2,7 1,3,5, 99 2,7 1,2,3,5, 99 7 1,2,3,5, 7, 99 P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 6

Insert-Sort: Haskell-Programm Sortieren durch Einfügen: sorteinfuegen xs = sorteinfuegenr xs [] sorteinfuegenr: unsortierter Rest, sortierter Anteil sorteinfuegenr [] ys = ys sorteinfuegenr (x:xs) [] = sorteinfuegenr xs [x] sorteinfuegenr (x:xs) ys = sorteinfuegenr xs (sorteinfuegenr1 x ys) sorteinfuegenr1 x [] = [x] sorteinfuegenr1 x (y:ys) = if x <= y then x:y:ys else y : (sorteinfuegenr1 x ys) P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 7

Sortieren mit Blasensort (Bubble-Sort) Vertauschung von benachbarten Elementen; falls notwendig: Mehrfaches Durcharbeiten der Liste 5 3 99 1 2 7 5 3 99 1 2 7 5 3 99 1 2 7 5 3 1 99 2 7 5 1 3 99 2 7 1 5 3 99 2 7 1 5 3 99 2 7 1 5 3 99 2 7 1 5 3 2 99 7 1 5 2 3 99 7 1 2 5 3 99 7... P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 8

Bubble-Sort: Haskell-Programm Sortieren durch Vertauschen von benachbarten Feldern bubblesort [] = [] bubblesort [x] = [x] bubblesort xs = let y:resty = bubblesort1 xs in y: (bubblesort resty) bubblesort1 [x] = [x] bubblesort1 (x:rest) = let (y:resty) = bubblesort1 rest in if x > y then y:x: resty else (x: y:resty) P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 9

Bubble-Sort mit Optimierung: Haskell-Programm bubblesorto [] = [] bubblesorto [x] = [x] bubblesorto xs = let (aenderung,y:resty) = bubblesorto1 xs in if aenderung then y: (bubblesorto resty) else xs bubblesorto1 [x] = (False,[x]) bubblesorto1 (x:rest) = let (aenderung, y:resty) = bubblesorto1 rest in if x > y then (True,y:x: resty) else (aenderung,x: y:resty) P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 10

Quicksort: Rekursives Zerlegen Idee Pivot = erstes Element der Liste: Zerlege Liste in Teillisten von Elemente, die bzgl Pivot: kleinere, grössere und gleiche Elemente enthalten Sortiere diese rekursiv (Quicksort) Füge sie zusammen. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 11

Quicksort: Beispiel Sortiere: 5,3,99,1,2,7 Pivot 5 kleinere/größere Elte 3,1,2 99,7 Pivots 1 99 kleinere/größere Elte 2,3 7 - Pivots 2 kleinere/größere Elte 3 Zusammensetzen: 1,2,3,5,7,99 P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 12

Sortieren mit Quicksort: Haskell-Programm quicks [] = [] quicks [x] = [x] quicks [x,y] = if x <= y then [x,y] else [y,x] quicks (x:xs) = let (llt,lge) = splitlist x xs in (quicks llt) ++ (x: (quicks lge)) splitlist x y = splitlistr x y [] [] splitlistr x [] llt lge = (llt,lge) splitlistr x (y:ys) llt lge = if y < x then splitlistr x ys (y: llt) lge else splitlistr x ys llt (y:lge) P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 13

Mergesort: Sortieren durch Mischen Rekursives Verfahren: Zerlege Liste in erste und zweite Hälfte sortiere beide rekursiv zusammenmischen Sortiere: 5,3,99,1,2,7 Zerlegen 5,3,99 1,2,7 Zerlegen 5 3,99 1 2,7......... 5 3,99 1 2,7 Merge 3,5,99 1,2,7 Merge 1,2,3,5,7,99 P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 14

Sortieren mittels Mischen: Haskell-Programm mischsort xs = mergesort (length xs) xs mergesort _ [] = [] mergesort _ [x] = [x] mergesort _ [x,y] = if x <= y then [x,y] else [y,x] mergesort len xs = let lenh = len div 2 in mische (mergesort lenh (take lenh xs)) (mergesort (len -lenh) (drop lenh xs)) mische [] ys = ys mische xs [] = xs mische (x:xs) (y:ys) = if x <= y then x: (mische xs (y:ys)) else y: (mische (x:xs) ys) P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 15

Sortieren: Mindestanzahl der Vergleiche Satz Sortieren einer Liste von n Zahlen durch Vergleichsoperationen benötigt im schlechtesten Fall mindestens n log 2 (n) Vergleiche. Argumentation: Ein Entscheidungsbaum-Programm zur Länge n sortiert eine Eingabeliste [a 1,..., a n ] der Länge n folgendermaßen: An den Verzweigungen wird die Frage gestellt: ist a i > a j? für bestimmte (feste) Indizes i, j, die Ausgabe am Ende ist die sortierte Permutation der Eingabeliste. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 16

Sortieren: Mindestanzahl der Vergleiche Es gibt immer eine Eingabeliste, so dass n log 2 (n) Vergleiche zum Sortieren nötig sind Begründung: Der Entscheidungsbaum hat n! Blätter, da jede Eingabereihenfolge möglich ist. Die Tiefe d des Baumes > log 2 (n!). Offenbar: n! 1... 1 } {{ } n/2 n/2... n/2 } {{ } n/2 = (n/2) (n/2). log 2 (n!) > log((n/2) (n/2) ) = 0.5 n llog(n/2) = 0.5 n (log 2 (n) 1). D.h. Ω(n llog 2 (n)). P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 17

Sortieren: Mindestanzahl der Vergleiche(3) Abschätzung kann leicht verbessert werden mittels der Stirlingformel für n!. Aber: Man konnte noch nicht allgemein nachweisen, dass dies auch eine untere Schranke ist, wenn man alle Algorithmen zulässt. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 18

Eigenschaften der Sortierverfahren Zeitbedarf im schlechtesten Fall / besten Fall / im Mittel Stabilität Ein Sortierverfahren ist stabil, wenn die Reihenfolge von Elementen mit gleichem Sortierschlüssel erhalten bleibt. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 19

Eigenschaften des Insert-Sort Gut für kleinere Listen, oder fast sortierte Listen im schlechtesten Fall: O(n 2 ): Für Listen der Länge n höchstens: 1 + 2 +... + (n 1) Vergleiche im besten Fall: O(n) für vorsortierte Listen. Die Haskell-Implementierung ist stabil. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 20

Insert-Sort: Variante Folgende Variante des Insert-sort ist stabil und hat Komplexität O(n) für vorsortierte Listen: sorteinfuegeno xs = reverse (sorteinfuegenor xs []) sorteinfuegenor [] ys = ys sorteinfuegenor (x:xs) [] = sorteinfuegenor xs [x] sorteinfuegenor (x:xs) ys = sorteinfuegenor xs (sorteinfuegenor1 x ys) sorteinfuegenor1 x [] = [x] sorteinfuegenor1 x (y:ys) = if x >= y then x:y:ys else y : (sorteinfuegenor1 x ys) P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 21

Eigenschaften des Bubble-Sort Gut: wenn Elemente schon in der Nähe ihres endgültigen Platzes sind. im schlechtesten Fall: (n 1) + (n 2) +... + 1 = O(n 2 ) im besten Fall: O(n), wenn Liste schon sortiert Stabil, wenn gleiche Elemente nicht vertauscht werden. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 22

Eigenschaften des Quicksort im schlechtesten Fall: O(n 2 ), wenn Liste bereits sortiert im besten Fall: O(n log(n)) Im Mittel: O(n log(n)) Gut: wenn Listen groß und Werte zufällig verteilt. Beim Experimentieren in Haskell mit zufällig erzeugten Listen ist es das beste Verfahren Haskell-Implementierung ist stabil, P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 23

Eigenschaften des Mischsort im schlechtesten Fall: O(n log(n)). Im besten Fall: auch O(n log(n)). Gut: Wenn keine Komplexitäts-Ausrutscher vorkommen sollen Experiment: in Haskell ist es nur dann besser als Quicksort, wenn Teile der Listen bereits sortiert sind. Stabil, wenn der Merge Stabilität beachtet: D.h. wenn gleiche Elemente aus der linken Liste vor denen aus der rechten Liste einsortiert werden. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 24

Genauere Begründung Komplexität des Mischsort Behauptung: Mischsort hat einen Zeitbedarf von O(n log(n)) Abschätzung von red ms : red ms (n) = c + red mische (n) + 2 red ms (n/2) = c + n + 2 red ms (n/2) c + n + 2 (c + n/2) + 4 red ms (n/4) = (c + n) + (2c + n) + (4c + n) + (8c + n) +... Tiefe der Rekursionen: log 2 (n) c n + n log 2 (n) + 2 log 2 (n). d.h. der Mischsort ist O(n log(n)). P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 25

Sortierprogramme in imperativen Programmiersprachen, Speicherverwaltung Zusätzlicher Aspekt: effiziente Speicherverwaltung Falls Sortierung innerhalb des Eingabe-Arrays: In-Place- Verfahren. Insertion-Sort, Bubble-Sort, Quick-Sort: In-Place-Verfahren Merge-Sort: Es gibt ein effizientes In-Place-Merge-Verfahren, der Algorithmus ist nicht so offensichtlich zu finden. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 26

Bubblesort in Python, in-place def Bubblesort(soArray): laenge = len(soarray) for i in range(0,laenge-1): aenderung = 0 for j in range(0,laenge-1-i): if soarray[j] > soarray[j+1]: vertausche(soarray,j, j+1) aenderung = 1 if aenderung == 0: break P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 27

Insertsort in Python, in-place def Insertsort(soArray): laenge = len(soarray) for i in range(1,laenge): for j in range(i,0,-1): if soarray[j] < soarray[j-1]: vertausche(soarray,j, j-1) else: break P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 28

Quicksort in Python, in-place def Quicksort(soArray): return Quicksortr(soArray,0,len(soArray)-1) def Quicksortr(soArray,iLo,iHi): if (ihi-ilo == 1): ##Optimierung if_groesser_then_tausch(soarray,ilo,ihi); return soarray; Lo = ilo; Hi = ihi; Mid = (Lo + Hi) / 2; P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 29

Quicksort in Python, in-place, (2) while (Lo <= Hi): while (iskleiner(soarray,lo,mid)): Lo = Lo+1 while (isgroesser(soarray,hi,mid)): Hi = Hi -1; if (Lo <= Hi): if (Mid == Hi): Mid = Lo; elif (Mid == Lo): Mid = Hi; if (Lo!= Hi): vertausche(soarray,lo, Hi); Lo = Lo +1; Hi = Hi-1; if (Hi > ilo): Quicksortr(soArray,iLo, Hi); if (Lo < ihi): Quicksortr(soArray,Lo, ihi); return soarray P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 30

Quicksort in Python, in-place, (3) def isgroesser(soarray,x,y): def iskleiner(soarray,x,y): return (soarray[x] > soarray[y]) return (soarray[x] < soarray[y]) def vertausche(soarray,ind1, ind2): x = soarray[ind1]; soarray[ind1] = soarray[ind2]; soarray[ind2] = x; def if_groesser_then_tausch(soarray,ind1,ind2): if isgroesser(soarray,ind1,ind2): vertausche(soarray,ind1, ind2); P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 31

Eigenschaften der in-place Sortierverfahren Imperative in-place Sortierverfahren: Isert-Sort ist stabil Bubble-Sort ist stabil imperativer Quicksort ist nicht stabil effizienter Merge-Sort ist stabil P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 32

Datenabstraktion, Abstrakte Daten-Typen P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 33

Datenabstraktion Strukturierungsmethode für Programme und Implementierungen unabhängig von einer Programmiersprache verwendbar Prinzip: Trennung von interner Implementierung der Daten, interner Zugriffsfunktionen externem Zugriff P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 34

Was man vermeiden sollte Gilt auch für Module Durchgriff auf die Implementerung Schein-Argumente: Effizienz, Bequemlichkeit kann langfristig zu Wartungs-Problemen führen, z.b. bei Änderung der internen Implementierung des Moduls Verwenden des durch die Implementierung bedingten, aber nicht garantierten, Verhaltens Z.B. bei Implementierung von Mengen: Reihenfolge der Elemente nicht ausnutzen P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 35

Datenabstraktion Funktionen auf einem abstrakten Datentyp: Konstruktoren bzw. Eingabe der Objekte Fallunterscheidung nach den Konstruktoren und Selektoren; bzw. Frage nach der logischen Struktur der Datenobjekte, bzw. Ausgabe der Objekte, interne Service-Funktionen. Z.B. Operatoren auf Objekten, Gleichheitstests, usw. externe Service-Funktionen. Z.B. die Funktion map auf Listen. Datenkonversionen P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 36

Datenabstraktion Wesentliche Aspekte, analog zu Modulen, sind: Die Daten sind über klar definierte Zugriffsfunktionen verfügbar Die Algorithmen verwenden nur diese Zugriffsfunktionen Die Daten haben eine Semantik, die von der Implementierung respektiert wird. Die Implementierung der Daten und Zugriffe ist nicht sichtbar (Kapselung, Information hiding). Schnittstellen P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 37

Beispiel: Listen Konstruktoren: Selektoren: cons, nil head, tail Beispiel für Gleichheitsaxiome: head(cons s t) = s tail(cons s t) = t nil (cons s t) P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 38

Haskell-Listen Haskell-Listen erfüllen diese Axiome: Definitionen: head (x:y) = x tail (x:y) = y cons x y = x:y nil = [] Nachrechnen ergibt: [] s : t. head (cons s t ) reduziert zu s. tail (cons s t) reduziert zu t. head nil führt zu einem Fehler (d.h. undefiniert). P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 39

Datentyp natürliche Zahl Konstruktoren Null, S S(S(S(Null))) der Zahl: 3. alle arithmetischen Operatoren sind implementierbar Zahlen in Programmiersprachen: binäre Strings Gleiche Funktionalität, aber effizienter P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 40

Datentyp ganze Zahlen Benutzt Datentyp der natürlichen Zahlen Darstellung als Paar (s, n) Vorzeichen positive Zahl Diese Darstellung hat eine Doppeldeutigkeit (+, 0) oder (, 0) sind zwei Darstellungen der 0. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 41

Der Datentyp Rationale Zahlen Funktionen zum Erzeugen und Anzeigen arithmetische Operationen:, /, +, Vergleiche: <, Konversionen Int Rational Axiom: beim Drucken erscheint stets die gekürzte Darstellung Verschiedene interne Darstellungen sind möglich: man hat freie Wahl, ob und wann (intern) gekürzt wird. Datekonversionen: Integer Rational Rational Integer P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 42

Gleitkommazahlen Funktionen: Erzeugen, Anzeigen, mathematische Operationen:, /, +, Vergleiche... Erfüllen nicht die mathematischen Axiome für reelle Zahlen sinnvoll wäre: Axiome, die Näherung an reelle Zahlen beschreiben. Standardisierungen und Normierungen: auf der Basis der internen Darstellung für Rundungen und Fehlermeldungen bei Ausnahmen P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 43

Der abstrakte Datentyp Menge Endliche Mengen mit Elementen von gleichem Typ folgende Funktionalität ist sinnvoll: Erzeugen von Mengen, gegeben endliche Aufzählung der Elemente Test auf Enthaltensein eines Elementes in einer Menge Drucken einer Menge Kardinalität einer Menge Bildung von Schnitt, Vereinigung, Differenz, Potenzmenge Test auf Gleichheit von Mengen Notwendig: Gleichheitstest für Elemente. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 44

Datentyp Menge : Beispiel Eingabe: {(1, 2), (2, 4)} = {(1, 2)} falls rationale Zahlen gemeint sind. Aber: = {(1, 2), (2, 4)}, falls Paare komplexe Zahlen darstellen. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 45

Der abstrakte Datentyp Multimenge Endliche Multimengen mit Elementen von gleichem Typ, wobei Elemente mehrfach vorkommen dürfen. Multimengen sind wie Listen, bei denen man von der Reihenfolge der Elemente absieht. Notwendige Funktionalitäten analog wie bei Mengen. Beispielsweise gilt für Multimengen {1, 1, 1, 2, 2} {1, 1, 2, 2, 2} = {1, 1, 2, 2} und {1, 1, 1, 2, 2} {1, 1, 2, 2, 2} = {1, 1, 1, 1, 1, 2, 2, 2, 2, 2}. Implementierung von Multimengen: auf der Basis von Listen. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 46

Datentyp Multi-Menge : Beispiel Notwendig auch für Multimengen: Gleichheitstest für Elemente. Beispiel-Eingabe: {(1, 2), (2, 4)} = {(1, 2), (1, 2)} falls Paare rationale Zahlen darstellen. Aber: = {(1, 2), (2, 4)}, mit (1, 2) (2, 4) falls Paare komplexe Zahlen darstellen. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 47

Axiome für Multimenge Konstruktoren und Funktionen: cons, null, anzahl, einfuegen,... Typ wäre (Multimenge a) Zwei exemplarische Axiome: anzahl null = 0 s :: a, t :: Multimenge a : anzahl(einfuegen s t) = (anzahl t) + 1 Implementierung mit anzahl = length, einfuegen = cons Diese ist korrekt, denn: anzahl null length [] 0 anzahl (einfuegen s t) length (cons s t) (length t) + 1. P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 48

Mengen: Implementierung endliche Mengen: Implementierungsmöglichkeiten: Listen von Elementen sortierte Listen von Elementen Such-Bäume Multimengen von Elementen Aber: problematisch: Datentyp unendliche Liste oder unendliche Menge nur eingeschränkt implementierbar nicht alle unendlichen Mengen sind endlich darstellbar. Gleichheitstest von unendlichen Mengen P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 49

Abstraktionsbarrieren Abstraktionsbarrieren für die Beispiele Mengen / Multimengen / Listen sind: Mengen: Schnitt,... Schnittstellenfunktionen Multimengen: Schnitt, Vereinigung, Gleichheit,... Schnittstellenfunktionen Listen. append, element,... P raktische Informatik 1, W S 2004/05, F olien Sortieren 1, (14. Januar2005) Seite 50

Die Barrieren (Schnittstellen) erlauben sauberes zverlässiges Programmieren Die Effizienz kann durch Schnittstellen etwas verschlechtert werden.