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]>