Basisinformationstechnologie I - Historisch

Werbung
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
Objektorientierung
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
Klassenkonzept
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
Algorithmen,
Datenstrukturen
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
Stack
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
Queue
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
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 <[email protected]>
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 <[email protected]>
Listen
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
Bäume
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
Bäume

Möglichkeit, hierarchische
Strukturen darzustellen,
Beispiel: Stammbaum
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
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 <[email protected]>
Bäume

Baum: Begrifflichkeiten
Wurzel
Kante
Innerer Knoten / Kindknoten
Blatt
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
Such- und
Sortieralgorithmen
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
Kasus knacktus
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
Bubblesort
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
/
Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Jan G. Wieners, MA <[email protected]>
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 <[email protected]>
Herunterladen