Sortieren

Werbung
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 Inf ormatik
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 Inf ormatik
1, W S
2004/05, F olien Sortieren−1,
(14. Januar2005)
Seite 2
Sortieren
Eingabe:
Ausgabe:
Liste von Objekten
Vergleichsoperator auf den Objekten
Liste der Objekte mit i.a. anderer Reihenfolge [a1, . . . an]
so dass i ≤ j ⇒ ai ≤ aj
Annahme:
Ordnung ist transitiv, reflexiv, total,
aber nicht notwendig antisymmetrisch
total :⇔ es gilt a ≤ b oder b ≤ a.
P raktische Inf ormatik
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
Sortieren
Sortieren
Sortieren
durch
durch
durch
durch
Einfügen
binäres Vertauschen
rekursives Mischen
rekursive Zerlegung und Vergleichen
Es gibt noch weitere Sortierverfahren
P raktische Inf ormatik
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 Inf ormatik
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
5
3,5
3,5, 99
1,3,5, 99
1,2,3,5, 99
1,2,3,5, 7, 99
P raktische Inf ormatik
1, W S
restliche Elemente
3,99,1,2,7
99,1,2,7
1,2,7
2,7
7
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 Inf ormatik
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
5 3
5 3
5 3
5 1
1 5
1 5
1 5
1 5
1 5
1 2
...
99
99
99
1
3
3
3
3
3
2
5
P raktische Inf ormatik
1
1
1
99
99
99
99
99
2
3
3
1, W S
2
2
2
2
2
2
2
2
99
99
99
7
7
7
7
7
7
7
7
7
7
7
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
1, W S
2004/05, F olien Sortieren−1,
(14. Januar2005)
Seite 11
Quicksort: Beispiel
Sortiere: 5,3,99,1,2,7
Pivot
kleinere/größere Elte
Pivots
kleinere/größere Elte
Pivots
kleinere/größere Elte
Zusammensetzen:
P raktische Inf ormatik
1, W S
2004/05, F olien Sortieren−1,
5
3,1,2
99,7
1
|
99
2,3 | 7
2
|
3 |
1,2,3,5,7,99
(14. Januar2005)
Seite 12
Sortieren mit Quicksort: Haskell-Programm
quicks
quicks
quicks
quicks
[]
[x]
[x,y]
(x:xs)
=
=
=
=
[]
[x]
if x <= y then [x,y] else [y,x]
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 Inf ormatik
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
5,3,99 |
1,2,7
5 3,99 | 1 2,7
...
|
...
5 3,99 | 1 2,7
3,5,99 |
1,2,7
1,2,3,5,7,99
Zerlegen
Zerlegen
...
Merge
Merge
P raktische Inf ormatik
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 Inf ormatik
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 ∗ log2(n) Vergleiche.
Argumentation:
Ein Entscheidungsbaum-Programm zur Länge n sortiert eine Eingabeliste [a1, . . . , an] der Länge n folgendermaßen:
An den Verzweigungen wird die Frage gestellt: ist ai > aj ? für bestimmte (feste) Indizes i, j,
die Ausgabe am Ende ist die sortierte Permutation der Eingabeliste.
P raktische Inf ormatik
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 ∗ log2(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 > log2(n!).
Offenbar: n! ≥ 1
. . ∗ 1} ∗ n/2 ∗ . . . ∗ n/2 = (n/2)(n/2).
| ∗ .{z
n/2
|
{z
n/2
}
log2(n!) > log((n/2)(n/2)) = 0.5 ∗ n ∗ llog(n/2) = 0.5 ∗ n ∗ (log2(n) − 1).
D.h. Ω(n ∗ llog2(n)).
P raktische Inf ormatik
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 Inf ormatik
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 Inf ormatik
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(n2):
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 Inf ormatik
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 Inf ormatik
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(n2)
im besten Fall: O(n), wenn Liste schon sortiert
Stabil, wenn gleiche Elemente nicht vertauscht werden.
P raktische Inf ormatik
1, W S
2004/05, F olien Sortieren−1,
(14. Januar2005)
Seite 22
Eigenschaften des Quicksort
im schlechtesten Fall: O(n2), 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 Inf ormatik
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 Inf ormatik
1, W S
2004/05, F olien Sortieren−1,
(14. Januar2005)
Seite 24
Komplexität des Mischsort
Genauere Begründung
Behauptung: Mischsort hat einen Zeitbedarf von O(n ∗ log(n))
Abschätzung von redms:
redms(n) = c + redmische(n) + 2 ∗ redms(n/2)
= c + n + 2 ∗ redms(n/2)
≤ c + n + 2 ∗ (c + n/2) + 4 ∗ redms(n/4)
= (c + n) + (2c + n) + (4c + n) + (8c + n) + . . .
Tiefe der Rekursionen: ≈ log2(n)
c ∗ n + n ∗ log2(n) + 2 ∗ log2(n).
d.h. der Mischsort ist O(n ∗ log(n)).
P raktische Inf ormatik
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
1, W S
2004/05, F olien Sortieren−1,
(14. Januar2005)
Seite 32
Datenabstraktion, Abstrakte Daten-Typen
P raktische Inf ormatik
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
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
6= (cons s t)
P raktische Inf ormatik
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)
tail (x:y)
cons x y
nil
=
=
=
=
x
y
x:y
[]
Nachrechnen ergibt:
[] 6= 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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
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 Inf ormatik
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) 6= (2, 4) falls Paare komplexe Zahlen darstellen.
P raktische Inf ormatik
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 Inf ormatik
1, W S
2004/05, F olien Sortieren−1,
(14. Januar2005)
Seite 48
Mengen: Implementierung
endliche Mengen:
Implementierungsmöglichkeiten:
Aber:
problematisch:
P raktische Inf ormatik
1, W S
Listen von Elementen
sortierte Listen von Elementen
Such-Bäume
Multimengen von Elementen
Datentyp “unendliche Liste“ oder “unendliche Menge“
nur eingeschränkt implementierbar
nicht alle unendlichen Mengen sind endlich darstellbar.
Gleichheitstest von unendlichen Mengen
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 Inf ormatik
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.
Zugehörige Unterlagen
Herunterladen