Basisinformationstechnologie I
Wintersemester 2011/12
11. Januar 2012 – Programmiersprachen III
Algorithmen und Datenstrukturen
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Rückblick I: „Programmiersprachen I“
Phasen der Programmentwicklung
◦ Analyse
Spezifikation
◦ Entwurf
Algorithmus
Pseudocode
◦ Realisierung
◦ (Dokumentation)
◦ (Testphase)
◦ (Refactoring)
Programmiersprachen
◦ Compiler / Interpreter
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Rückblick II: „Programmiersprachen II“
Datentypen
◦
◦
◦
◦
bool
int
float
[…]
Programmierpraxis C++
◦ Elementare Konzepte
Datentypen
Variablen
Kontrollstrukturen
Objektorientierung
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Themenüberblick 11.01.2012
„Algorithmen und Datenstrukturen“
Objektorientierung
Datenstrukturen
◦
◦
◦
◦
Stack / Kellerspeicher
Queue
Liste
Baum
Traversierungsarten
Such- und Sortieralgorithmen
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Objektorientierung
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Objektorientierte Programmierung
Zentrales Konzept: Objekt
Objekt
◦ Verfügt über einen bestimmten Zustand
◦ Reagiert mit einem definierten Verhalten auf
Anforderungen / seine Umgebung
◦ Besitzt eine Identität, die es von anderen Objekten
unterscheidet
◦ Kann mit anderen Objekten verbunden sein
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Martial Arts Objects
Human
attribute 1: name
attribute 2: gender
attribute 2: two legs
attribute 3: two arms
behaviour 1: printName()
behaviour 2: walk()
behaviour 3: wave_arms()
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Martial Arts Objects
Human
attribute 1: name
attribute 2: gender
attribute 2: two legs
attribute 3: two arms
behaviour 1: printName()
behaviour 2: walk()
behaviour 3: wave_arms()
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Objektorientierte Programmierung
Objektzustand umfasst die Attribute und
jeweilige Verbindungen zu anderen Objekten
Attribute: unveränderliche Merkmale des Objekts;
die Attributwerte können Änderungen unterliegen
Verhalten eines Objekts wird durch eine Menge
von Operationen beschrieben
Objekt = Daten + Methoden / Operationen
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Objektorientierte Programmierung
Klassen
◦ Klasse definiert für eine Menge von gleichartigen
Objekten deren Struktur (Attribute), Verhalten
(Operationen) und Beziehungen.
◦ Stellt den Bauplan dar, nach dem die Objekte gestaltet
sind und nach dessen Vorgaben sie sich verhalten
◦ Machen‘s möglich, mehrere Daten (und ihre
Zugriffsfunktionen) zusammenzufassen, um einen
eigenen Datentyp zu modellieren:
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Klassenkonzept
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Objektorientierte Programmierung
Klassen in C++
class EineKlasse
{
public:
// öffentlicher Teil
EineKlasse()
// Konstruktor
{
klassenVariable=23;
}
~EineKlasse();
// Destruktor
int gebeVariablezurueck(void)
{
return klassenVariable;
}
private:
int klassenVariable;
// privater Teil
// private Variable
};
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Objektorientierte Programmierung
Zentrales Konzept: Kapselung Information
Hiding
Objekte und Funktionen, die mit der Klasse
arbeiten, erhalten nur Informationen über die für
sie relevanten Teile der Klasse
Der Zugriff auf die Membervariablen der Klasse
wird verborgen und möglich gemacht über
entsprechende Methoden der Klasse, z.B. die
Memberfunktion / Methode
gebeVariablezurueck()
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Objektorientierte Programmierung
Zentrales Konzept II: Vererbung
Eine Klasse kann Elemente (Variablen, Konstanten, Funktionen) von
anderen Klassen erben
Beispiel C++:
class Person
{
string name;
//...
};
class Mitarbeiter : Person
{
long sozialversicherungsNr;
//...
};
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Objektorientierte Programmierung
Die Klasse Mitarbeiter erbt von der Klasse Person die
entsprechenden Methoden, um auf die Klassenelemente
zuzugreifen und bildet den Spezialfall „Mitarbeiter“ ab, indem sie
die Variable sozialversicherungsNr verwendet:
class Person
{
string name;
//...
};
class Mitarbeiter : Person
{
long sozialversicherungsNr;
//...
};
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Objektorientierte Programmierung
Vererbung beschreibt eine Beziehung zwischen einer
allgemeinen Klasse (Basisklasse) und einer
spezialisierten Klasse.
Die spezialisierte Klasse ist vollständig konsistent mit der
Basisklasse, enthält aber zusätzliche Informationen
(Attribute, Operationen).
Die allgemeine Klasse wird auch als Oberklasse (engl.
super class), die spezialisierte Klasse als Unterklasse
(engl. sub class) bezeichnet.
Das Konzept der Vererbung ist nicht nur dazu gedacht, um
gemeinsame Eigenschaften und Verhaltensweisen
zusammenzufassen, sondern sie muss immer auch eine
Generalisierung bzw. Spezialisierung darstellen, d.h.
jedes Objekt der Unterklasse "ist ein" Objekt der
Oberklasse.
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Algorithmen,
Datenstrukturen
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Algorithmen, Datenstrukturen
Algorithmus: Eindeutige Beschreibung eines
endlichen Verfahrens zur Lösung einer
bestimmten Klasse von Problemen
Komplexität eines Algorithmus: Bedarf an
Ressourcen (i.e. Rechenzeit und Speicherplatz)
Güte eines Algorithmus:
◦ Qualität der Ergebnisse
◦ Laufzeit / Rechenbedarf des Algorithmus
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Algorithmen, Datenstrukturen
Datentyp:
◦ Bauplan für eine Variable (benannte Speicherstelle im
Arbeitsspeicher des Rechners)
◦ Legt fest, welche Operationen mit einer Variable möglich
sind
◦ Bestimmt die interne Darstellung (Repräsentation) der
Variablen im Rechner
◦ Z.B. bool, int, float, double, unsigned int, etc.
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Algorithmen, Datenstrukturen
Datenstruktur = Daten + Funktionen
Datenstrukturen:
◦ Stacks (Stapel)
◦ Queues
◦ Listen
Einfach verkettete Listen
Doppelt verkettete Listen
◦ Bäume
Binärbäume
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Stack
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Datenstruktur Stack
Stack
◦ Auch: „Kellerspeicher“
◦ Abstrakter Datentyp, bei dem Elemente eingefügt und
wieder entfernt werden können
◦ LIFO-Prinzip: Last In, First Out – bei der
Datenstruktur „Stack“ kann immer nur auf das Element
zugegriffen werden, das als letztes eingefügt, d.h. auf
den Stapel gelegt wurde
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Datenstruktur Stack
Stackoperationen / Schnittstellen
◦ push(x, s)
legt ein Element x auf den Stack s
◦ top(s)
liefert das zuletzt auf den Stack s gelegte Element (ohne
das entsprechende Element zu entfernen)
◦ pop(s)
entfernt das zuletzt auf den Stack s gelegte Element und
gibt es zurück
◦ isEmpty(s)
gibt an, ob der Stack s leer ist
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Datenstruktur Stack: Die Praxis
Leerer Stack mit dem Namen audiocdstapel
Prüfen, ob Stack leer über Funktion
isEmpty(audiocdstapel) gibt TRUE zurück
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Datenstruktur Stack: Die Praxis
Schritt I: Element auf den Stapel legen push
push(„boards of canada – music has the right to
children“, audiocdstapel)
Stack „audiocdstapel“ vor push(…)
Stack „audiocdstapel“ nach push(…)
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Datenstruktur Stack: Die Praxis
Schritt II: Zahlreiche push-Vorgänge später:
◦ push(„boards of canada – music has the right to children“,
audiocdstapel)
◦ push(„Amon Tobin– Foley Room“, audiocdstapel)
◦ …
◦ push(„John Coltrane – My Favorite Things“, audiocdstapel)
◦ push(„Q-Tip – The Renaissance“, audiocdstapel)
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Datenstruktur Stack: Die Praxis
Schritt III: Prüfen, welche CD zuletzt auf den
Stapel gelegt wurde top
top(audiocdstapel) gibt „Q-Tip – The
Renaissance“ zurück.
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Datenstruktur Stack: Die Praxis
Schritt IV: Letztes Stapelelement ausgeben und
von Stapel nehmen pop
pop(audiocdstapel) gibt „Q-Tip – The
Renaissance“ zurück. Stapel nach
pop(audiocdstapel):
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Datenstruktur Stack: Die Praxis
Anwendungsbeispiel C++: Gehe den Stapel durch und
suche nach einer CD
while(! isEmpty(audiocdstapel))
{
currentaudiocd=pop(audiocdstapel);
if(currentaudiocd == mycd)
{
print „CD gefunden“;
return currentaudiocd;
}
}
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Queue
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Queue
Queue, auch „Warteschlange“
geordnete Liste, in der alle Einfügungen an einem Ende
und alle Löschungen am entgegengesetzten Ende stattfinden
Operationen:
◦ enQueue Objekt hinzufügen
◦ deQueue Objekt zurückgeben, anschließend entfernen
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Queue
FIFO First In, First Out
Beispiele: Druckerwarteschlange, Warteschlange im
Supermarkt
„Wer zuerst da ist, mahlt zuerst“
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Listen
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Contra Stack / Queue
Stacks / Queues: Elemente dürfen nur am Anfang
oder am Ende eingefügt bzw. entnommen werden
Nachteil Stack / Queue: Sollen beliebige Elemente
an beliebiger Stelle eingefügt oder gelöscht
werden, wird‘s bei sequentieller Eintragung recht
aufwändig
Lösung Liste: Folge von Elementen, in der an
beliebiger Stelle neue Elemente eingefügt oder
vorhandene Elemente entfernt werden können
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Einfach verkettete Liste
Liste Folge von Elementen; jedes Element =
Teil einer Kette
Jeder Eintrag in der Liste verfügt nicht nur über
seinen Inhalt, sondern darüber hinaus über einen
Zeiger auf das nächste Listenelement:
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Einfach verkettete Liste
Um die Liste zu durchlaufen:
◦ Beginn beim ersten Element („Anker“ für den Beginn der
Liste)
◦ „next“ zeigt auf das nächste Listenelement
◦ Letztes Glied der Kette: next-Zeiger = NULL
◦ Um wieder auf das erste Element zugreifen zu können:
anfang-Zeiger auf das erste Element der Liste
◦ Hilfszeiger auf innere Elemente: cursor
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Einfach verkettete Liste
Element Einfügen:
◦ Ursprüngliche Liste:
start
bat
cat
sat
vat
NULL
◦ Liste nach Einfügen von Element „mat“
start
bat
cat
sat
vat
NULL
mat
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Einfach verkettete Liste
Element Löschen:
◦ Ursprüngliche Liste:
start
bat
cat
sat
vat
NULL
◦ Liste nach Entfernen des Elements „cat“
start
bat
cat
sat
vat
NULL
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Einfach verkettete Liste
Vorteil:
◦ Elemente lassen sich sehr schnell am Anfang der einfach
verketteten Liste einfügen
Nachteil: Über jedes einzelne Element muss
iteriert werden
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Doppelt verkettete Liste
Charakteristika: Jedes Element verfügt über
◦ Einen Inhalt
◦ Einen Zeiger auf das nachfolgende Element
◦ Einen Zeiger auf das vorhergehende Element
start
bat
cat
sat
vat
NULL
Vorteile
◦ Möglichkeit, vom Ende der Liste zum Beginn zu iterieren
◦ Schnelles Löschen und Einfügen von Elementen
Nachteil
◦ Speicherplatzbedarf durch zweiten Zeiger höher
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Themenüberblick „Algorithmen und Datenstrukturen“
Datenstrukturen √
◦
◦
◦
◦
Stack / Kellerspeicher √
Queue √
Liste √
Baum
Traversierungsarten
Such- und Sortieralgorithmen
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Bäume
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Bäume
Möglichkeit, hierarchische
Strukturen darzustellen,
Beispiel: Stammbaum
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Kleine Baumschule
Baum = Menge von Knoten und Kanten, die
besondere Eigenschaften aufweisen:
◦ Wurzel: Jeder Baum besitzt genau einen Knoten, der als
Wurzel bezeichnet wird
◦ Kante: Jeder Knoten ist außer der Wurzel durch genau
eine Kante mit seinem Vaterknoten (auch: „Elternknoten“
oder „Vorgänger“) verbunden
Wird dann auch als Kind (Sohn, Nachfolger) dieses
Knotens genannt
◦ Blatt: Ein Knoten ohne Kinder
◦ Innere Knoten: Alle anderen Knoten
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Bäume
Baum: Begrifflichkeiten
Wurzel
Kante
Innerer Knoten / Kindknoten
Blatt
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Bäume
„Höhe“ des Baumes:
Niveau 0
Niveau 1
Niveau 2
Baumhöhe = 3
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Bäume
Anwendung in:
◦ (Stammbäumen)
◦ Dateibäume:
Knoten sind Dateien oder Verzeichnisse
Kanten führen von einem Verzeichnis zu dessen
Unterverzeichnissen oder Unterdateien
◦ …
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Binärbäume
Binärbaum ist definiert als ein Baum, dessen
Knoten über höchstens zwei Kindknoten verfügen
dürfen:
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Traversierung
Traversieren Jeden Knoten des Baumes
besuchen
Reihenfolge, in der die Knoten besucht werden:
◦
◦
◦
◦
Preorder, auch: „Hauptreihenfolge“ / Tiefensuche
Inorder, auch: „symmetrische Reihenfolge“
Postorder, auch: „Nebenreihenfolge“
Levelorder, auch: „Breitensuche“
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung
Rekursive Regel:
◦ besuche die Wurzel
◦ Besuche den linken
Unterbaum
◦ Besuche den rechten
Unterbaum
WLR
Quelle: http://de.wikipedia.org/w/index.php?title=Datei:Depth-First-Search.gif&filetimestamp=20090326120256 (MRE)
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung – Schritt 0
P
M
S
A
L
E
A
R
T
E
E
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung – Schritt 1
P
M
S
A
L
E
A
R
T
Ausgabe: P
E
E
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung – Schritt 2
P
M
S
A
L
E
A
R
T
Ausgabe: P M
E
E
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung – Schritt 3
P
M
S
A
L
E
A
R
T
Ausgabe: P M S
E
E
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung – Schritt 4
P
M
S
A
L
E
A
R
T
Ausgabe: P M S A
E
E
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung – Schritt 5
P
M
S
A
L
E
A
R
T
Ausgabe: P M S A A
E
E
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung – Schritt 6
P
M
S
A
L
E
A
R
T
Ausgabe: P M S A A L
E
E
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung – Schritt 7
P
M
S
A
L
E
A
R
T
Ausgabe: P M S A A L E
E
E
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung – Schritt 8
P
M
S
A
L
E
A
R
T
Ausgabe: P M S A A L E R
E
E
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung – Schritt 9
P
M
S
A
L
E
A
R
T
Ausgabe: P M S A A L E R T
E
E
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung – Schritt 10
P
M
S
A
L
E
A
R
T
Ausgabe: P M S A A L E R T E
E
E
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Preorder Traversierung – Schritt 11
P
M
S
A
L
E
A
R
T
Ausgabe: P M S A A L E R T E E
E
E
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Bäume und die Praxis: XPath: Navigation
Knotenbeziehungen Achsen:
Elternknoten (parent) – Jedes Element
verfügt über einen Elternknoten.
Ausnahme: ???
Vorfahre (ancestor) – Elternknoten von
Knoten
Beispiel: Der Knoten „2“ ist Vorfahre des
Knotens „3“.
Kind (child) – Untergeordnete Knoten
Beispiel: „3“ ist Kindknoten von „2“.
Geschwister (siblings): Knoten mit
gleichen Elternknoten sind
Geschwisterknoten.
Beispiel: Der Knoten „3“ ist
Geschwisterknoten des Knotens „4“.
1
6
5
2
3
4
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Themenüberblick „Algorithmen und Datenstrukturen“
Datenstrukturen √
◦
◦
◦
◦
Stack / Kellerspeicher √
Queue √
Liste √
Baum √
Traversierungsarten √
Preorder √
Inorder √
Postorder √
Levelorder √
Such- und Sortieralgorithmen
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Such- und
Sortieralgorithmen
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Kasus knacktus
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Problemstellung Suche
Problemstellung: Wie finden wir eine gesuchte
Audio CD?
Umgebungsvariablen:
◦ CD-Sammlung unsortiert
◦ Sortierte CD-Sammlung
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Lineare Suche
Sequenzielle / Lineare Suche in unsortierter
Sammlung:
Anzahl Suchvorgänge bei n Elementen:
Anzahl der Suchschritte steigt proportional mit der
Anzahl der Einträge
◦ minimal: 1(best case),
◦ maximal: n (worst case)
Durchschnittlich müssen die Hälfte der Einträge
durchgesehen werden, um das gewünschte Element zu finden
(average case)
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Quelle und Bildnachweis: http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo1.php
Sortieralgorithmen
Sortierstrategien / -Verfahren:
◦ Insertionsort: Sortieren durch Einfügen
Analog dem Vorgehen eines Kartenspielers: Neue
Karten werden einzeln einsortiert, bevor die nächste
Karte aufgenommen wird
◦ Bubblesort: Vergleichsbasierter Sortieralgorithmus
◦ Heapsort
◦ Quicksort (von C.A.R. Hoare)
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Bubblesort
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Bubblesort
Bubblesort: Sortiert z.B. ein Array von Datensätzen durch
wiederholtes Vertauschen von Nachbarfeldern, die in
falscher Reihenfolge stehen
Wird so lange wiederholt, bis das Array vollständig sortiert
ist.
Dabei wird das Array in mehreren Durchgängen von links
nach rechts durchwandert.
Bei jedem Durchgang werden alle Nachbarfelder
verglichen und ggf. vertauscht. Nach dem 1. Durchgang
hat man folgende Situation:
◦ Das größte Element ist ganz rechts.
◦ Alle anderen Elemente sind zwar zum Teil an besseren
Positionen (also näher an der endgültigen Position), im
Allgemeinen aber noch unsortiert.
Wandern des größten Elementes nach rechts Aufsteigen
von Luftblasen: Größte Luftblase steigt nach oben
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Bubblesort
Zu sortieren ist die Zahlenfolge 55 07 78 12 42
(vgl. http://de.wikipedia.org/wiki/Bubblesort)
1. Durchlauf:
55 07 78 12 42
07 55 78 12 42
07 55 78 12 42
07 55 12 78 42
???
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Bubblesort
Zu sortieren ist die Zahlenfolge 55 07 78 12 42
(vgl. http://de.wikipedia.org/wiki/Bubblesort)
2. Durchlauf:
07 55 12 42 78
07 55 12 42 78
07 12 55 42 78
07 12 42 55 78
07 12 42 55 78
3. Durchlauf:
07 12 42 55 78
07 12 42 55 78
07 12 42 55 78
07 12 42 55 78 Fertig sortiert.
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Binäre Suche
Binäre Suche in sortierter Sammlung:
Gegebenheiten: Suchschlüssel und sortierte Liste von Einträgen
Start der Suche bei mittlerem Eintrag; Vergleich des Suchschlüssels mit
dem Eintrag
Ist der gesuchte Eintrag gefunden, so ist die Suche beendet
Ansonsten: Suche in der linken oder der rechten Hälfte der Einträge - je
nachdem, ob der gelesene Schlüssel größer oder kleiner war als der
Suchschlüssel
Verfahren so lange, bis der Eintrag gefunden ist oder bis keine
Halbierung des Suchraums mehr möglich ist (d.h. man ist an der Stelle
angekommen, an der der Eintrag eigentlich stehen müsste).
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Quelle und Bildnachweis: http://www-i1 informatik rwth-aachen de/~algorithmus/algo1 php
Binäre Suche
Leistung: Wie viele Suchschritte müssen wir
vollziehen, um den gewünschten Eintrag zu
finden?
Beim ersten Suchvorgang halbieren wir die Menge
der Einträge
Beim zweiten Suchvorgang halbieren wir die
(halbierte) Menge der Einträge erneut
Komplexität: Wir benötigen log2(n) Suchvorgänge,
um in einem Array mit n Einträgen das
gewünschte Element zu finden
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
/
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>
Hausaufgaben
Aufgabe 1: Erläutern Sie den Begriff „information hiding“ und
das dahinter stehende Konzept. Erläutern Sie in diesem Kontext
der objektorientierten Programmierung die Konzepte "Objekt",
"Klasse", "Attribut" und "Vererbung“.
Aufgabe 2: Erläutern Sie sowohl das LIFO-, als auch das FIFOPrinzip und referieren Sie jeweils eine Datenstruktur, die nach
dem FIFO- und eine Datenstruktur, die nach dem LIFO-Prinzip
arbeitet.
Aufgabe 3: Was bezeichnet die „Traversierung“ eines Baumes?
Welche Traversierungsarten sind Ihnen bekannt? Beschreiben
Sie kurz / stichwortartig die Vorgehensweise einer von Ihnen
ausgewählten Traversierungsart.
Aufgabe 4: Beschreiben Sie die lineare Suche und die binäre
Suche und vergleichen Sie beide Strategien hinsichtlich Effizienz
und Laufzeit.
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <jan.wieners@uni-koeln.de>