21. 4. 2011

Werbung
Was bisher geschah
I
Algorithmen
I
Spezifikation
I
asymptotische Laufzeit
I
rekursive Algorithmen
I
Divide and Conquer
I
Dynamische Programmierung
87
Entwurfsebenen
Mathematik:
Algorithmik:
Programmierung:
Funktion
↓
Algorithmus
↓
(Unter-)Programm
Abstrakter Datentyp
↓
Algebra
(Konkreter Datentyp)
↓
Datenstruktur
↓
Typ, Klasse
88
Motivation
Aufgabe: Verwaltung einer Menge ganzer Zahlen, so das festgestellt
werden kann, ob eine Zahl darin enthalten ist und Zahlen hinzugefügt
und entfernt werden können.
Spezifikation NSet:
I
I
N
Wertebereiche (Sorten): , Menge, Wahrheitswert (Bool)
Operationen: finden, hinzufügen, entfernen
Operationen mit Typdeklaration (Signatur)
N
N
contains :
Menge × →
add, remove : Menge × →
isempty :
Menge →
emptyset :
I
Bool
Menge
Bool
Menge
Bedeutung der Operationen
t falls x ∈ M
contains(M, x) =
f sonst
add(M, x)
=
M ∪ {x}
remove(M, x) = M \ {x}
= ∅
t falls M = ∅
isempty(M) =
f sonst
emptyset
89
Formale Spezifikation
Spezifikation NSet’:
N, Menge, Wahrheitswert
I
Wertebereiche (Sorten):
I
Operationen: finden, hinzufügen, entfernen
Operationen mit Typdeklaration (Signatur)
N
N
contains :
Menge × →
add, remove : Menge × →
isempty :
Menge →
emptyset :
I
Bool
Menge
Bool
Menge
formale Beschreibung der Bedeutung der Operationen, z.B.
N
∀s ∈ Menge∀n ∈ N
∀s ∈ Menge∀n ∈ N
∀s ∈ Menge∀m, n ∈ N
∀s ∈ Menge∀n ∈ N
∀n ∈
isempty((emptyset) = t
: contains(emptyset, n) = f
: contains(add(s, n), n) = t
: contains(remove(s, n), n) = f
: add(add(s, n), m) = add(add(s, m), n)
: add(add(s, n), n) = add(s, n)
...
90
Abstrakte und konkrete Datentypen
Datentyp:
Menge von Werten mit Operationen auf diesen Werten
I
einfache Datentypen, z.B. |int,bool, float, ...|
I
zusammengesetzte Datentypen, z.B. Listen, Klassen
Abstrakter Datentyp (ADT): (formale Spezifikation)
I Menge von Sorten
I mehrsortige Signatur ΣF
I Menge von Axiomen Φ
ADT = (funktionale) Signatur ΣF + Axiome Φ
Konkreter Datentyp: ΣF -Algebra A mit A ∈ Mod(Φ)
(Struktur mit geeigneten Funktionen, so dass alle
Axiome erfüllt sind)
91
Beispiel: Boolesche Algebra
Abstrakter Datentyp Boolesche Algebra:
I Sorten: B
I Signatur:
t:
f:
¬:
B→
∨: B×B →
∧: B×B →
I
B
B
B
B
B
Axiome:

∀a∀b : a ∧ b = b ∧ a, ∀a∀b : a ∨ b = b ∨ a,



∀a∀b∀c : a ∨ (b ∧ c) = (a ∨ b) ∧ (a ∨ c),
Φ=
∀a∀b∀c : a ∧ (b ∨ c) = (a ∧ b) ∨ (a ∧ c),



¬(t = f), ∀a∀b : ¬(¬a ∨ b) ∨ ¬(¬a ∨ ¬b) = a







Konkrete Datentypen, z.B.
I ({0, 1}, max, min, 1 − x, 0, 1)
I (2{a} , ∪, ∩, , ∅, {a})
92
Wiederholung: mehrsortige Strukturen
Modellierung von Strukturen mit
S = {Si | i ∈ I} von
I
verschiedenen Sorten (Mengen)
Elementen
I
Operationen
I
Eigenschaften und Zusammenhänge zwischen
Operationen
Beispiele:
I
Folgen, add, remove, append, insert, reverse
∀x : reverse(reverse(xs)) = xs
I
Mengen, insert, contains, empty
∀x∀xs : empty(insert(x, xs)) = false
I
Vektorraum, smult,sprod,+,0,0v
∀v : smult(0,v) = 0v
93
Mehrsortige Strukturen
hier nur funktionale Strukturen (Algebren)
I
Sorten
I
Signatur Σ = (ΣF , ∅) (keine Relationssymbole)
S
ΣF -Algebra A = ({AS | S ∈ }, J·KA ) mit
S
I
für jede Sorte S ∈ eine nichtleere Menge AS
(Träger, Universum der Sorte)
I
für jedes Funktionssymbol f : Si1 . . . Sin → Si
eine Funktion Jf KA : Ai1 × · · · × Ain → Ai
Modell für Menge Φ von Sätzen:
ΣF -Algebra A, welche alle Sätze aus Φ erfüllt
94
Repräsentation durch Datenstrukturen
Mengen typische Operationen:
I Test auf Leerheit
I Einfügen, Löschen von Elementen
I Suche nach Element
I Vereinigung, Durchschnitt, Differenz
Folgen (z.B. Listen, Texte), typische Operationen:
I Einfügen, Löschen von Elementen
I Suche nach Element
I spezielle Elemente suchen (Min, Max, Median)
I Sortieren
I Verketten, Spiegeln
Funktionen (z.B. Wörterbücher), typische Operationen:
I Einfügen, Löschen von Argument-Wert-Paaren
I Suche nach dem Wert zu einem Argument
Graphen typische Operationen:
I Einfügen, Löschen von Knoten und Kanten
I Suche nach Knoten
I Suche nach Pfaden (z.B. kürzeste)
I Suche nach Teilgraphen (z.B. Gerüst)
95
Beispiel ADT Folge
Ziel: Datentyp zur Verwaltung einer endlichen Folge
(Zuordnung f : {1, . . . , n} auf Elemente) mit Operationen zum
Einfügen, Löschen und Lesen des Elementes an einer bestimmten
Stelle.
ADT (Spezifikation):
I
Sorten: Bool, Nat, Element, Folge
I
Signatur:
nil :
Folge
cons :
Element × Folge → Folge
head :
Folge → Element
tail :
Folge → Folge
isempty :
Folge → Bool
size :
Folge → Nat
add :
Folge × Element → Folge
remove : Folge × Element → Folge
get :
Folge × Nat → Element
reverse :
Folge → Folge
concat :
Folge × Folge → Folge
I
Axiome ?
96
(Ein möglicher) konkreter Datentyp für Folgen
Sorten:
I
Bool: {0, 1},
I
Nat:
I
Element: {a, b, c},
I
Folge:
{(x1 , . . . , xn ) | n ∈
N,
N ∧ ∀i ∈ {1, . . . , n} : xi ∈ {a, b, c}}
isempty(x) =
t falls x = ()
f sonst
emptyseq = ()
size((x1 , . . . , xn )) = n
add((x1 , . . . , xn ), y , i) = (x1 , . . . , xi−1 , y , xi , . . . , xn )
remove((x1 , . . . , xn ), y , i) = (x1 , . . . , xi−1 , xi+1 , . . . , xn )
get((x1 , . . . , xn ), y , i) = xi
97
Beispiel ADT Wörterbuch (Dictionary)
Ziel: Datentyp zur Verwaltung einer Menge (von Aufgaben,
Studenten, . . . ) mit Operationen zum Einfügen und Entfernen von
Elementen und Tests auf Enthaltensein eines Elementes und
Leerheit der Menge.
ADT (Spezifikation):
I
Sorten: Bool, Element, Menge
I
Signatur:
isempty :
Menge →
emptyset :
add :
Menge × Element →
remove :
Menge × Element →
contains : Menge × Element →
I
Bool
Menge
Menge
Menge
Bool
Axiome (alle ∀-quantifiziert: ∀s ∈ Menge, ∀E ∈ Element):


 contains(add(s, e)) = t, contains(remove(s, e)) = f,

isempty(add(s, e)) = f, add(add(s, e), e0 ) = add(add(s, e0 ), e),
Φ=


add(add(s, e), e) = add(s, e), . . .
+ Axiome der Booleschen Algebra
98
Konkrete Datentypen für Wörterbücher
einige Möglichkeiten:
I ungeordnete Folge (Aufzählung aller Elemente)
I
I
I
I
I
geordnete Folge (sortierte Aufzählung aller Elemente)
I
I
I
I
I
add O(1)
remove O(n)
contains O(n)
isempty O(1)
add O(n)
remove O(n)
contains O(log n)
isempty O(1)
Bitvektor (charakteristische Funktion)
I
I
I
I
add O(1)
remove O(1)
contains O(1)
isempty O(n)
99
Datenstrukturen zur Verwaltung mehrerer Daten
derselben Art
I
lineare Strukturen (Folge, Liste, Queue, Stack)
I
hierarchische Strukturen (Bäume)
I
Relationen (Graphen)
100
Herunterladen