HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Algorithmen und Komplexität Teil 1: Grundlegende Algorithmen WS 08/09 Friedhelm Meyer auf der Heide Vorlesung 5, 27.10.08 Friedhelm Meyer auf der Heide 1 Organisatorisches HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Neuer Raum: • Montags in P5.203 ist möglich, für Dienstag ist im Moment kein Hörsaal frei. • Wir bleiben in F1 110. Übungen: • Algorithmen sind immer zu kommentieren, Korrektheitsbeweis und Laufzeitanlyse (nicht nur Ergebnis) gehört dazu. • Wir werden auf jedem Aufgabenblatt Aufgaben haben, in denen sie effiziente Algorithmen für Beispielprobleme finden und analysieren müssen. Friedhelm Meyer auf der Heide 2 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Greedy Algorithmen Friedhelm Meyer auf der Heide 3 Greedy-Algorithmen HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Wir wissen: Greedy-Algorithmen für z.B. Bruchteil Rucksack und Minimale Spannbäume sind optimal. Greedy-Algorithmen für z.B. 0-1 Rucksack ist sehr schlecht. Greedy-Algorithmen für z.B. Bin Packing (First Fit, Best Fit) sind 2-Approximationen, also gut, wenn auch nicht optimal. Kann man einem Problem “ansehen”, ob der zugehörige Greedy-Algorithmus optimal ist? Friedhelm Meyer auf der Heide 4 Matroide HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Sei E eine endliche Menge, U eine Familie von Teilmengen von E. (E,U) ist ein Teilmengensystem, falls gilt: • ∅∈U • Für jedes B ∈ U ist auch jedes A⊆ B ∈ U. (Vererbungseigenschaft) (E,U) ist ein Matroid, falls zusätzlich gilt: • Für alle A, B ∈ U mit |A| < |B| gibt es x∈ B mit A∪{x} ∈ U. (Austauscheigenschaft) B∈U ist maximal, falls keine Obermenge von B in U ist. (Bem: in einem Matroid sind alle maximalem Mengen gleich groß.) Optimierungsproblem zu (E,U): Bestimme zu Gewichtsfunktion w:E → R eine maximale Menge aus U mit maximalem Gewicht. Friedhelm Meyer auf der Heide 5 Teilmengensysteme und der kanonische Greedy-Algorithmus HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Der kanonische G.A. für Rucksack ist sehr schlecht (haben wir gezeigt) Der kanonische G.A. für MST ist optimal, haben sie in DuA gezeigt: Kruskals Algorithmus Friedhelm Meyer auf der Heide 6 Greedy-Algorithmen und Matroide HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Friedhelm Meyer auf der Heide 7 Noch ein interessantes Matroid: Matching für links-knotengewichtete bipartite Graphen HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Gegeben sei ein bipartiter, gewichteter Graph G=(L ∪ R, K, w) mit positiven Knotengewichten w(e) für die Knoten aus L. Ein Matching in G ist eine Menge von paarweise disjunkten Kanten. Ein maximales Matching ist eins mit maximalem Gewicht (seiner linken Knoten.) Friedhelm Meyer auf der Heide 8 Das bipartite-Matching Matroid HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Wähle E=L. B⊆ L ist in U, falls es ein Matching mit “linker Seite” B in G gibt. Satz: (E,U) ist ein Matroid. Bew: (i) ∅ ∈ U (klar) (ii) B ∈ U, A⊆ B ⇒ A ∈ U (klar) Wir müssen die Austauscheigenschaft nachweisen. Friedhelm Meyer auf der Heide 9 Beweis der Austauscheigenschaft HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Wähle E=L. B⊆ L ist in U, falls es ein Matching mit “linker Seite” B in G gibt. Z.z.: Bew: Betrachte die Kantenmengen X und Y, die zu den Matchings für A und B gehören. Betrachte den durch X ∪ Y induzierten Graphen H. • H besteht aus – isolierten Kanten, die rot, blau oder rot/blau sein können. – disjunkten Wegen, die aus abwechselnd roten und blauen Kanten bestehen. • H hat mehr rote als blaue Kanten Also: Es gibt rote isolierte Kante (mit linkem Knoten v ∈ B\A) oder Weg der Länge > 1 mit mehr roten als blauen Kanten. Friedhelm Meyer auf der Heide 10 HEINZ NIXDORF INSTITUTE Beweis der Austauscheigenschaft University of Paderborn Algorithms and Complexity Also: Es gibt rote isolierte Kante (mit linkem Knoten v ∈ B\A) oder Weg P der Länge > 1 mit mehr roten als blauen Kanten. Im ersten Fall: A ∪ {v} ∈ U Im zweiten Fall: P hat ungerade Länge, beginnt und endet mit roter Kante v ∈ B\A A ∪ {v} ∈ U, da die roten Kanten ein Matching bilden. Friedhelm Meyer auf der Heide 11 Übungsaufgabe HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Nutzen sie obige Überlegungen, um einen effizienten Algorithmus zur Berechnung eines maximalen Matchings in einem (links Knoten-)gewichteten bipartiten Graphen anzugeben. Bem: Es ist auch nicht zu schwierig, maximale Matchings bzgl. Kantengewichten zu berechnen. (Augmenting Paths Methode; wir kommen darauf später zurück, wenn wir über Flussprobleme reden.) Die zugrunde liegende Struktur ist dann der “Durchschnitt zweier Matroide.” Friedhelm Meyer auf der Heide 12 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Shortest paths problems Friedhelm Meyer auf der Heide 13 Shortest paths problems HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Friedhelm Meyer auf der Heide 14 Shortest paths problems HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Friedhelm Meyer auf der Heide 15 Negative edge weights HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity In the sequel, we assume that there are no negative edge weights. Friedhelm Meyer auf der Heide 16 Single source shortest paths HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Dijkstra‘s algorithm The algorithm works by keeping, for each vertex v of G, the cost d[v] of the shortest path found so far between s and v, and the current predecessor previous[v] on this path. Initialization: initSSSP(G,s) d[s]=0, d[v] = ∞ for all other vertices v ; Previous[v] = undefined for all vertices v . When the algorithm finishes, previous[v] should point to the predecessor of v on a shortest path from s to v, d[v] should be its length (or infinity, if no such path exists). Friedhelm Meyer auf der Heide 17 initSSSP(G,s) HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Friedhelm Meyer auf der Heide 18 HEINZ NIXDORF INSTITUTE Dijkstra‘s algorithm University of Paderborn Algorithms and Complexity The basic operation of Dijkstra's algorithm is edge relaxation for an edge (u,v): relax(u,v) If d(v) > d(u)+w(u,v) then begin d(v) is replaced by d[u]+w(u,v); previous[v] is replaced by u end v relax(u,v) u Friedhelm Meyer auf der Heide 19 Dijkstra‘s algorithm HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity The algorithm maintains two sets of vertices S and Q. Set S contains all vertices v for which we know that the value d[v] is already the cost of a shortest path. Set Q contains all other vertices. Set S starts empty, and in each step one vertex is moved from Q to S. This vertex u is chosen as the vertex from Q with lowest value of d[u]. When a vertex u is moved to S, the algorithm relaxes every outgoing edge (u,v), i.e., invokes relax(u,v) Friedhelm Meyer auf der Heide 20 Dijkstra‘s algorithm HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Friedhelm Meyer auf der Heide 21 HEINZ NIXDORF INSTITUTE Dijkstra‘s algorithm University of Paderborn Algorithms and Complexity Decrease key Lemma: After each run of the while-loop, d(u) = δ(s,u) for each u ∈ S. Clearly, this lemma implies the correctness. Friedhelm Meyer auf der Heide 22 Dijkstra‘s algorithm, correctness HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Lemma: After each run of the while-loop, d(u) = δ(s,u) for each u ∈ S. Proof: (i) Lemma holds for the first run, because then S={s} and d(s)=δ(s,s)=0. (ii) If x1, .. ,xm is a shortest path, each sub-path xi, .., xj is one as well. Assume that the lemma does not hold. Let u be the first node inserted into S with d(u)>δ(s,u). By (i), s ≠ u. Consider a shortest path from s to u : Claim: d(y)= δ(s,y). Proof: u is the first node inserted into S with d(u)>δ(s,u). Thus d(x) = δ(s,x). When x was inserted into S, relax(x,y) was executed. Thus, after that operation, d(y) is the length of the path p1 - y. By (ii), this is a shortest path. Friedhelm Meyer auf der Heide 23 Dijkstra‘s algorithm, correctness HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Lemma: After each run of the while-loop, d(u) = δ(s,u) for each u ∈ S. Proof: (i) Lemma holds for the first run, because then S={s} and d(s)=δ(s,s)=0. (ii) If x1, .. ,xm is a shortest path, each subpath xi, .., xj is one as well. Assume that the lemma does not hold. Let u be the first node inserted into S with d(u)>δ(s,u). By (i), s ≠ u. Consider a shortest path from s to u : We have shown: d(y)= δ(s,y) Thus d(y) = δ(s,y) δ(s,u) < d(u). This contradicts the rule of Dijkstra‘s algorithm: „Choose the vertex u with lowest value of d[u]“ !!! (y would have been a better choice.) Friedhelm Meyer auf der Heide 24 HEINZ NIXDORF INSTITUTE Dijkstra‘s algorithm University of Paderborn Algorithms and Complexity Decrease key Friedhelm Meyer auf der Heide 25 HEINZ NIXDORF INSTITUTE Dijkstra‘s algorithm University of Paderborn Algorithms and Complexity Time bound: |V| times “extract min”, |E| times “Decrease key” dominate the runtime. Store Q in a linear array: “Extract min” time O(|V|), “Decrease key” time O(1) ⇒ Time: O(|V|2 + |E|) = O(|V|2) Store Q in a Fibonacci-Heap: “Extract min” and “Decrease key” need time O(log(|V|)) ⇒ Time: O((|V| + |E|) log(|V|)) = O(|E| log(|V|)) Friedhelm Meyer auf der Heide 26 Dijkstra‘s algorithm HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Animation in a geometric graph: Edge weight = Euclidean distance Friedhelm Meyer auf der Heide 27 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Thank you for your attention! Friedhelm Meyer auf der Heide Heinz Nixdorf Institute & Computer Science Department University of Paderborn Fürstenallee 11 33102 Paderborn, Germany Tel.: +49 (0) 52 51/60 64 80 Fax: +49 (0) 52 51/62 64 82 E-Mail: [email protected] http://www.upb.de/cs/ag-madh Friedhelm Meyer auf der Heide 28