Chapter 1 - BFH-TI / Organisation

Werbung
Inhalt der Vorlesung
Daten
Daten
Literatur
Pierre Fierz
Pierre Fierz
Einleitung
Einleitung
Datentypen
Datentypen
Abgeleitete Typen
1
Daten
2
Algorithmen
3
Sortieralgorithmen
4
Suchalgorithmen
5
Graphen
6
Verarbeitung von Strings
7
Typen von Algorithmen
Abgeleitete Typen
Weitere
Datenstrukturen
• M.T. Goodrich and R. Tamassia. Algorithm Design. John
Wiley & Sons,Inc., New York, 2002. ISBN 0-471-38365-1.
Der Abstrakte
Datentyp (ADT)
• Aho, Hopcroft, and Ullman. The Design and Analysis of
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Computer Algorithms. Addison Wesley, Reading,
Massachusetts, 1974. ISBN 0-201-00029-6.
• Robert Sedgewick. Algorithms in Java. Addison Wesley,
2002. ISBN 978-0-2013-6120-9.7
1.1
Bewertung
1.2
Daten
Daten
Pierre Fierz
Pierre Fierz
Chapter 1
Einleitung
Einleitung
Daten
Datentypen
Datentypen
Abgeleitete Typen
• Prüfung während des Semesters
Dauer:
90 Minuten
Hilfsmittel: Skript, Slides und eigene Notizen
Gewicht:
25%
• Schlussprüfung
Dauer:
150 Minuten
Hilfsmittel: Skript, Slides und eigene Notizen
Gewicht:
75%
Abgeleitete Typen
Lecture Algorithmen & Datenstrukturen
29.08.2011
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Pierre Fierz
Berner Fachhochschule
Technik und Informatik
1.3
1.4
Contents
Daten
Daten
Outline
Pierre Fierz
Pierre Fierz
Einleitung
1 Einleitung
2 Datentypen
Einleitung
1 Einleitung
Datentypen
Datentypen
Abgeleitete Typen
Abgeleitete Typen
Weitere
Datenstrukturen
Weitere
Datenstrukturen
2 Datentypen
Der Abstrakte
Datentyp (ADT)
3 Abgeleitete Typen
3 Abgeleitete Typen
4 Weitere Datenstrukturen
4 Weitere Datenstrukturen
5 Der Abstrakte Datentyp (ADT)
5 Der Abstrakte Datentyp (ADT)
Der Abstrakte
Datentyp (ADT)
1.5
Einleitung
Daten
1.6
Daten
Einleitung 2
Pierre Fierz
• Der Digital-Computer wurde entwickelt, um komplexe und
aufwendige Berechnungen durchzuführen.
• Daher ist die Darstellung von Zahlen ideal.
• Berechnungen werden direkt von der Hardware
ausgeführt.
Pierre Fierz
Beispiel: Verschiedene Personendaten
Einleitung
Einleitung
Datentypen
Datentypen
• Als Beispiel vergleichen wir die Personaldaten in einer
Abgeleitete Typen
Arbeitgeberkartei und in einer Arztkartei.
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Aufbau der Arbeitgeberkartei
Name
Adresse
Funktion
Gehalt
Lohnentwicklung
usw.
• Bei vielen Applikationen steht aber das speichern von
Daten im Vordergrund.
• Wichtige Aufgabe der Informatik ist die Darstellung der
Daten
• Die Daten stellen eine Abstraktion der reallen Welt dar.
Aufbau der Arztkartei
Name
Adresse
Grösse
Gewicht
Krankengeschichte
usw.
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• Unwichtige Daten werden weggelassen
• Die Darstellung hängt von der Verwendung der Daten ab.
• Das Objekt “Person” wird abstrahiert.
1.7
1.8
Daten
Einleitung 3
Daten
Einleitung 4
Pierre Fierz
Pierre Fierz
• Wir wollen das Problem der Darstellung am Beispiel von
Zahlen betrachten
• Bei der Abbildung der Welt in ein Datenmodell sind zwei
Aspekte wichtig:
Einleitung
Einleitung
Datentypen
Beispiel: Technische Darstellung von Zahlen
Abgeleitete Typen
Abstraktion
Im technisch-wissenschaftlichen Bereich werden von Zahlen
folgende Eigenschaften verlangt:
Weitere
Datenstrukturen
• Wichtige Daten eines Objekts identifizieren
Der Abstrakte
Datentyp (ADT)
• Das Rechnen ist die Hauptoperation und muss möglichst
• Für die Applikation unwesentliche Daten weglassen
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
effizient sein.
• Abstraktion = Vereinfachung
• Es werden sehr grosse und auch sehr kleine Zahlen
benötigt. (Bereich ca. 10−40 bis 1040 )
Darstellung
• Im allgemeinen genügt eine Genauigkeit von 10 bis 16
• Wahl der Darstellung eines Objektes im Computer
signifikante Stellen zur Berechnung und Ausgabe der
Resultate.
• Schwierige Aufgabe.
• Hängt von den Operationen (Algorithmen), die auf dem
• Die Druckoperation ist viel seltener als die
Objekt ausgeführt werden ab.
Rechenoperationen.
Diese Überlegungen legt die floating point-Darstellung nahe,
die nachstehend erklärt ist.
1.9
Daten
Einleitung 5
1.10
Daten
Einleitung 6
Pierre Fierz
Pierre Fierz
Beispiel: Technische Darstellung von Zahlen 2
Vorzeichen
Exponent
Mantisse
Beispiel: Technische Darstellung von Zahlen 3
Einleitung
Datentypen
• Vorzeichen ist ein Bit 0 = positiv 1 = negativ
• Exponent (Basis 2) besteht aus 8 Bits (Zahl von 0 bis 255)
• Tatsächlicher Exponent E = Exponent − 127
Einleitung
Datentypen
• Wir wollen dies noch an einem Zahlenbeispiel
Abgeleitete Typen
veranschaulichen
Weitere
Datenstrukturen
Weitere
Datenstrukturen
• Wir möchten die Dezimalzahl −0.1 darstellen.
Der Abstrakte
Datentyp (ADT)
Abgeleitete Typen
Der Abstrakte
Datentyp (ADT)
• Das Vorzeichen ist also 1
• Ist der Exponent 0, so ist die Zahl 0.
• 0.1 dual ergibt 0.00011001100 . . .
• Mantisse besteht aus 23 bits und stellt einen
• Normalisiert ergibt es 1.1001100 · 2−4
normalisierten Dualbruch dar.
• Der Exponent ist also E = −4 + 127 = 123 binär
• Normalisiert bedeutet, dass die erste signifikante Stelle
01111011
vor dem Komma steht.
Vorzeichen
1
• Da die erste Stelle vor dem Komma immer 1 ist, wird sie in
der Darstellung weggelassen.
Exponent
01111011
Mantisse
10011001100110011001100
• Alles in einer Formel zusammengefasst:
zahl = Vorzeichen · (2(Exponent−127) · 1.Mantisse)
1.11
1.12
Einleitung 7
Daten
Daten
Einleitung 8
Pierre Fierz
Pierre Fierz
• Wir wollen nun eine weitere Möglichkeit für die Darstellung
Beispiel: Kommerzielle Darstellung von Zahlen 2
von Zahlen betrachten
Beispiel: Kommerzielle Darstellung von Zahlen
Einleitung
Einleitung
Datentypen
Datentypen
Abgeleitete Typen
Im kommerziellen Bereich werden Zahlen vor allem zur
Darstellung von Geldbeträgen verwendet.
• Mit den Zahlen wird wenig gerechnet (meistens
Additionen).
n − m Vorkommastellen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
m Nachkommastellen
Vorzeichen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• n und m sind vereinbarte Konstanten (z.B. 15 und 4)
• Der Dezimalpunkt steht somit immer an der gleichen Stelle
• Die Zahlen werden dezimal dargestellt je 4 Bit stellen eine
• Die Zahlen werden sehr oft gedruckt.
Dezimalstelle dar
• Der benötigte Bereich ist viel kleiner als im technischen
• Das Vorzeichen ist durch die letzten 4 Bits gegeben
Bereich.
• Als Beispiel stellen wir die Zahl 35.7310 dar.
• Die Anzahl Stellen nach dem Komma kann fix vereinbart
werden (z.B. 4 Stellen).
• Die Zahlen müssen sowohl beim Rechnen wie auch in der
0000
| {z } . . . 0011
| {z } 0101
| {z } 0111
| {z } 0011
| {z } 0001
| {z } 0000
| {z } 0000
| {z }
Ausgabe genau sein.
0
Diese Überlegungen legt die fix point-Darstellung nahe, die
nachfolgend erklärt ist.
3
5
7
3
1
0
+
1.13
Einleitung 9
Daten
1.14
Einleitung 10
Pierre Fierz
• Nun noch die Definition was wir unter Computer-Daten
verstehen wollen.
Definition
Computer-Daten sind Objekte mit den drei folgenden
Eigenschaften
1
2
3
Daten
Pierre Fierz
Einleitung
Einleitung
Beispiel: Computer-Daten
Datentypen
Abgeleitete Typen
Datentypen
Abgeleitete Typen
Datenobjekt: "Müller"
Bezeichnung: Familienname einer Person. Damit ist die
Bedeutung des angegebenen Objekts festgelegt.
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Bezeichnung
Die Bezeichnung trägt den semantischen Teil (Bedeutung)
des Objektes (siehe auch Datentypen).
Wertemenge
Die Wertemenge legt alle möglichen Werte fest, die ein
Objekt dieses Types annehmen kann. Die Wertemenge
bestimmt somit die Syntax (Form) eines Objektes.
Speicherplatz
Der Speicherplatz lokalisiert das Objekt im Speicher und
identifiziert dieses eindeutig.
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Wertemenge: Alle Folgen von maximal n alphabetischen
Zeichen. Das erste Zeichen muss ein grosser
Buchstabe sein. Damit ist die Form des Objektes
festgelegt.
Speicherplatz: Eine Adresse im Speicher, wo die gegebene
Zeichenfolge beginnt. Dadurch ist das Objekt
eindeutig identifiziert.
1.15
1.16
Einleitung 11
Daten
Outline
Pierre Fierz
Einleitung
Einleitung
1 Einleitung
Datentypen
Bemerkung: Syntax und Semantik
Daten
Pierre Fierz
Datentypen
Abgeleitete Typen
Abgeleitete Typen
Weitere
Datenstrukturen
Weitere
Datenstrukturen
2 Datentypen
Der Abstrakte
Datentyp (ADT)
In der Informatik wird die Semantik durch den Datentyp eines
Objektes gegeben. Die Syntax (Wertemenge) ist im Prinzip
durch die Anzahl reservierter Bits im Speicher gegeben.
Der Abstrakte
Datentyp (ADT)
3 Abgeleitete Typen
4 Weitere Datenstrukturen
5 Der Abstrakte Datentyp (ADT)
1.17
Definition: Datentyp
Daten
1.18
Definition: Datentyp 2
Pierre Fierz
Daten
Pierre Fierz
• In der Mathematik werden Objekte nach wichtigen
Eigenschaften geordnet man unterscheidet
•
•
•
•
•
einzelne Werte
Mengen von Werten
Funktionen
Mengen von Funktionen
usw.
Einleitung
Einleitung
Datentypen
• Wir wollen nun den Begriff Datentyp definieren
Abgeleitete Typen
Weitere
Datenstrukturen
Definition
Der Abstrakte
Datentyp (ADT)
Der Datentyp bestimmt eine Menge von Werten, welche die
Objekte dieses Typs annehmen können. Diese Menge
bezeichnet man als Wertemenge des Datentyps. Die Elemente
des Wertebereichs bezeichnet man auch als Konstanten des
Datentyps.
Der Datentyp bestimmt auch die Operatoren, welche auf die
Objekte der Wertemenge definiert sind und somit auf Objekte
dieses Typs angewandt werden können.
• In der Informatik werden noch mehr Objekte
unterschieden wie
•
•
•
•
•
•
Zahlen
Funktionen,
Personaldaten,
Wetterdaten,
Rechnungen
u.s.w.
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• Es ist noch wichtiger als in der Mathematik diese Objekte
zu ordnen
• Objekte werden in Datentypen unterteilt
1.19
1.20
Definition: Datentyp 3
Daten
Daten
Atomare Datentypen
Pierre Fierz
• Einige Beispiele für Datentypen:
• Ganze Zahlen (int) mit den Operatoren
+, −, ∗, /, ≤, == usw.
• Zeichenketten (strings) mit den Operatoren substring,
concatenate usw.
• Es ist auch möglich einen Datentyp zu definieren, indem
alle möglichen Werte aufgezählt werden
Pierre Fierz
Einleitung
Einleitung
Datentypen
Datentypen
• Atomare Datentypen sind solche, die in einer
Abgeleitete Typen
Programmiersprache schon definiert sind.
Weitere
Datenstrukturen
Weitere
Datenstrukturen
• Sie bilden die Basis des Typsystems der Sprache.
Der Abstrakte
Datentyp (ADT)
Abgeleitete Typen
Der Abstrakte
Datentyp (ADT)
• Durch Typkonstruktoren können aus den Atomaren Typen
weitere Typen erzeugt werden.
Beispiel: Enum-Typ
• Welche atomaren Typen zur Verfügung stehen, hängt von
In der Sprache Java etwa, können wir einen Farbentyp
folgendermassen deklarieren.
der gewählten Programmiersprache ab.
• Im Folgenden stellen wir einige wichtige atomare
Datentypen vor.
public Enum Farbe {ROT, BLAU, GELB, GRÜN};
• Mit dieser Definition ist auch der Vergleichsoperator
(equals) definiert.
1.21
Atomare Datentypen: Ganze Zahlen (INTEGER)
Daten
1.22
Daten
Atomare Datentypen: reelle Zahlen (REAL)
Pierre Fierz
Pierre Fierz
• Der Datentyp REAL ist ein endliches Modell der reellen
Zahlen R.
• Die Elemente dieses Typs werden auch Maschinenzahlen
Einleitung
M genannt.
• Jedes Element von REAL repräsentiert ein ganzes
(offenes) Intervall der reellen Zahlen.
• Dadurch wird die reelle Zahlenachse diskretisiert.
• Diese Tatsache hat für das Rechnen mit REAL Zahlen
wichtige Konsequenzen.
Datentypen
• Der Datentyp INTEGER umfasst ein um die Zahl Null
symmetrisches Intervall der ganzen Zahlen.
• In diesem Intervall sind die Zahlen genau darstellbar.
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• Die Operationen umfassen die üblichen arithmetischen
Operationen +, −, ∗, / wobei / die ganzzahlige Division
bezeichnet.
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Die REALs auf der reellen Zahlenachse
• Die Operationen sind bezüglich INTEGER nicht
abgeschlossen (overflow).
−max
0
Overflowbereich
+max
Overflowbereich
Underflowbereich
• Das Intervall der reellen Zahlen, das durch die REAL-Zahl
0 repräsentiert wird, heisst Underflow-Bereich
1.23
1.24
Daten
Atomare Datentypen: Endliche Arithmetik
Atomare Datentypen: Eigenschaften einer endliche
Arithmetik
Pierre Fierz
• Die Wertemenge von M ist eine Untermenge der reellen
• Wir haben schon gesehen, dass eine REAL-Zahl als
Einleitung
floatingpoint dargestellt werden
Einleitung
Zahlen.
Datentypen
(Exponent−127)
Zahl = Vorzeichen · (2
· 1.Mantisse)
endliche binäre Arithmetik.
Datentypen
M⊂R
Abgeleitete Typen
Abgeleitete Typen
• Jeder Zahl x ∈ R ist eindeutig ein x̃ ∈ M zugeordnet,
Weitere
Datenstrukturen
• Diese Darstellung der reellen Zahlen nennt man auch eine
Daten
Pierre Fierz
welches als Repräsentant von x bezeichnet wird.
Der Abstrakte
Datentyp (ADT)
• Jedes x̃ ∈ M repräsentiert alle Zahlen in einem Intervall
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
um x̃.
• Die Grösse der Mantisse bestimmt die maximale Anzahl
signifikanter Stellen einer Zahl.
• Die reellen Zahlen 0 und 1 können in M exakt dargestellt
werden. Es gilt:
• Ist diese Anzahl z.B. 10, so spricht man von einer
0 = 0̃ und 1 = 1̃
10-stelligen endlichen Arithmetik.
• Bei einer Operation wird mit einer Stelle mehr gerechnet
• Sind x, y ∈ M, dann ist das Resultat der Addition im
und anschliessend das Resultat auf die Grösse der
Mantisse gerundet.
Allgemeinen nicht mehr in M.
• Das Resultat muss auf das nächstliegende Element in M
• Menge der Zahlen einer endlichen Arithmetik wollen wir
gerundet werden.
mit M bezeichnen.
• Aus diesem Grund gelten nicht dieselben Gesetze wie in
einer gewöhnlichen Arithmetik.
1.25
Atomare Datentypen: Eigenschaften einer endliche
Arithmetik 2
• Das Assoziativgesetz der Addition gilt in einer endlichen
Arithmetik im allgemeinen nicht:
(x + y ) + z 6= x + (y + z)
Daten
1.26
Atomare Datentypen: Eigenschaften einer endliche
Arithmetik 3
• Das Distributivgesetz gilt in einer endlichen Arithmetik im
Allgemeinen nicht:
Pierre Fierz
Einleitung
x · (y + z) 6= (x · y ) + (x · z)
Datentypen
x = 9.100 y = 3.0 · 10
−4
Abgeleitete Typen
Weitere
Datenstrukturen
Wir verwenden hier eine 4-Stellige dezimale endliche
Arithmetik.
z = 4.0 · 10
Der Abstrakte
Datentyp (ADT)
{z
x = 2.000 y = 3.000 z = 3.000 · 10−4
x · (y + z) = 2.000 · (3.000 + 0.0003) = 6.000
|
{z
}
gerundet=3.000
|
gerundet=9.101
}
(x · y ) + (x · z) = (2.000 · 3.000) + (2.000 · 0.0003) = 6.001
|
{z
} |
{z
}
gerundet=6.000
gerundet=0.0007
{z
{z
gerundet=6.000
}
x + (y + z) = 9.100 + (0.0003 + 0.0004) = 9.101
|
{z
}
|
Der Abstrakte
Datentyp (ADT)
−4
gerundet=9.100
gerundet=9.100
Weitere
Datenstrukturen
Beispiel: Distributivgesetz
(x + y ) + z = (9.100 + 0.0003 +0.0004 = 9.100
|
{z
}
|
Einleitung
Datentypen
Abgeleitete Typen
Beispiel: Assotiativgesetz der Addition
Daten
Pierre Fierz
|
}
1.27
gerundet=0.0006
{z
gerundet=6.001
}
1.28
Atomare Datentypen: Absoluter und relativer Fehler
Daten
Atomare Datentypen: Numerische Auslöschung
• Numerische Auslöschung ist ein spezieller
Rundungsfehler.
• Entsteht wenn zwei fast gleich grosse Zahlen voneinander
subtrahiert werden.
Pierre Fierz
• Bei Operationen mit Zahlen aus M wird das Resultat
gerundet.
Einleitung
• Dadurch entstehen Fehler im Resultat.
Datentypen
Abgeleitete Typen
Sei x̃ eine Approximation der Zahl x so definieren wir den
absoluten Fehler als
Einleitung
Datentypen
Abgeleitete Typen
Beispiel: Numerische Auslöschung
Weitere
Datenstrukturen
Definition
Daten
Pierre Fierz
Weitere
Datenstrukturen
• Wir betrachten die folgende Rechnung
Der Abstrakte
Datentyp (ADT)
0
Der Abstrakte
Datentyp (ADT)
−4
0
1.2345 · 10 − 1.2344 · 10 = 1.0000 · 10
|x − x̃|
• Falls die Anfangsdaten verfälscht waren ist das exakte
Resultat aber 1.xxxx.
und den relativen Fehler als
• Die Stellen xxxx sind dabei nicht bekannt
|x − x̃|
|x|
• Der absolute Fehler liegt im Bereich 10−5
• Der relative Fehler liegt im Bereich 10−5 /10−4 = 10−1
• Der relative Fehler der Anfangsdaten ist
10−5 /1.2 · 100 ≈ 10−5
• Für die Fehlerrechnung ist vor allem der relative Fehler
interessant
• Der relative Fehler wird also um einen Faktor von 104
vergrössert.
1.29
Atomare Datentypen: Numerische Stabilität
Daten
1.30
Atomare Datentypen: Numerische Stabilität 2
Pierre Fierz
Daten
Pierre Fierz
Beispiel: Quadratische Gleichung nicht stabil
• Wir betrachten Quadratische Gleichungen der Form
Einleitung
• Ein numerisch stabiler Algorithmus funktioniert auch in
einer endlichen Arithmetik “richtig”
• Unter “richtig” meint man dabei, dass die Rundungsfehler
den Ablauf nicht zu sehr stören.
Datentypen
Einleitung
Datentypen
x 2 + px + q = 0
Abgeleitete Typen
Weitere
Datenstrukturen
• Die übliche Formel zum Finden der beiden Lösungen
Der Abstrakte
Datentyp (ADT)
lautet
• Die folgende Definition von Stabilität stammt von
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
r
p 2
−p
±
−q
2
2
• Falls |p| |q| passiert bei der kleineren der beiden
Lösungen numerische Auslöschung.
x1,2 =
Wilkinson:
Definition
Bei stabilen Algorithmen ist das vom Computer berechnete
(durch Rundungsfehler verfälschte) Resultat, das exakte
Resultat von leicht geänderten Anfangsdaten.
• Dann gilt nämlich
−p
≈
2
r
p 2
2
−q
und es werden fast gleich grosse Zahlen voneinader
subtrahiert.
1.31
1.32
Atomare Datentypen: Numerische Stabilität 3
Daten
Atomare Datentypen: Numerische Stabilität 4
Pierre Fierz
Beispiel: Quadratische Gleichung nicht stabil (Forts.)
• Wir berechnen nun das folgende numeriche Beispiel
x 2 + 108 x + 1 = 0
• Mit einer 7-stelligen Arithmetik und der obigen Formel
Daten
Pierre Fierz
Beispiel: Quadratische Gleichung stabil
Einleitung
Einleitung
• Um quadratische Gleichungen immer stabil zu berechnen
Datentypen
kann man den folgenden Algorithmus verwenden.
Abgeleitete Typen
Weitere
Datenstrukturen
• Falls eine Lösung der Gleichung bekannt ist, kann die
zweite Lösung mit der folgenden Formel berechnet
werden.
q
x2 =
x1
Der Abstrakte
Datentyp (ADT)
erhalten wir die Lösungen:
x1 = −108 und x2 = 0
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• Wir verwenden diese Formel zur Berechnung der
• Das sind aber die Lösungen der Gleichung
betragsmässig kleineren Lösung
• Im Beispiel x 2 + 108 x + 1 = 0 erhalten wir
x 2 + 108 x = 0
x1 = 10−8 , x2 =
• Der relative Fehler von x1 ist gering (≈ 10−9 )
• Die Lösung x2 ist hingegen schlicht falsch (Underflow).
1
1
= − 8 = −10−8
x1
10
• Dieser Algorithmus ist in jedem Fall numerisch stabil.
• Dieser Algorithmus ist also nicht stabil.
1.33
Atomare Datentypen: Schlecht konditionierte Probleme
Daten
1.34
Atomare Datentypen: Schlecht konditionierte Probleme 2
Pierre Fierz
Daten
Pierre Fierz
Beispiel: Nullstellen von Polynomen
• Für schlecht konditionierte Probleme existieren keine
stabilen Algorithmen.
Definition
Ein Problem ist schlecht konditioniert (ill posed problem), wenn
die Lösung sich stark ändert, wenn man die Anfangsdaten
wenig stört.
• Wir betrachten das Polynom
Einleitung
Datentypen
3
Einleitung
3
2
P(x) = (x − 1) = x − 3x + 3x − 1
Abgeleitete Typen
Weitere
Datenstrukturen
• Dieses Polynom hat eine dreifache Nullstelle bei x1,2,3 = 1.
Der Abstrakte
Datentyp (ADT)
• Wir betrachten nun das folgende Polynom mit leicht
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
verfälschten Anfangsdaten
Q(x) = x 3 − 3.000001x 2 + 3x − 0.999999
• In den Naturwissenschaften sind die Ausgangsdaten von
• Die Nullstellen sind
Berechnungen meistens Messdaten.
x1 = 1, x2 ≈ 1.001414 und x3 ≈ 0.998586
• Messdaten sind aber immer ungenau.
• Ist das zu lösende Problem schlecht konditioniert, so wird
• Die Koeffizienten von P wurden um 10−6 gestört, was die
das Resultat sehr häufig falsch sein.
Nullstellen um 10−3 veränderte.
• Die Störung wurde damit 1000 mal verstärkt.
• Das Polynom P ist also schlecht konditioniert
1.35
1.36
Atomare Datentypen: Logische Werte (BOOLEAN)
Daten
Atomare Datentypen: Logische Werte (BOOLEAN) 2
Pierre Fierz
• Der Datentyp BOOLEAN umfasst die beiden Werte TRUE
(wahr) und FALSE (falsch)
• Es existieren die folgenden Basisoperatoren
• Konjunktion AND (∧)
• Disjunktion OR (∨) und
• Negation NOT (¬)
Daten
Pierre Fierz
Einleitung
Einleitung
Datentypen
Datentypen
Abgeleitete Typen
Abgeleitete Typen
Weitere
Datenstrukturen
• Wahrheitstabellen für die boolschen Operatoren
Der Abstrakte
Datentyp (ADT)
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
A
true
true
false
false
• Das Resultat eines Vergleichs ist ein BOOLEAN
• In Java is die folgende Zuweisung möglich
AND
B
true
false
true
false
A∧B
true
false
false
false
A
true
true
false
false
OR
B
true
false
true
false
A∨B
true
true
true
false
NOT
A
¬A
true
false
false
true
boolean Bool = (10 >= 8);
1.37
Atomare Datentypen: Text (CHAR)
Daten
Atomare Datentypen: Text (CHAR) 2
• Die beiden bijektiven funktionen ord und char müssen zur
Verfügung stehen.
• Sei N die Anzahl Elemente im Zeichensatz so gilt:
Pierre Fierz
Einleitung
• Der Datentyp CHAR bezeichnet eine Menge von
Schriftzeichen.
• Es existieren verschiedene Kodierungen wie EBCDIC,
ASCII oder Unicode
1.38
ord : CHAR 7→ {0, 1, . . . , N − 1}
char : {0, 1, . . . , N − 1} 7→ CHAR
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
• Ferner gelten die folgenden Regeln
Der Abstrakte
Datentyp (ADT)
• ord(char (i)) = i ∀i ∈ [0 . . . N − 1]
• Auf der Menge existiert eine totale Ordnung.
Daten
Pierre Fierz
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• char (ord(x)) = x ∀x ∈ CHAR
• Bezüglich dieser Ordnung müssen die Teilmengen der
Buchstaben und der Ziffern je zusammenhängend und wie
üblich geordnet sein. Es gilt:
Beispiel: Ausgeben von Zeichen in Java
A < B < C ··· < Z
a < b < c ··· < z
0 < 1 < 2··· < 9
// Alle Zeichen zwischen 0 und 255 ausgeben
for (int i = 0; i <= 255; i++) {
System.out.print(((char) i) + ",");
}
// Den Code von A ausgeben
System.out.println((int)’A’);
1.39
1.40
Outline
Daten
Mengenoperationen
Pierre Fierz
Einleitung
1 Einleitung
2 Datentypen
Daten
Pierre Fierz
Einleitung
Datentypen
• Ein Datentyp besteht aus einer Menge und Operationen
Datentypen
Abgeleitete Typen
• Durch Mengenoperationen können also aus bestehenden
Abgeleitete Typen
Weitere
Datenstrukturen
Datentypen neue gewonnen werden.
• Die wichtigsten Mengenoperationen sind
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
•
•
•
•
3 Abgeleitete Typen
Der Abstrakte
Datentyp (ADT)
Die Teilmengenbildung
Das Kartesische Produkt
Bilden der Potenzmenge
Erzeugen von Funktionsräume
• Bei der Teilmengenbildung spricht man von
4 Weitere Datenstrukturen
Unterbereichstypen (oder auch Subtypen)
• Bei den anderen Mengenoperationen von strukturierten
5 Der Abstrakte Datentyp (ADT)
Typen
1.41
Unterbereichstypen
Daten
1.42
Daten
Subtypen
Pierre Fierz
Pierre Fierz
• Ein Unterbereichstyp ist ein intervall eines ordinal Typ
(Integer, Char)
• Das heisst, die Wertemenge wird auf ein Intervall
beschränkt.
• Beim Unterbereichstyp wird ein Intervall des Obertyps
Einleitung
benutzt
Datentypen
Abgeleitete Typen
• Die Definition erfolgt durch die Angabe der Grenzen des
Intervalls.
TYPE T = min..max (*Pascal Definition*)
• Eine Verallgemeinerung ist der Subtyp der aus einer
Weitere
Datenstrukturen
beliebigen Teilmenge des Obertyps besteht (set
comprehension)
Der Abstrakte
Datentyp (ADT)
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Beispiel: Subtyp
• Der Obertyp sei alle schweizer Adressen CHAdr .
• Der Operator PLZ sei auf CHadr definiert und liefert als
Beispiel: Unterbereichstypen
Resultat die Postleitzahl des Ortes.
TYPE Grossbuchstabe = A..Z
TYPE Ziffer = 0..9
TYPE Kleinezahl = -10..10
• Wir können nun den neuen Subtyp BEadr folgendermassen
definieren:
BEadr = {x ∈ CHadr | PLZ (x) ≥ 3000 ∧ PLZ (x) ≤ 3999}
• Operatoren des Obertyps können auf den Subtyp
angewendet werden
1.43
1.44
Daten
Der Array
Daten
Der Array 2
Pierre Fierz
Pierre Fierz
• Der strukturierte Typ Array wird aus zwei gegebenen
• Auf Arrays ist der Selektoroperator [] definiert.
Einleitung
Datentypen konstruiert:
• Der Grundtyp (GT ) ist ein beliebiger atomarer oder
abgeleiteter Datentyp
• Der Indextyp (ID) ist ein Unterbereichstyp von INTEGER.
• Arrays des Grundtyps GT und des Indextyps ID kann nun
Datentypen
• Mit diesem Operator kann auf ein beliebiges Element des
Abgeleitete Typen
Arrays zugegriffen werden.
Weitere
Datenstrukturen
• Das i-te Element des Arrays A wird mit A[i] bezeichnet
Der Abstrakte
Datentyp (ADT)
und repräsentiert ein Objekt des Grundtyps des Arrays.
folgendermassen definiert werden.
Arraygtid = GT
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• Ein Arrayelement kann gelesen oder geschieben werden.
|ID|
Beispiel: Der Arrayselektor
double[] doubleArray = new double[20];
double x;
Beispiel: Array in Java
x = doubleArray[7] + 10.0;
• Wir definieren einen Array mit Grundtyp double und dem
Indextyp 0..19
doubleArray[3] = 27.0;
public double[] doubleArray = new double[20];
/* Lesen der 7. Komponente des
Arrays doubleArray */
/* Schreiben der 3. Komponente
des Arrays doubleArray */
1.45
Der Array 3
• Der Indextyp des Arrays ist eine Zahl
• Ein Index kann daher auch zur Laufzeit berechnet werden
(Achtung Fehler!)
• Diese Eigenschaft wird im nächsten Algorithmus
ausgenutzt.
Beispiel: Binäres Suchen
• Das binäre Suchen kann angewendet werden um in einem
Daten
1.46
Der Array 3
• Der Indextyp des Arrays ist eine Zahl
• Ein Index kann daher auch zur Laufzeit berechnet werden
(Achtung Fehler!)
• Diese Eigenschaft wird im nächsten Algorithmus
ausgenutzt.
Pierre Fierz
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Beispiel: Binäres Suchen
Der Abstrakte
Datentyp (ADT)
• Das binäre Suchen kann angewendet werden um in einem
sortierten Array A ein Element x schnell zu finden.
Daten
Pierre Fierz
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
sortierten Array A ein Element x schnell zu finden.
• In einem Sortierten Array der Länge n gilt:
• In einem Sortierten Array der Länge n gilt:
A[0] ≤ A[1] ≤ · · · ≤ A[n − 1]
A[0] ≤ A[1] ≤ · · · ≤ A[n − 1]
• Der Algorithmus ist ganz Einfach:
• Vergleiche das mittlere Element am des Arrays mit x
• Der Algorithmus ist ganz Einfach:
• Vergleiche das mittlere Element am des Arrays mit x
• Gilt am = x dann ist die Suche erfolgreich beendet
1.47
1.47
Der Array 3
• Der Indextyp des Arrays ist eine Zahl
• Ein Index kann daher auch zur Laufzeit berechnet werden
(Achtung Fehler!)
• Diese Eigenschaft wird im nächsten Algorithmus
ausgenutzt.
Beispiel: Binäres Suchen
• Das binäre Suchen kann angewendet werden um in einem
Daten
Der Array 3
• Der Indextyp des Arrays ist eine Zahl
• Ein Index kann daher auch zur Laufzeit berechnet werden
(Achtung Fehler!)
• Diese Eigenschaft wird im nächsten Algorithmus
ausgenutzt.
Pierre Fierz
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Beispiel: Binäres Suchen
Der Abstrakte
Datentyp (ADT)
• Das binäre Suchen kann angewendet werden um in einem
sortierten Array A ein Element x schnell zu finden.
Daten
Pierre Fierz
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
sortierten Array A ein Element x schnell zu finden.
• In einem Sortierten Array der Länge n gilt:
• In einem Sortierten Array der Länge n gilt:
A[0] ≤ A[1] ≤ · · · ≤ A[n − 1]
A[0] ≤ A[1] ≤ · · · ≤ A[n − 1]
• Der Algorithmus ist ganz Einfach:
• Vergleiche das mittlere Element am des Arrays mit x
• Gilt am = x dann ist die Suche erfolgreich beendet
• Gilt am > x dann suche das Element im linken Teil des
Arrays
• Der Algorithmus ist ganz Einfach:
• Vergleiche das mittlere Element am des Arrays mit x
• Gilt am = x dann ist die Suche erfolgreich beendet
• Gilt am > x dann suche das Element im linken Teil des
Arrays
• Gilt am < x dann suche das Element im rechten Teil des
Arrays
1.47
Der Array 4
Daten
1.47
Der Array 4
Pierre Fierz
Beispiel: Binäres Suchen in Java
public static int binSearch(int[] a, int such) {
int left = 0;
int right = a.length - 1;
int mid = 0;
boolean found = false;
while (right >= left && !found) {
//Testen des mittleren Elementes
mid = (left + right) / 2;
if (a[mid] == such)
found = true;
else if (a[mid] < such)
//Das Element muss rechts der Mitte liegen.
left = mid + 1;
else
// Das Element muss links der Mitte liegen.
right = mid - 1;
}
return (found) ? mid : -1;
Daten
Pierre Fierz
Beispiel: Binäres Suchen in Java
public static int binSearch(int[] a, int such) {
int left = 0;
int right = a.length - 1;
int mid = 0;
boolean found = false;
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
while (right >= left && !found) {
//Testen des mittleren Elementes
mid = (left + right) / 2;
if (a[mid] == such)
found = true;
else if (a[mid] < such)
//Das Element muss rechts der Mitte liegen.
left = mid + 1;
else
// Das Element muss links der Mitte liegen.
right = mid - 1;
}
return (found) ? mid : -1;
Der Abstrakte
Datentyp (ADT)
}
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
}
• Die maximale Anzahl Vergleiche im Algorithmus ist
log2 (a.length)
1.48
1.48
Allgemeine Struktur
Daten
Allgemeine Struktur 2
• In der Sprache Java kann ein solcher Typ mit Hilfe einer
Klasse definiert werden.
public class MyStructure {
DT1 name_1;
DT2 name_2;
DT3 name_3;
.
.
DTn name_n;
};
• Die Datentypen DT1 . . . DTn können entweder atomare
oder abgeleitete Typen sein.
Pierre Fierz
• Mit Hilfe des Kartesischen Produkts können wir neue
Datentypen definieren.
• Dabei fassen wir beliebige Datentypen zu einer Einheit
zusammen
NewType = DT1 × DT2 × DT3 × · · · × DTn
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• In der Sprache C kann ein solcher Typ folgendermassen
definiert werden:
typedef struct
{
DT1 Name_1;
DT2 Name_2;
DT3 Name_3;
.
.
DTn Name_n;
} MyStruct;
Daten
Pierre Fierz
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Beispiel: Person
public class Person {
String
Name;
String
Vorname;
Calendar GeburtsDatum;
String
Beruf;
double
Gehalt;
};
1.49
Allgemeine Struktur 3
Daten
Mengen von Objekten
• Mengen von Objekten desselben Typs bilden mit den
Mengenoperatoren auch einen Typ.
• Die Wertemenge des Mengentyps eines Typs DT ist dann
P(DT )
• In Java wird der Mengentyp durch die Library Klasse
HashSet zur Verfügung gestellt.
Pierre Fierz
• Bei Strukturen existiert der Selekoroperator ., der es
erlaubt auf einzelene Komponenten zuzugreifen.
Beispiel: Zugriff auf Komponenten
1.50
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Beispiel: Mengen und Operationen
Der Abstrakte
Datentyp (ADT)
Person Hans = new Person();
Daten
Pierre Fierz
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
public static void main(String[] args) {
HashSet<Integer> A = new HashSet<Integer>();
HashSet<Integer> B = new HashSet<Integer>();
Hans.Name = "Meier";
Hans.Gehalt = 4500.0;
Hans.GeburtsDatum.set(80, 11, 22);
if (A.contains(7)) {
// 7 ist Element von A?
...
}
if (A.containsAll(B)) { // B Teilmenge von A?
...
}
/* Die Mengenoperationen
* Das Resultat ist in A gespeichert
*/
A.addAll(B);
// A vereinigt mit B
A.retainAll(B); // A geschnitten mit B
A.removeAll(B); // A weg B
System.out.println(Hans.Name);
}
1.51
1.52
Daten
Funktionsräume
Outline
Pierre Fierz
Daten
Pierre Fierz
• Mit den Datentypen DT1 und DT2 kann der Funktionsraum
Fraum = {f |f : DT1 → DT2 }
gebildet werden.
Einleitung
Einleitung
1 Einleitung
Datentypen
Beispiel: Funktionsräume
• Das nächste Beispiel zeigt wie man in C++
Datentypen
Abgeleitete Typen
Abgeleitete Typen
Weitere
Datenstrukturen
Weitere
Datenstrukturen
2 Datentypen
Der Abstrakte
Datentyp (ADT)
Der Abstrakte
Datentyp (ADT)
Funktionstypen definieren kann.
3 Abgeleitete Typen
#include <cmath>
#include <iostream>
typedef double (*realfunc)(double);
4 Weitere Datenstrukturen
int main() {
realfunc fp;
realfunc fp1;
5 Der Abstrakte Datentyp (ADT)
fp = &sin;
fp1 = &cos;
std::cout << fp(fp1(M_PI)) << std::endl;
}
1.54
1.53
Daten
Die lineare Liste
Die lineare Liste 2
Pierre Fierz
• Eine lineare Liste besteht aus i-Tupel von Elementen
eines Grundtyps GT
Einleitung
Einleitung
Datentypen
• Im Gegensatz zum Array ist die Anzahl Elemente einer
Datentypen
• Für eine Liste sind die folgenden Operationen wichtig:
• Schreiben/Lesen des Wertes eines beliebigen Elements der
Liste.
• Einfügen eines Elements an einer beliebigen Stelle in der
Liste.
• Löschen eines beliebigen Elements der Liste.
• Traversieren der Liste
• Bestimmen der Länge der Liste.
Abgeleitete Typen
Weitere
Datenstrukturen
Liste variable.
• Formal kann eine Liste folgendermassen definiert werden:
ListeGT =
∞
[
Daten
Pierre Fierz
Der Abstrakte
Datentyp (ADT)
GT i
i=0
• Da i = 0 zugelassen ist, kann eine Liste auch leer sein.
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• Der Aufwand für die einzelnen Operationen hängt von der
• Da Tupel geordnet sind kann man vom ersten, letzten und
Repräsentation der Liste ab.
n-ten Element der Liste sprechen.
• Wir können auch vom Vorgänger und Nachfolger eines
Elements sprechen.
1.55
1.56
Daten
Die lineare Liste 3
Daten
Die lineare Liste 4
Pierre Fierz
• Sequentielle Repräsentation:
Einleitung
Alle Elemente der Liste werden in aufeinanderfolgenden
Speicherplätzen abgelegt.
Vorteil: Der Zugriff auf ein Element der Liste ist sehr
schnell, da dessen Adresse berechnet
werden kann.
Nachteil Das Einfügen oder Löschen eines Elements
der Liste ist langsam, da alle hinteren
Elemente geschoben werden müssen.
Anfang
Ende
Pierre Fierz
Einleitung
• Verkettete Repräsentation:
Datentypen
Datentypen
Zu jedem Element der Liste wird zusätzlich die
(physische) Adresse seines Nachfolgers gespeichert.
Vorteil: Das Löschen und Einfügen eines Elements
der Liste ist schnell, da nur der Zeiger des
Vorgängers verändert werden muss.
Nachteil: Der Zugriff auf ein beliebiges Element ist
langsam, da alle Vorgängerelemente der
Liste gelesen werden müssen.
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Freier Speicher
1.57
Daten
Stack und Queue
1.58
Daten
Stack und Queue 2
Pierre Fierz
• Aus einer Liste kann man neue Datentypen ableiten,
indem die Operationen eingeschränkt werden.
Pierre Fierz
Einleitung
Einleitung
• Eine Queue ist eine lineare Liste bei der
1 Die Operationen Lesen und Löschen nur am Anfang der
Liste erlaubt sind
2 Die Operation Einfügen nur am Ende der Liste erlaubt ist.
Datentypen
• Werden die Operationen Lesen, Einfügen und Löschen
nur an einem Ende der Liste erlaubt, erhält man den
Stack.
• Der Stack wird häufig als LiFo-Struktur bezeichnet (LiFo =
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• Die Queue wird häufig als FiFo-Struktur bezeichnet (FiFo
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
= First-in-First-out).
Last-in-First-out).
• Man braucht die Begriffe push und pop für das Einfügen
und Löschen eines Elements.
write(Sami)
Paul
Peter
Hans
Fritz
Sami
push(Sami)
Sami
pop()
Paul
Paul
Paul
Peter
Peter
Peter
Hans
Hans
Hans
Fritz
Fritz
Fritz
Sami
Paul
Peter
Hans
Fritz
read()
Sami
Paul
Peter
Hans
Fritz
1.59
1.60
Der Baum
• Eine weitere wichtige Datenstruktur ist der Baum (engl.
tree)
• Der Baum ist dem Wesen nach eine zweidimensionale
Struktur.
Daten
Daten
Der Baum 2
Pierre Fierz
Pierre Fierz
• Bäume werden als Graphen dargestellt
• Dabei wird die Wurzel durch m Kanten (engl. edges) mit
Einleitung
Datentypen
Abgeleitete Typen
Definition
Abgeleitete Typen
Weitere
Datenstrukturen
Ein Baum ist entweder
1
die leere Menge (leerer Baum) oder
2
eine endliche, nichtleere Menge von Elementen, wovon
ein Element Wurzel (engl. root) genannt wird und die
restlichen Elemente in m ≥ 0 disjunkte Teilmengen
eingeteilt sind, wobei jede wieder ein Baum ist
(Unterbäume).
Einleitung
Datentypen
den Wurzeln der Unterbäume verbunden.
Wurzel
Weitere
Datenstrukturen
A
Geschwister
Der Abstrakte
Datentyp (ADT)
1111
0000
0000
1111
0000
1111
Der Abstrakte
Datentyp (ADT)
Unterbaum
B
C
D
Hoehe
E
G
F
H
I
Wurzel
Innere Knoten
J
......
Blaetter
Unterbaum
Der Baum 3
1.61
Daten
1.62
Der Baum 4
Pierre Fierz
• Wichtige Begriffe:
• Die Elemente des Baumes heissen Knoten (engl. nodes)
• Die Wurzel eines Baumes ist der Vorgänger die Wurzeln der
Unterbäume sind die Nachfolger (engl. predecessor and
successor).
• Knoten mit Nachfolger heissen innere Knoten (engl. internal
nodes).
• Knoten ohne Nachfolger heissen Blätter oder äussere
Knoten (engl. leaves or external nodes).
• Die direkten Nachfolger eines Knotens heissen Geschwister
(engl. siblings).
• Das Niveau (engl. level) eines Knotens ist folgendermassen
definiert:
level(root) := 0
level(x) := level(predecessor (x)) + 1
Daten
Pierre Fierz
Einleitung
Einleitung
Datentypen
Datentypen
Abgeleitete Typen
• Wichtige Begriffe (fortsetzung):
• Der Grad (engl. degree) eines Knotens ist gleich der Anzahl
Nachfolger dieses Knotens.
• Der Grad eines Baubes b ist definiert als:
degree(b) := maxx∈b (degree(x))
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• Eine Menge von Bäumen heisst Wald (engl. forest).
• Ein geordneter Baum (engl. ordered tree) ist ein Baum, bei
dem die Reihenfolge der direkten Nachfolger eines Knotens
gegeben ist.
• Die Tiefe (engl. depth) oder Höhe (engl. height) eines
Baumes b ist definiert als:
depth(b) := maxx∈b (level(x))
1.63
1.64
Der binäre Baum
Daten
Daten
Der binäre Baum 2
Pierre Fierz
Pierre Fierz
• Ein wichtiger Speziallfall von Bäumen sind die binären
Bäume.
Definition
1
Ein binärer Baum (engl. binary tree) ist ein geordneter
Baum mit Grad ≤ 2.
2
Ein streng binärer Baum (engl. strictly binary tree) ist ein
binärer Baum und alle inneren Knoten haben den Grad 2.
3
Ein vollständiger binärer Baum (engl. complete binary
tree) ist ein streng binärer Baum und alle Blätter haben
das gleiche Niveau.
4
Ein fast vollständiger binärer Baum (engl. allmost
complete binary tree) ist ein vollständiger binärer Baum
wobei ganz rechts auf der untersten Stufe des Baumes
Knoten fehlen dürfen.
Beispiel: Diverse binäre Bäume
Einleitung
Einleitung
Datentypen
Datentypen
Abgeleitete Typen
Abgeleitete Typen
Weitere
Datenstrukturen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Der Abstrakte
Datentyp (ADT)
1 Binaerer Baum
2 Streng binaerer Baum
3 Vollstaendiger binaerer Baum
4 Fast vollstaendiger binaerer Baum
1.65
Darstellung von binären Bäumen
Daten
1.66
Traversieren von binären Bäumen
Pierre Fierz
Daten
Pierre Fierz
• Da der binäre Baum geordnet ist hat ein Knoten einen
linken und rechten Unterbaum.
• Die folgende Struktur stellt einen Knoten des binären
Baumes dar.
public class BinTreeNode<Element> {
private Element info;
private BinTreeNode<Element> left;
private BinTreeNode<Element> rigth;
• Eine wichtige Operation für Bäume ist das Traversieren
Einleitung
des Baumes.
Datentypen
Datentypen
• Das heisst, besuchen aller Knoten und ausführen einer
Abgeleitete Typen
Aktion (z.B. ausdrucken der Information)
Weitere
Datenstrukturen
• Da die Baumstruktur rekursiv definiert ist, liegt es natürlich
Der Abstrakte
Datentyp (ADT)
Einleitung
nahe, die Traversierung eines Baumes rekursiv zu
implementieren.
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• Wir wollen die drei folgenden Ansätze betrachten:
...
Preorder Traversierung
}
• Der Baum selbst kann nun folgendermassen definiert
1
werden:
2
public class BinTree<Element> {
private BinTreeNode<Element> root;
3
Behandle die Wurzel des Baumes
Traversiere den linken Unterbaum in
preorder
Traversiere den rechten Unterbaum in
preorder
...
}
1.67
1.68
Daten
Traversieren von binären Bäumen 2
Traversieren von binären Bäumen 3
• Der folgende Algorithmus implementiert die Traversierung
eines binären Baumes in inorder.
Pierre Fierz
• Fortsetzung:
Algorithmus: Baumtraversierung
Einleitung
Datentypen
Postorder Traversierung
1
2
3
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
2
3
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
public void traverse() {
// Linker Unterbaum
if (this.left != null)
this.left.traverse();
Inorder Traversierung
1
Einleitung
Datentypen
public class BinTreeNode<Element> {
private Element info;
private BinTreeNode<Element> left;
private BinTreeNode<Element> right;
...
Abgeleitete Typen
Traversiere den linken Unterbaum in
postorder
Traversiere den rechten Unterbaum in
postorder
Behandle die Wurzel des Baumes
Daten
Pierre Fierz
// Ausgeben des Knotens
System.out.println(info);
Traversiere den linken Unterbaum in inorder
Behandle die Wurzel des Baumes
Traversiere den rechten Unterbaum in
inorder
// Rechter Unterbaum
if (this.right != null)
this.right.traverse();
}
...
}
1.69
Daten
Traversieren von binären Bäumen 4
1.70
Traversieren von binären Bäumen 5
Pierre Fierz
Beispiel: Arithmetische Ausdrücke
Beispiel: Arithmetische Ausdrücke (forts.)
• Zu jedem arithmetischen Ausdruck gehört ein
Syntaxbaum.
• Die inneren Knoten repräsentieren die Operatoren
• Traversieren wir den Baum in Preorder, so erhalten wir die
Einleitung
folgende Reihenfolge für den Besuch der einzelnen
Knoten (Polnische Notation):
Datentypen
Abgeleitete Typen
• Die Blätter repräsentieren die Operanden.
Weitere
Datenstrukturen
• Der folgende Baum repräsentiert den Ausdruck
Der Abstrakte
Datentyp (ADT)
· − · + abc/d e7
Abgeleitete Typen
Weitere
Datenstrukturen
die folgende Reihenfolge für den Besuch der einzelnen
Knoten (Umgekehrte polnische Notation):
−
a
Datentypen
• Traversieren wir den Baum in Postorder, so erhalten wir
01
7
01
Einleitung
Der Abstrakte
Datentyp (ADT)
((a + b) · c − d/e) · 7
ab + c · d e/ − 7·
/
• Traversieren wir den Baum in Inorder, so erhalten wir die
c
+
Daten
Pierre Fierz
d
e
folgende Reihenfolge für den Besuch der einzelnen
Knoten (Infix Notation ohne Klammern):
b
1.71
a + b · c − d /e · 7
1.72
Outline
Daten
Definition ADT
Pierre Fierz
Einleitung
1 Einleitung
Einleitung
• Der abstrakte Datentyp (abgekürzt ADT) ist eines der
Datentypen
Abgeleitete Typen
2 Datentypen
Daten
Pierre Fierz
wichtigsten Konzepte in der modernen Informatik.
Weitere
Datenstrukturen
• Objektorientierte Sprachen unterstützen das Konzept.
Der Abstrakte
Datentyp (ADT)
• Er dient dazu, Datentypen unabhängig von deren
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Implementation zu definieren.
3 Abgeleitete Typen
• Beispiele: Listen, Stacks, Queues usw.
• Aber auch konkrete Objekte der Welt wie Personen,
Motoren, Schrauben, Fahrzeuge usw.
4 Weitere Datenstrukturen
• Zwei wichtige Prinzipien:
• Geheimnisprinzip
• Wiederverwendbarkeit
5 Der Abstrakte Datentyp (ADT)
1.73
Definition ADT 2
Daten
1.74
Definition ADT 3
Pierre Fierz
Daten
Pierre Fierz
• Das Geheimnisprinzip kann folgendermassen formuliert
werden:
Einleitung
• Das Prinzip der Wiederverwendbarkeit kann wie folgt
Datentypen
Definition
Dem Benutzer eines Datentyps (Moduls) werden nur die auf
diesem Datentyp erlaubten Operationen bekanntgegeben. Die
Implementation des Datentyps bleibt für den Benutzer
verborgen (abstrakt).
formuliert werden:
Abgeleitete Typen
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Definition
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Ein Datentyp soll in verschiedenen Applikationen
wiederverwendbar sein, wenn ähnliche Probleme gelöst
werden müssen.
Der Abstrakte
Datentyp (ADT)
• Die Anwendung dieses Prinzips bringt folgende Vorteile:
• Der Anwender kann den Datentyp nur im Sinne der
Definition verwenden.
• Die Implementation eines Datentyps kann jederzeit
verändert werden.
• Die Verantwortung zwischen dem Anwender und dem
Implementator des Datentyps sind durch die
Interface-Definitionen klar geregelt.
• Die Suche nach Fehlern wird dadurch erheblich vereinfacht.
• Die Anwendung dieses Prinzips verfolgt die folgenden
Ziele:
• Die Entwicklungszeit eines Systems soll veringert werden
• Software soll aus gut getesteten (bewiesenen)
Komponenten hergestellt werden können
• Bestehende Softwarekomponenten sollen einfach zwischen
Herstellern austauschbar sein.
1.75
1.76
Daten
Formale Spezifikation von ADTs
Formale Spezifikation von ADTs 2
Pierre Fierz
Daten
Pierre Fierz
• Die Wiederverwendbarkeit bedingt, dass die Funktionen
eines ADTs genau beschrieben werden.
• Das Geheimnisprinzip verlangt, dass die Spezifikation
nicht aufgrund der Implementation geschieht.
• Die Beschreibung des Stacks durch seine Implementation
ist genau
Einleitung
Datentypen
• Der Datentyp Stack ist aber dadurch überspezifiziert
Abgeleitete Typen
• Eine Beschreibung, die auf der Implementation basiert,
führt oft zu einer Überspezifikation des Datentyps.
Beispiel: Spezifikation eines Stacks aufgrund der Implementation
• Da der Benutzer weiss, dass der Stack als Array
Weitere
Datenstrukturen
impplementiert ist, kann er auf beliebige Element des
Stacks zugreifen.
Der Abstrakte
Datentyp (ADT)
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• Ein solcher Zugriff widerspricht aber der Idee des Stacks.
Wir können den Datentyp Stack als Array mit einem
zusätzlichen Zeiger auf das aktuelle oberste Element des
Stacks implementieren (in C).
struct stack
{
int
stack_pointer;
DT
stack_element[MAX];
Einleitung
• Eine Spezifikation besteht aus einer Signatur und einer
Semantik, die Bedeutung und Interaktion der Operationen
festlegt.
• Im folgenden wollen wir die folgenden
Spezifikationsmethoden betrachten:
/* DT steht fuer irgend
einen Datentyp */
};
1
void push(stack st, DT x)
{
++st.stack_pointer;
st.stack_element[st.stack_pointer] = x;
}
2
3
Mathematisch-axiomatische Methode
Mathematisch-algebraische Methode
Informelle Methode
1.77
Mathematisch-axiomatische Methode
Daten
1.78
Mathematisch-axiomatische Methode 2
Pierre Fierz
Daten
Pierre Fierz
Beispiel: Spezifikation des Stacks
TYPES
• Eine Mathematisch-axiomatische Spezifikation besteht
aus einer Signatur, Erzeuger und Axiomen.
• Die Signatur beschreibt die Operationen mit Ihrer
Wertigkeit und die Konstanten (0-Wertige Operation).
• Erzeuger sind Operationen, die aus gegebenen
Einleitung
Stack
ELEMENT
BOOLEAN
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
// wird hier definiert
// beliebiger Datentyp (generischer Parameter)
emptystack :
empty :
push :
pop :
top :
Elementen des Typs neue erzeugen.
• Die Axiome sind in Preconditions und Equations aufgeteilt
und beschreiben die Semantik des Typs.
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
FUNCTIONS
Der Abstrakte
Datentyp (ADT)
Einleitung
7→ Stack
Stack 7→ BOOLEAN
ELEMENT × Stack 7→ Stack
Stack ,→ Stack
Stack ,→ ELEMENT
Der Abstrakte
Datentyp (ADT)
PRECONDITIONS
∀s ∈ Stack :
pre pop(s) : ¬(empty (s))
pre top(s) : ¬(empty (s))
• Die Grundmenge der Objekte des Datentyps ist die Menge
aller aus den Operationen erzeugbaren Objekte.
• In der Mathematik wird ein solches System auch eine
AXIOMS
Termalgebra genannt.
∀e ∈ ELEMENT ∀s ∈ Stack :
empty (emptystack ) = TRUE
empty (push(e, s)) = FALSE
top(push(e, s)) = e
pop(push(e, s)) = s
push(top(s), pop(s)) = s falls ¬empty (s)
1.79
1.80
Mathematisch-axiomatische Methode 3
Daten
Mathematisch-algebraische Methode
Pierre Fierz
Daten
Pierre Fierz
Beispiel: Spezifikation der Queue
TYPES
Queue
ELEMENT
BOOLEAN
// wird hier definiert
// beliebiger Datentyp (generischer Parameter)
axiomatischen nur in der Angabe der Semantik.
• Die inhaltliche Bedeutung der Operationen wird hierbei
durch mathematische Mittel, Matrizen, Vektoren, Folgen,
etc. definiert.
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
FUNCTIONS
emptyqueue :
empty :
enqueue :
dequeue :
head :
• Die algebraische Methode unterscheidet sich von der
Einleitung
7→ Stack
Queue 7→ BOOLEAN
ELEMENT × Queue 7→ Queue
Queue ,→ Queue
Queue ,→ ELEMENT
Der Abstrakte
Datentyp (ADT)
• Ein Repräsentant dieser Methode ist die Java Modelling
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
• JML ist auf die Sprache Java zugeschnitten
• Die JML Anweisungen werden als Annotationen im Code
∀q ∈ Queue :
pre dequeue(q) : ¬(empty (q))
pre head(q) : ¬(empty (q))
geschrieben.
• Der Formalismus von JML ist nicht mathematisch sondern
Java ähnlich.
AXIOMS
• Zu JML existieren viele Tools zum testen oder beweisen
∀e ∈ ELEMENT ∀q ∈ Queue :
empty (emptyqueue) = TRUE
empty (enqueue(e, q)) = FALSE
head(enqueue(e, q)) = e falls empty (q)
= head(q) falls ¬empty (q)
dequeue(enqueue(e, q)) = q falls empty (q)
= enqueue(e, dequeue(q)) falls ¬empty (q)
Mathematisch-algebraische Methode 2
ob die Implementation der Spezifikation entspricht.
1.81
Daten
1.82
Mathematisch-algebraische Methode 3
Pierre Fierz
Daten
Pierre Fierz
Beispiel: Stack algebraische Spezifikation
Beispiel: Queue algebraische Spezifikation
TYPES
TYPES
// wird hier definiert
// beliebiger Datentyp (generischer Parameter)
Queue
ELEMENT
BOOLEAN
Einleitung
Datentypen
// wird hier definiert
// beliebiger Datentyp (generischer Parameter)
Abgeleitete Typen
FUNCTIONS
emptystack :
empty :
push :
pop :
top :
Datentypen
Language (JML)
PRECONDITIONS
Stack
ELEMENT
BOOLEAN
Einleitung
7 Stack
→
Stack 7→ BOOLEAN
ELEMENT × Stack 7→ Stack
Stack ,→ Stack
Stack ,→ ELEMENT
Einleitung
Datentypen
Abgeleitete Typen
FUNCTIONS
Weitere
Datenstrukturen
emptyqueue :
empty :
enqueue :
dequeue :
head :
Der Abstrakte
Datentyp (ADT)
SPECIFICATION
Sets
7→ Stack
Queue 7→ BOOLEAN
ELEMENT × Queue 7→ Queue
Queue ,→ Queue
Queue ,→ ELEMENT
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Sets
ELEMENT beliebiege Menge
Q = {<>} ∪ {< x1 , . . . , xn > |xi ∈ ELEMENT ∧ n ∈ N1 }
ELEMENT beliebiege Menge
S = {<>} ∪ {< x1 , . . . , xn > |xi ∈ ELEMENT ∧ n ∈ N1 }
Functions
Functions
emptyqueue =<>
empty (q) = (q ==<>)
enqueue(e, q) =< e > falls q ==<>
=< e, x1 , . . . , xn > falls q ==< x1 , . . . , xn >
head(q) = ⊥ falls q ==<>
= xn falls q ==< x1 , . . . , xn >
dequeue(q) = ⊥ falls q ==<>
=< x1 , . . . , xn−1 > falls q ==< x1 , . . . , xn >
emptystack =<>
empty (s) = (s ==<>)
push(e, s) =< e > falls s ==<>
=< x1 , . . . , xn , e > falls s ==< x1 , . . . , xn >
top(s) = ⊥ falls s ==<>
= xn falls s ==< x1 , . . . , xn >
pop(s) = ⊥ falls s ==<>
=< x1 , . . . , xn−1 > falls s ==< x1 , . . . , xn >
1.83
1.84
Informelle Methode
Daten
Informelle Methode 2
Pierre Fierz
Daten
Pierre Fierz
Beispiel: Informelle Spezifikation des Stacks
Einleitung
• Die formale (mathematische) Spezifikation eines ADT ist
eine sehr schwierige Aufgabe
• In vielen Fällen genügt eine weniger formale
Beschreibung des ADT
• Diese Beschreibung kann zum Beispiel in Form eines
Java-Interfaces geschehen
Einleitung
public interface Stack<Element> {
static public class StackFullException extends Exception{};
static public class StackEmptyException extends Exception{};
/**
* Dieses Interface definiert die Schnittstelle zu
* einem Stack von beliebigen Elementen des Typs
* Element Die Implementation steht noch offen.
*/
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
/** Preconditions: none
* Postconditions: none
* @return true falls keine Elemente im Stack sind.
*/
public boolean empty();
• Zu jeder Methode werden die Preconditions und
Postconditions angegeben
• Die Beschreibung kann auch in natürlicher Sprache sein
• Es ist darauf zu Achten, dass die Beschreibung möglichst
/** Preconditions: none
* Postconditions: none
* @return true falls kein Element eingefuegt
werden kann.
*
*/
public boolean full();
eindeutig ist.
1.85
Informelle Methode 3
Daten
1.86
Informelle Methode 4
Pierre Fierz
Daten
Pierre Fierz
Beispiel: Bounded Implementation mit Array
Beispiel: Informelle Spezifikation des Stacks (forts.)
public class BoundedStack<Element> implements Stack<Element> {
private int maxsize;
private int sp;
private Element[] st;
Einleitung
/** Preconditions: full() == false
* Postconditions: -- Ein Element (item) mehr auf dem Stack
new.empty() == false
*
new.top() == item
*
* @param item: neues Element zuoberst auf dem Stack
*/
public void push(Element item) throws StackFullException;
Datentypen
Abgeleitete Typen
public BoundedStack(int size) {
maxsize = size;
sp = -1;
st = (Element[])new Object[size];
}
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
Einleitung
Datentypen
Abgeleitete Typen
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
public boolean full() {
return sp+1 == maxsize;
}
/** Preconditions: empty() == false
* Postconditions: -- Ein Element weniger auf dem Stack
new.push(old.top()) == old
*
* @return Oberstes Element des Stacks
*/
public Element pop() throws StackEmptyException;
public boolean empty() {
return sp == -1;
}
public void push(Element e) throws StackFullException {
if (full()) throw new StackFullException();
st[++sp] = e;
}
/** Preconditions: empty() == false
* Postconditions: none
* @return old.top() (Oberstes Element des Stacks)
*/
public Element top() throws StackEmptyException;
public Element pop() throws StackEmptyException {
if (empty()) throw new StackEmptyException();
return st[sp--];
}
public Element top() throws StackEmptyException {
if (empty()) throw new StackEmptyException();
return st[sp];
}
}
}
1.87
1.88
Informelle Methode 5
Daten
Pierre Fierz
Beispiel: Unbounded Implementation mit Vector
import java.util.Vector;
Einleitung
public class MyStack<Element> implements Stack<Element> {
private Vector<Element> st;
Datentypen
Abgeleitete Typen
public MyStack() {
st = new Vector<Element>();
}
public boolean empty() {
return st.size() == 0;
}
Weitere
Datenstrukturen
Der Abstrakte
Datentyp (ADT)
public boolean full() {
// Immer false
return false;
}
public Element pop() throws StackEmptyException {
if (empty()) throw new StackEmptyException();
return st.remove(st.size() - 1);
}
public void push(Element item) {
st.add(item);
}
public Element top() throws StackEmptyException {
if (empty()) throw new StackEmptyException();
return st.elementAt(st.size() - 1);
}
}
1.89
Herunterladen