Gliederung 1. Grundlagen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. Ausgewählte Datenstrukturen 5. Dynamisches Programmieren 6. Graphalgorithmen 7. String-Matching 8. Kombinatorische Algorithmen 9. Lineare Programmierung 6/1, olie 1 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Einordnung u Graphen werden verwendet, um eine Relation R zwischen den Objekten einer Objektmenge O zu repräsentieren, d.h. R O O = { (x,y) x,y O } bestehen aus einer Mengen V von Knoten (/* je Objekt in O gibt es einen Knoten in der Menge V */) einer Menge E von Kanten (/* wenn (x,y) R gilt, so gibt es eine Kante von x nach y */)... ein Graph G ist ein Paar (V,E), wobei V die Knotenmenge und E V V die Kantenmenge von G bezeichnet man unterscheidet gerichtete Graphen ungerichtete Graphen (/* sinnvoll, wenn R symmetrisch ist */) 6/1, olie 2 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Einordnung u Beispiel 1 O sei die Menge der herzustellenden Produkte es gilt (x,y) R gdw. das Produkt x muß fertig gestellt sein, bevor das Produkt y fertig gestellt werden kann... das ist garantiert keine symmetrische Relation V = { A,B,..., } E = { (A,B),(A,D),...,(,) } A B E D 6/1, olie 3 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Einordnung u Beispiel 2 O sei die Menge aller Städte es gilt (x,y) R gdw. es gibt eine Autobahnverbindung zwischen der Stadt x und der Stadt y... das ist offenbar eine symmetrische Relation SB V = { KL,SB,...,K } E = { {KL,SB},{KL,DA},...,{K,} } KL TR K DA 6/1, olie 4 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Repräsentation von Graphen u... prinzipielle Möglichkeiten Adjazenzmatrix zweidimensionale Tabelle t (/* als Indizes werden die Knoten verwendet */) in einer Zelle t[x][y] steht eine 1, falls es eine Kante von x nach y gibt; andernfalls eine 0 Adjazenzliste ein Array a (/* als Indizes werden die Knoten verwendet */) jede Zelle a[x] enthält einen Verweis auf eine einfach verkettete Liste, in welcher alle Knoten y vorkommen, für die gilt, daß es eine Kante von x nach y gibt... schauen uns die Möglichkeiten für ungerichtete Graphen an 6/1, olie 5 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Repräsentation von Graphen u Beispiel (/* Adjazenzmatrix */) A B E D A B D E A 0 1 0 1 0 0 B 0 0 1 0 0 0 0 0 0 0 0 0 D 0 0 0 0 1 1 E 0 0 1 0 0 0 0 0 1 0 0 0 6/1, olie 6 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Repräsentation von Graphen u Beispiel (/* Adjazenzliste */) A B E D A B D B D E E 6/1, olie 7 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
ahrplan u... diskutieren graphentheoretische Probleme, um das Zusammenspiel zwischen algorithmischen Ideen und den verwendeten Datenstrukturen zu diskutieren lernen weitere Anwendungen der Idee der dynamischen Programmierung kennen sehen wie Ideen, die auf den ersten Blick nicht sehr nahe liegend sind, trotzdem hilfreich sein können behandelte Problemstellungen topologisches Sortieren Bestimmung kürzester Wege lüsse in Netzwerken 6/1, olie 8 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Topologisches Sortieren u Grundbegriff es sei G = (V,E) ein gerichteter zyklenfreier Graph es sei V = n (/* d.h. G hat n Knoten */) es sei f(.) eine eineindeutige unktion von der Menge V in die Menge { 1,...,n }, so daß für alle x,y E gilt: wenn es in G eine Kante von x nach y gibt, so gilt f(x) < f(y) Eine unktion f(.) mit der obigen Eigenschaft nennt man topologische Sortierung der Knoten von G.... in der durch f(.) definierten Aufzählung der Knoten von G, (/* d.h. in der Aufzählung f -1 (1), f -1 (2),... */) kommen vor jedem Knoten y alle Knoten x vor, von denen es eine Kante zu y gibt 6/1, olie 9 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Toplogisches Sortieren u Beispiel 1 es sei V = { A,B,,D,E,,G } die Menge der herzustellenden Produkte es gelte (x,y) E gdw. das Produkt x muß fertig gestellt sein, bevor das Produkt y fertig gestellt werden kann B die unktionen f 1 (.) und f 2 (.) sind topologische Sortierungen der Knoten von G A D E f 1 (A) = 1, f 1 (B) = 2, f 1 (D) = 3, f 1 (E) = 4, f 1 () = 5, f 1 () = 6 f 2 (A) = 1, f 2 (D) = 2, f 2 (E) = 3, f 2 () = 4, f 2 (B) = 5, f 2 () = 6 6/1, olie 10 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Toplogisches Sortieren u Aufgabenstellung Eingabe: Ausgabe: ein gerichteter zyklenfreier Graph G = (V,E) eine topologische Sortierung f(.) der Knoten in G u zentraler Begriff: Ingrad eines Knoten es sei G = (V,E) ein gerichteter Graph Zu jedem Knoten x V bezeichne Ingrad(x) die Anzahl der Knoten y V, von denen es eine Kante zum Knoten x gibt (/* Ingrad(x) = { y (y,x) E } */). 6/1, olie 11 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Toplogisches Sortieren u prinzipielle algorithmische Idee (1) bestimme für jedes x V den Ingrad von x (2) füge alle x mit Ingrad(x) = 0 ans Ende einer anfangs leeren Warteschlange Q an (3) setze i = 1 (4) solange die Warteschlange Q nicht leer ist a) entferne das erste Element x aus der Warteschlange Q b) setze f(x) = i und i = i + 1 c) für alle y mit (x,y) E setze Ingrad(y) = Ingrad(y) - 1, wobei y ans Ende der Warteschlange Q angefügt wird, falls Ingrad(y) = 0 gilt... die Ingrade der Knoten werden in einem Array gespeichert (/* als Indizes werden die Knoten verwendet *)... die benötigte Zeit hängt von der verwendeten Repräsentation des gegebenen Graphen G = (V,E) ab (/* Schritt (1) und (4) */) 6/1, olie 12 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Toplogisches Sortieren u Illustration A B D E 0 1 3 1 1 1 A B Q = [ A ] i = 1 D E A B D E 0 0 3 0 1 1 A B D E 0 0 2 0 1 1 f(a) = 1 Q = [ B,D ] i = 2 f(b) = 2 Q = [ D ] i = 3 6/1, olie 13 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Toplogisches Sortieren u Realisierung 1 (/* mit Hilfe einer Adjazenzmatrix */) A B D E A 0 1 0 1 0 0 B 0 0 1 0 0 0 0 0 0 0 0 0 D 0 0 0 0 1 1 E 0 0 1 0 0 0 0 0 1 0 0 0 ein Array b wird benutzt (/* als Indizes werden die Knoten verwendet */), um die aktuell zu berücksichtigenden Ingrade zu speichern A B D E 0 1 3 1 1 1 6/1, olie 14 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Toplogisches Sortieren u Algorithmische Idee (/* mit Hilfe einer Adjazenzmatrix */) (1) initialisiere das Array b (/* durch Aufsummieren aller Spalten */) (2) füge alle x mit b[x] = 0 ans Ende einer anfangs leeren Warteschlange Q an (/* durch Durchlaufen des Arrays b */) (3) setze i = 1 (4) solange die Warteschlange Q nicht leer ist a) entferne das erste Element x aus der Warteschlange Q b) setze f(x) = i und i = i + 1 c) für alle y mit (x,y) E setze b[y] = b[y] - 1 (/* y wird durch Analyse der Zeile für x bestimmt */), wobei y ans Ende der Warteschlange Q angefügt wird, falls b[y] = 0 gilt... geht offenbar in Zeit O(n 2 ) + O(n) + n*o(1) + n*o(n), wobei n die Anzahl der Knoten von G ist 6/1, olie 15 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Toplogisches Sortieren u Realisierung 2 (/* mit Hilfe einer Adjazenzliste */) A B D E B E D ein Array b wird benutzt (/* als Indizes werden die Knoten verwendet */), um die aktuell zu berücksichtigenden Ingrade zu speichern A B D E 0 1 3 1 1 1 6/1, olie 16 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Toplogisches Sortieren u Algorithmische Idee (/* mit Hilfe einer Adjazenzliste */) (1) initialisiere das Array b (/* durch Durchlaufen aller Listen */) (2) füge alle x mit b[x] = 0 ans Ende einer anfangs leeren Warteschlange Q ein (/* durch Durchlaufen des Arrays b */) (3) setze i = 1 (4) solange die Warteschlange Q nicht leer ist a) entferne das erste Element x aus der Warteschlange Q b) setze f(x) = i und i = i + 1 c) für alle y mit (x,y) E setze b[y] = b[y] - 1 (/* y wird durch Durchlaufen der Liste für x bestimmt */), wobei y an das Ende der Warteschlange Q angefügt wird, falls b[y] = 0 gilt... geht offenbar in Zeit O(m) + O(n) + n*o(1) + O(m), wobei n die Anzahl der Knoten von G und m die Anzahl der Kanten von G ist 6/1, olie 17 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen
Toplogisches Sortieren u Zusammenfassung wenn der gerichtete zyklenfreie Graph G mit Hilfe einer Adjazenzmatrix repräsentiert wird, so wird die Zeit O(n 2 ) benötigt, wobei n die Anzahl der Knoten von G bezeichnet wenn der gerichtete zyklenfreie Graph G mit Hilfe einer Adjazenzliste repräsentiert wird, so wird die Zeit O(n) + O(m) benötigt, wobei n die Anzahl der Knoten von G und m die Anzahl der Kanten von G bezeichnet... da ein gerichteter zyklenfreier Graph G mit n Knoten weniger als n 2 viele Kanten hat, ist es sinnvoller, G mit Hilfe einer Adjazenzliste zu repräsentieren 6/1, olie 18 2014 Prof. Steffen Lange - HDa/bI - Effiziente Algorithmen