Vorlesung: Algorithmische Diskrete Mathematik Raymond Hemmecke Vertretungsprofessor für Algorithmische Diskrete Mathematik SS 2009 | TU Darmstadt | Raymond Hemmecke | 1 Inhalt der Vorlesung I Komplexitätstheorie I Datenstrukturen und Kodierungsschemata I asymptotische Notation, untere und obere Schranken I Klassen P, N P, N P -vollständig I Algorithmen auf Graphen I DFS-Algorithmus (aufspannende Bäume) I Greedy-Algorithmus (minimale aufspannende Bäume) I Dijkstra, Moore-Bellman, Yen-Variante (kürzeste Wege in Graphen) I Ford-Fulkerson (maximale Flüsse in Netzwerken, Matching in bipartiten Graphen) I Sortieren in Arrays I Mergesort, Quicksort, Heapsort I Divide-and-Conquer I untere Komplexitätsschranken für das Sortieren SS 2009 | TU Darmstadt | Raymond Hemmecke | 2 Grundlegende Begrie der Graphentheorie SS 2009 | TU Darmstadt | Raymond Hemmecke | 3 Was ist ein Graph? Graph I Ein ungerichter Graph ist ein Paar Elemente von E G = (V , E ) disjunkter Mengen, wobei die ungeordnete Paare von Elementen aus I Die Elemente aus V heiÿen Knoten, die Elemente aus V E sind. Kanten. Digraph I Ein gerichter Graph ist ein Paar Elemente von A G = (V , A) disjunkter Mengen, wobei die geordnete Paare von Elementen aus I Die Elemente aus A V sind. heiÿen Bögen oder gerichtete Kanten. SS 2009 | TU Darmstadt | Raymond Hemmecke | 4 Nachbarschaftsbeziehungen Inzidenz, Grad/Valenz I Ein Knoten v heiÿt mit einer Kante I Der Grad/die Valenz eines Knoten e v inzident, wenn v ∈e ist die Anzahl der mit gilt. v inzidenten Kanten. Adjazenz, vollständiger Graph I Zwei Knoten x und y heiÿen adjazent oder benachbart in I Sind je zwei Knoten von G benachbart, so heiÿt G G, wenn xy ∈ E (G ) vollständig. e v SS 2009 | TU Darmstadt | Raymond Hemmecke | 5 x y K4 ist. Bipartite Graphen Denition I Ein Graph heiÿt bipartit, wenn sich lässt, so dass jede Kante in E V disjunkt in zwei Teile einen Endknoten in V1 V1 und V2 zerteilen und einen Endknoten in besitzt. K3,3 Fakt → Beweis als Übungsaufgabe I Ein Graph ist genau dann bipartit, wenn er nur Kreise gerader Länge enthält. SS 2009 | TU Darmstadt | Raymond Hemmecke | 6 V2 Was sind Kreise? Pfad, Weg, Kreis I Ein Pfad ist ein nichtleerer Graph P = (V , E ) der Form V = {x0 , x1 , ... , xk }, E = {x0 x1 , x1 x2 , ... , xk−1 xk }. I Ein Weg ist ein Pfad, in dem alle I Ein Kreis ist ein nichtleerer Graph xi paarweise verschieden sind. P = (V , E ) der Form V = {x0 , x1 , ... , xk }, E = {x0 x1 , x1 x2 , ... , xk−1 xk , xk x0 }, wobei die xi paarweise verschieden sind. x0 x1 ,x4 x0 x1 x0 x2 x5 x3 Pfad SS 2009 | TU Darmstadt | Raymond Hemmecke | 7 x1 x2 x2 Weg Kreis Zusammenhangskomponenten, Bäume und Wälder Zusammenhängende Graphen I Ein Graph von v G heiÿt zusammenhängend, w in G gibt. falls es zu jedem Paar v, w ∈ V einen Weg nach I Die zusammenhängenden Teile von G heiÿen Zusammenhangskomponenten. Bäume und Wälder I Ein Baum ist ein zusammenhängender Graph, der keinen Kreis besitzt. I Ein Wald ist ein Graph, der keinen Kreis besitzt. Baum SS 2009 | TU Darmstadt | Raymond Hemmecke | 8 Wald, 2 Komponenten Komplementärgraph Komplementärgraph I Der zu G komplementäre Graph Ḡ ist der Graph Graph Fakt → Ḡ = (V , Ē ), mit Komplement Beweis als Übungsaufgabe I Mindestens einer der Graphen SS 2009 | TU Darmstadt | Raymond Hemmecke | 9 G oder Ḡ ist zusammenhängend. ij ∈ Ē ⇔ ij 6∈ E . Untergraphen, aufspannende Untergraphen Untergraph, aufspannende Untergraphen I I G 0 = (V 0 , E 0 ) 0 G ⊆G heiÿt Untergraph von G = (V , E ), heiÿt aufspannender Untergraph von Graph mit Untergraph Finden eines aufspannenden Waldes I Für gegebenes G = (V , E ) SS 2009 | TU Darmstadt | Raymond Hemmecke | 10 → G, falls falls V0 ⊆ V 0 V =V und gilt. aufspannender Baum DFS-Algorithmus nde man einen aufspannenden Wald. E0 ⊆ E gilt. Probleme auf Graphen (1) Finden eines Kreises/Hamiltonischen Kreises I Entscheide für einen gegebenen Graphen G = (V , E ), ob er einen Kreis enthält. G = (V , E ), ob er einen hamiltonischen Falls ja, gib einen solchen an. I Entscheide für einen gegebenen Graphen Kreis enthält. Falls ja, gib einen solchen an. (Ein hamiltonischer Kreis ist ein Kreis, der jeden Knoten genau einmal durchläuft.) Finden eines aufspannenden Waldes I Für gegebenes G = (V , E ) → DFS-Algorithmus nde man einen aufspannenden Wald. Maximales Matching I Finde für gegebenen Graphen G = (V , E ) so dass je zwei Kanten nicht inzident sind. SS 2009 | TU Darmstadt | Raymond Hemmecke | 11 die maximale Anzahl von Kanten aus E, Probleme auf Graphen (2) Maximale stabile Mengen/Cliquen I Finde für gegebenen Graphen G = (V , E ) die maximale Anzahl von Knoten aus so dass je zwei Knoten nicht benachbart sind. I Finde für gegebenen Graphen → G = (V , E ) die maximale → Clique Anzahl von Knoten aus so dass je zwei Knoten benachbart sind. Kürzeste Wege I Für gegebenes G = (V , E ) und gegebenen Kantengewichten kürzesten Weg zwischen zwei gegebenen Knoten v und cij nde man einen w. Färbungsproblem I Finde für gegebenen Graphen dass sich die Knoten von G G = (V , E ) die minimale Anzahl k von Farben, k Farben färben lassen, dass benachbarte so mit Knoten unterschiedlich gefärbt sind. SS 2009 | TU Darmstadt | Raymond Hemmecke | 12 V, stabile Menge so V, Asymptotische Notation SS 2009 | TU Darmstadt | Raymond Hemmecke | 13 Asymptotische Notation Obere Schranken: I Sei O -Notation g : N → R. Dann bezeichnet O(g ) := {f : N → R : ∃c > 0, n0 ∈ N die Menge aller Funktionen n0 ∈ N mit |f (n)| ≤ c|g (n)| ∀n ≥ n0 } f : N → R, für die zwei positive Konstanten c ∈ R n ≥ n0 gilt |f (n)| ≤ c|g (n)|. existieren, so dass für alle Bemerkungen I Die asymptotische Notation vernachlässigt Konstanten und Terme niedrigerer Ordnung (wie z.B. die Terme ak nk mit k<m im Polynom). Satz I Für ein Polynom f (n) = am nm + ... + a1 n + a0 SS 2009 | TU Darmstadt | Raymond Hemmecke | 14 vom Grade m gilt f ∈ O(nm ). und Vergleich Die nachfolgende Tabelle zeigt, wie sechs typischen Funktionen anwachsen, wobei die Konstante gleich und O(n log n) 1 gesetzt wurde. Wie man feststellt, zeigen die Zeiten vom Typ ein wesentlich schwächeres Wachstum also die anderen. log n 0 1 2 3 4 5 n 1 2 4 8 16 32 SS 2009 | TU Darmstadt | Raymond Hemmecke | 15 n log n 0 2 8 24 64 160 n2 1 4 16 64 256 1024 n3 1 8 64 512 4096 32768 2n 2 4 16 256 65536 4294967296 O(n) Untere Schranken Ω- und Θ-Notation f , g : N → R. Dann ist f ∈ Ω(g ), wenn n0 ∈ N existieren, so dass für alle n ≥ n0 gilt: I Seien zwei positive Konstanten c∈R und |f (n)| ≥ c|g (n)|. I f ∈ Θ(g ), wenn es positive Konstanten c1 , c2 ∈ R n ≥ n0 gilt c1 |g (n)| ≤ |f (n)| ≤ c2 |g (n)|. I Falls f ∈ Θ(g ), dann ist g und n0 ∈ N gibt, so dass für alle sowohl eine obere als auch eine untere Schranke für f. Beispiel: Sequentielle Suche I Sei f (n) die Anzahl von Vergleichen bei der sequentiellen Suche nach einem bestimmten Wert in einem unsortierten Array mit f ∈ O(n), da man ja mit n n Komponenten. Dann ist Vergleichen auskommt. I Andererseits muss man auch jede Komponente überprüfen, denn ihr Wert könnte ja der gesuchte Wert sein. Also SS 2009 | TU Darmstadt | Raymond Hemmecke | 16 f ∈ Ω(n) und damit f ∈ Θ(n). Ein weiteres Beispiel Matrixmultiplikation n × n Matrizen ergibt sich die Berechnung P C = A · B gemäÿ cij = nk=1 aik · bkj . Sie erfordert also n Multiplikationen und n − 1 Additionen. I Bei der Matrixmultiplikation von Eintrags cij eines von C also n2 Einträge cij zu berechnen, und somit n2 (n + n − 1) = 2n3 − n2 = O(n3 ) arithmetische Operationen insgesamt I Insgesamt sind für ganz auszuführen. I Da jeder Algorithmus für die Matrixmultiplikation n2 Einträge berechnen muss, folgt andererseits, dass jeder Algorithmus zur Matrixmultiplikation von zwei 2 Matrizen Ω(n ) Operationen benötigt. I Es klat zwischen Ω(n2 ) und O(n3 ) also noch eine Komplexitätslücke. Die schnellsten bekannten Algorithmen zur Matrixmultiplikation kommen mit Operationen aus. SS 2009 | TU Darmstadt | Raymond Hemmecke | 17 n×n O(n2,376 ) Komplexitätstheorie SS 2009 | TU Darmstadt | Raymond Hemmecke | 18 Was ist ein Problem? Denition I Ein Problem ist eine allgemeine Fragestellung, bei der mehrere Parameter oen gelassen sind und für die eine Lösung oder Antwort gesucht wird. I Ein Problem ist dadurch deniert, dass alle seine Parameter beschrieben werden und dass genau angegeben wird, welche Eigenschaften eine Antwort (Lösung) haben soll. I Sind alle Parameter eines Problems mit expliziten Daten belegt, dann sprechen wir von einem Problembeispiel (Instanz). Beispiel I Finde einen kürzesten Hamiltonischen Kreis. I Oene Parameter: Anzahl Städte, Entfernungen SS 2009 | TU Darmstadt | Raymond Hemmecke | 19 Algorithmen Was ist ein Algorithmus? I Ein Algorithmus ist eine Anleitung zur schrittweisen Lösung eines Problems. Wir sagen, ein Algorithmus A löst ein Problem I ∈ Π, Π, falls A für alle Problembeispiele eine Lösung in einer endlichen Anzahl an Schritten ndet. I Ein Schritt ist eine elementare Operation: Addieren, Subtrahieren, Vergleichen, Multiplikation, Division. I Die Laufzeit eines Algorithmus ist die Anzahl der Schritte, die notwendig sind zur Lösung des Problembeispiels. Forschungsschwerpunkte zu Algorithmen I Entwurf von Algorithmen I Berechenbarkeit: Was kann durch einen Algorithmus berechnet werden? I Komplexität von Algorithmen I Korrektheit von Algorithmen SS 2009 | TU Darmstadt | Raymond Hemmecke | 20 Komplexität von Algorithmen SS 2009 | TU Darmstadt | Raymond Hemmecke | 21 Was ist Ezienz? Was ist Ezienz? I Komplexitätstheorie I Speicher- und Laufzeitkomplexität Trivial I Laufzeit eines Algorithmus hängt ab von der Gröÿe der Eingabedaten I Laufzeitanalyse erfordert eine Beschreibung, wie Problembeispiele dargestellt werden (Kodierungsschema) I Notwendigkeit exakter Denitionen I geeignetes Rechnermodell SS 2009 | TU Darmstadt | Raymond Hemmecke | 22 → Turing-Maschine Kodierungsschema Ganze Zahlen I Ganze Zahlen werden binär dargestellt, d.h. wir schreiben n=± k X xi · 2i , i=0 mit xi ∈ {0, 1} und k = blog2 (|n|)c. I D.h. die Kodierungslänge hni einer ganzen Zahl n ist gegeben durch die Formel hni = dlog2 (|n| + 1)e + 1 = blog2 (|n|)c + 2, wobei +1 wegen des Vorzeichens + oder −. Rationale Zahlen I Sei r ∈ Q. Dann existieren p∈Z und q ∈ Z, teilerfremd, mit hr i = hpi + hqi SS 2009 | TU Darmstadt | Raymond Hemmecke | 23 r= p . q Kodierungsschema (2) Vektoren I Für x = (x1 , ... , xn )| ∈ Qn ist hxi = n X hxi i. i=1 Matrizen I Für A ∈ Qm×n ist hAi = m X n X haij i. i=1 j=1 SS 2009 | TU Darmstadt | Raymond Hemmecke | 24 Rechnermodell Nach Festlegung der Kodierungsvorschrift muss ein Rechnermodell entworfen werden, auf dem unsere Speicher- und Laufzeitberechnungen durchgeführt werden. In der Komplexitätstheorie: Turing-Maschine (ein ganz normaler Computer) Unendliches Band, auf dem Lese-/Schreiboperationen durchgeführt werden −1 0 lesen/schreiben 1 2 3 4 Programm Prozessor stellt Operationen zur Verfügung: +, −, *, /, vergleichen, löschen, schreiben, lesen SS 2009 | TU Darmstadt | Raymond Hemmecke | 25 Ablauf eines Algorithmus auf der TuringMaschine Algorithmus A soll Problembeispiel I des Problems Π lösen. Alle Problembeispiele liegen in kodierter Form vor. Inputlänge I Die Anzahl der Speicherplätze, die nötig sind, um Inputlänge, I vollständig anzugeben, heiÿt hI i. Der Algorithmus liest die Daten und beginnt dann, Operationen auszuführen, d.h. Zahlen zu berechnen, zu speichern, zu löschen. Speicherbedarf I Die Anzahl der Speicherplätze, die während der Ausführung des Algorithmus mindestens einmal benutzt werden, nennen wir Speicherbedarf von von I. SS 2009 | TU Darmstadt | Raymond Hemmecke | 26 A zur Lösung Laufzeit Informell A zur Lösung von I ist die Anzahl elementarer Operationen. Dazu +, −, ∗, /, Vergleich, Löschen, Schreiben, Lesen von rationalen Zahlen. I Die Laufzeit von zählen Dies ist jedoch zu unpräzise! I Zur Darstellung der entsprechenden Zahlen werden mehrere Bits benötigt. → Für jede Operation müssen wir mehrere Bits zählen. Korrekte Denition I Die Laufzeit von Operationen, die A A zur Lösung von I ist deniert durch die Anzahl elementarer ausgeführt hat, um I zu lösen, multipliziert mit der gröÿten Kodierungslänge der während der Berechnung aufgetretenen ganzen oder rationalen Zahl. SS 2009 | TU Darmstadt | Raymond Hemmecke | 27 Laufzeitfunktion, Speicherplatzfunktion (worstcase) Laufzeitfunktion, polynomielle Laufzeit I Sei A ein Algorithmus zur Lösung eines Problems fA (n) = max{Laufzeit heiÿt Laufzeitfunktion von I Der Algorithmus A Π. Die Funktion fA von A zur Lösung von : N → N, I : I ∈ Π, hI i ≤ n} A. hat eine polynomiale Laufzeit (kurz: Algorithmus), wenn es ein Polynom p:N→N A ist ein polynomialer gibt mit fA (n) ≤ p(n) für alle n ∈ N. Speicherplatzfunktion, polynomieller Speicherbedarf I Die Speicherplatzfunktion sA :N→N sA (n) = max{Speicherbedarf I Der Algorithmus q:N→N A gibt mit von von A A ist deniert durch zur Lösung von I : I ∈ Π, hI i ≤ n}. hat polynomialen Speicherbedarf, falls es ein Polynom sA (n) ≤ q(n) SS 2009 | TU Darmstadt | Raymond Hemmecke | 28 für alle n ∈ N. Weitere Bemerkungen Bemerkungen I Nehmen wir an, wir ermitteln die Rechenzeit Algorithmus. Die Variable n f (n) für einen bestimmten kann z.B. die Anzahl der Ein- und Ausgabewerte sein, ihre Summe, oder auch die Gröÿe eines dieser Werte. Da f (n) maschinenabhängig ist, genügt eine a priori Analyse nicht. Jedoch kann man mit Hilfe einer a priori Analyse ein g bestimmen, so dass f ∈ O(g ). I Wenn wir sagen, dass ein Algorithmus eine Rechenzeit O(g ) hat, dann meinen wir damit folgendes: Wenn der Algorithmus auf unterschiedlichen Computern mit den gleichen Datensätzen läuft, und diese Gröÿe n haben, dann werden die resultierenden Laufzeiten immer kleiner sein als eine Konstante mal Suche nach der Gröÿenordnung von g zu nden, so dass f ∈ O(g ) SS 2009 | TU Darmstadt | Raymond Hemmecke | 29 gilt. f |g (n)|. Bei der werden wir darum bemüht sein, das kleinste Die Klassen P , N P , N P -vollständig SS 2009 | TU Darmstadt | Raymond Hemmecke | 30 Die Klasse P Was ist ein Entscheidungsproblem? I Problem, das nur zwei mögliche Antworten besitzt, ja oder nein. I Beispiele: Ist Die Klasse P: n eine Primzahl? oder Enthält G einen Kreis? informelle Denition I Klasse der Entscheidungsprobleme, für die ein polynomialer Lösungsalgorithmus existiert Die Klasse P: formale Denition I Gegeben ein Kodierungsschema I I E und ein Rechnermodell Π E sei ein Entscheidungsproblem, wobei jede Instanz aus Π gehört zur Klasse Π M. durch Kodierungsschema kodierbar sei. P (bzgl. E und M ), wenn es einen auf Algorithmus zur Lösung aller Problembeispiele aus auf M polynomial ist. SS 2009 | TU Darmstadt | Raymond Hemmecke | 31 Π M implementierbaren gibt, dessen Laufzeitfunktion Die Klasse N P Motivation → →P I Enthält G einen Kreis? I Enthält G einen hamiltonischen Kreis? Die Klasse N P: → schwieriger → NP informelle Denition I Entscheidungsproblem I einfach Π gehört zur Klasse Ist die Antwort ja für I ∈ Π, N P, wenn es folgende Eigenschaft hat: dann kann Korrektheit dieser Aussage mit Hilfe eines geeigneten Zusatzobjekts in polynomialer Laufzeit überprüft werden. Beispiel: Enthält G einen hamiltonischen Kreis? I Geeignetes Zusatzobjekt wäre ein hamiltonischer Kreis. I Es muss nun lediglich geprüft werden, ob der angegebene Kreis tatsächlich ein hamiltonischer Kreis von SS 2009 | TU Darmstadt | Raymond Hemmecke | 32 G ist. Die Klasse N P (2) Formale Denition I Entscheidungsproblem Π gehört zu (a) Für jedes Problembeispiel mindestens ein Objekt Q, N P, I ∈ Π, wenn es die folgende Eigenschaften hat: für das die Antwort ja lautet, gibt es mit dessen Hilfe die Korrektheit der ja-Antwort überprüft werden kann. (b) Es gibt einen Algorithmus, der Problembeispiele I ∈Π und Zusatzobjekte als Input akzeptiert und der in einer Laufzeit, die polynomial in überprüft, ob I Q hI i Q ist, ein Objekt ist, aufgrund dessen Existenz eine ja-Antwort für gegeben werden muss. Bemerkungen I Es wird keine Aussage über die Berechenbarkeit eines geeigneten Q gemacht. Q kann auch geraten werden. I Da der Überprüfungsalgorithmus Q lesen muss, muss hQi polynomial in I Es wird keine Aussage zu möglicher nein-Antwort gemacht. SS 2009 | TU Darmstadt | Raymond Hemmecke | 33 → coNP hI i sein! Charakterisierung besonders schwieriger Probleme in N P Polynomiale Transformation von Problemen I Gegeben seien zwei Entscheidungsprobleme I Eine polynomiale Transformation von Π Π und Π0 . Π0 ist ein polynomialer Algorithmus, I ∈ Π, ein (kodiertes) Problembeispiel in der, gegeben ein (kodiertes) Problembeispiel I 0 ∈ Π0 produziert, so dass folgendes gilt: I Die Antwort auf Die Klasse I ist genau dann ja, wenn die Antwort auf I0 ja ist. N P -vollständig I Ein Entscheidungsproblem andere Problem aus NP SS 2009 | TU Darmstadt | Raymond Hemmecke | 34 Π heiÿt N P -vollständig, falls Π ∈ N P und Π transformiert werden kann. polynomial in falls jedes Bemerkung und Fragen Bemerkung I Falls ein N P -vollständiges Entscheidungsproblem Π in polynomialer Zeit gelöst werden kann, so gilt das auch für jedes andere Problem aus Π N P − vollständig und N P: Π ∈ P ⇒ P = N P. I Diese Eigenschaft zeigt, dass (bzgl. polynomialer Lösbarkeit) kein Problem in schwieriger ist als ein Existieren I NP N P -vollständiges. N P -vollständige Probleme? Ja. (x1 ∨ x̄2 ∨ x3 ) ∧ (...) ∧ ... = 3-SAT: Oene Fragen SS 2009 | TU Darmstadt | Raymond Hemmecke | 35 P = NP ∩ NP = coN P P = 6 NP coN P TRUE Komplexität von Optimierungsproblemen SS 2009 | TU Darmstadt | Raymond Hemmecke | 36 Die Klasse N P -schwer Transformation in Entscheidungsproblem I Sei O ein Maximierungsproblem (Minimierungsproblem). Man legt zusätzlich zur Instanz I I noch eine Schranke Gibt es für I B fest und stellt die Frage: eine Lösung, deren Wert nicht kleiner (gröÿer) als B ist? I Damit ist ein Optimierungsproblem polynomial in ein Entscheidungsproblem transformierbar. Die Klasse N P -schwer: formale Denition I Ein Optimierungsproblem Entscheidungsproblem wenn O Π O heiÿt N P -schwer, falls es ein N P -vollständiges Π in polynomialer Zeit gelöst werden kann, gibt, so dass in polynomialer Zeit gelöst werden kann. Beispiele I Rucksackproblem, Maschinenbelegung, stabile Menge maximaler Kardinalität, Clique maximaler Kardinalität, minimale Knotenüberdeckung SS 2009 | TU Darmstadt | Raymond Hemmecke | 37 Beispiel Traveling Salesman Problem I Input: Instanz I ist charakterisiert durch eine Distanzmatrix cij ∈ Z ∀i, j ∈ V , |V | = n. I Problem: Finde einen bzgl. c minimalen Hamiltonischen Kreis in Kn . I TSP-Entscheidungsproblem: B ∈ Z. I Input wie beim TSP, I Problem: Existiert eine TSP-Tour der Länge ≤ B ? Lemma I Polynomialer Algorithmus zur Lösung des TSP-Entscheidungsproblems würde polynomialen Algorithmus zur Lösung des TSP implizieren. SS 2009 | TU Darmstadt | Raymond Hemmecke | 38 Lösung: Binäre Suche Beweis Kn ist ein ganzzahliger Wert im Intervall s = min{cij : i, j ∈ V , i = 6 j} und t = max{cij : i, j ∈ V , i 6= j}. I Länge eines hamiltonischen Kreises in [ns, nt], wobei I Rufe TSP-Entscheidungsproblem mit oder untere Schranke ns auf, passe obere Schranke nt je nach Ergebnis an und iteriere. I Insgesamt reichen demnach SS 2009 | TU Darmstadt | Raymond Hemmecke | 39 c B = b n(s+t) 2 log(nt − ns) Iterationen aus.