Vorlesung 3: Lubys Algorithmus Das EM-Modell 85 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Nachsatz: Halbringnotation ! Auch Bücher enthalten Fehler... ! A op1.op2 v: Abkürzung für Matrix-Vektor-Multiplikation ! Vereinbarung für Reihenfolge: A +.* v ! op1 gibt n-stelligen Operator an ! op2 gibt binären Operator an 86 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Lubys Algorithmus Eingabe: Graph G = (V, E) Ausgabe: Nicht erweiterbare unabhängige Menge I 1. I = !, G‘ = G 2. while (G‘ ist nicht der leere Graph) do a) Wähle eine zufällige Menge von Knoten S in V(G‘), indem jeder Knoten v unabhängig mit Wkt. 1/(2d(v)) gewählt wird b) Für jede Kante (u, v) in E(G‘): Falls beide Endpunkte in S sind, dann entferne den Knoten mit kleinerem Grad aus S (Konflikte beliebig auflösen). Diese neue Menge wird S‘ genannt. c) Setze I = I ∪ S ' und G ' = G '\ (S '∪ N(S ')) . 3. return I ! Die Nachbarschaft einer Knotenmenge ist die Vereinigung der einzelnen Nachbarschaften 87 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Korrektheit ! In jedem Schritt wird die Menge S‘ hinzugefügt ! S‘ ist eine unabhängige Menge ! S‘ ist unabhängig zu I wegen der Löschung von S '∪ N(S ') ! => I ist immer eine unabhängige Menge ! I ist nicht erweiterbar (maximal) ! Alle aus G‘ entfernten Knoten sind entweder aus I oder aus N(I) 88 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Laufzeit ! Theorem: Die erwartete Anzahl von Runden ist O(log m). ! Sei Gj = (Vj, Ej) der Graph nach Runde j. ! Hauptlemma: Für ein c < 1 gilt: Ex(|Ej| / |Ej-1|) < c |Ej-1| ! Kategorisierung der Knoten v: ! Gut: Mindestens 1/3 der Nachbarn haben niedrigeren Grad als v ! Schlecht: Sonst ! Intuitiv: Ein guter Knoten hat gute Chancen für Aufnahme in I ! Kategorisierung der Kanten e: ! Schlecht: Beide Endpunkte von e sind schlecht ! Gut: Sonst 89 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik X v2N (u), d(v) d(u) Viele gute Kanten 1 1 1 d(u) · = 2d(u) 2d(u) 2 6. Falls 2 V gut ist, dannkleineren Grades eines ! Lemma Definition: Dieu Nachbarschaft Knotens u in V ist definiert als: X 1Graphenalgorithmen 1 1 Grundlegende . L(u) := {v: v in N(u) d(v) d(u)} 2d(v) 6 v2N (u) Das folgende Lemma P besagt, dass ein Knoten, der für S gewählt wird, mind d(u)≥ d(u) ! Proof. Fakt:PEin Knoten 1 u ist gut, falls 1 |L(u)| 1 / 3.1 · = 6. Wahrscheinlichkeit 1/2 auch in I2d(v) aufgenommen v2N (u) 2d(v) v2L(u) 3 2d(u) wird. 1 Aus den vorigen Lemmas sichPnun folgern Lemma 5. beiden Für Knoten uu 2 VV gilt: r(uein 2 Iweiteres | u 2 S)Hilfsresultat ! Lemma: Für jeden jeden Knoten inlässt gilt: 2. 1 ! Lemma: Lemma 7. 8u 2 V, P r(u 2 I) Proof. Zum Beweis beschränken4d(u) wir. das Gegenereignis P r(u 2 / I | u 2 S) ! Lemma: danndann Pr(v in N(I))in≥I1/36. Ein Knoten Falls u 2 Sv gut wirdist, genau nicht aufgenommen, wenn ein Na 1 1 Proof. P r(u 2 I) = P r(u 2 I | u 2 S) · P r(u 2 S) 12 · 2d(v) . 4d(u) mindestens gleich großem Grad in S aufgenommen wird. Daher gilt: 8. Sei e = Tafel (u, v) eine gute Kante. Dann gilt P r(e entfernt) 1/36. ! Lemma PBeweise: siehe r(u 2 / I | u 2 S) = P r(9v 2 N (u), v 2 S, d(v) d(u) | u 2 S) XP r(e ent Proof. Ohne Beschränkung der X Allgemeinheit sei u gut. Dann lässt sich P r(v 2 S | u 2 S) P von unten durch P r(u 2 I [ N (I)) beschränken. Letzteres schätzen wir nun ab. v2N (u), d(v) d(u) v2N (u), d(v) d(u) betrachten wir zwei Fälle. Der erste ist 9v 2 N (u), d(v) 2. Nach Lemma 7 folgt 90 Graphenalgorithmen und lineare Algebra Hand inX Hand Paralleles Rechnen,1 Institut für Theoretische 1 1 Informatik, Fakultät für Informatik d(u) · 1 = 1 2d(u) 2d(u) . 2 P r(u 2 (u), I [d(v) N (I)) v2N d(u) P r(v 2 I) Anteil der guten Kanten ! Lemma: Mindestens die Hälfte der Kanten sind gut. ! Beweis: ! Richte jede Kante zu ihrem Endpunkt mit höherem Knotengrad. ! Konflikte so auflösen wie im Algorithmus. ! Jeder schlechte Knoten hat dabei mindestens doppelt so viele Kanten, die ihn verlassen, wie Kanten, die in ihn hineinführen. ! Wäre dies nicht der Fall, hätte mindestens ein Drittel der zu v adjazenten Knoten Grad d(v) oder niedriger => v wäre gut. ! Wir weisen jede schlechte Kante e, die in einen schlechten Knoten v hineinführt, an ein Paar von Kanten (gut oder schlecht) zu, die aus v hinausführen. => Jede schlechte Kante hat eindeutiges Paar. ! => Es gibt mindestens doppelt so viele Kanten insgesamt wie schlechte Kanten. ! Anders gesagt: Mindestens die Hälfte aller Kanten ist gut. 91 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Hauptlemma ! Hauptlemma (anders ausgedrückt): In jeder Runde wird mindestens jede 72. Kante (im Erwartungswert) entfernt. ! Beweis: siehe Tafel 92 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Zusammenfassung ! Unabhängige Mengen sind in Konfliktgraphen sehr nützlich ! Der triviale Algorithmus ist inhärent sequentiell ! Lubys Algorithmus bietet Vorteile: ! Parallelität: Auswahl der Knoten in jeder Phase ist voneinander unabhängig ! Laufzeitschranke: O(log n) Phasen (im Erwartungswert) ! Algebraische Implementierung passt (mit Kommentaren) auf zwei Folien ! Bessere Analysen sind bekannt: ! In jeder Iteration werden mehr Kanten gelöscht ! Die Laufzeit gilt mit hoher Wahrscheinlichkeit 93 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik DATENSTRUKTUREN UND ALGORITHMEN 94 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Ist die Datenstruktur so wichtig??? ! Wahl der Datenstruktur wichtiger Schritt beim Entwurf und der Implementierung von Algorithmen ! Dünn besetzte Graphen und Matrizen bilden keine Ausnahme ! Bei dünn besetzten Matrizen gegenseitiger Einfluss: ! Algorithmen bestimmen Wahl der Datenstruktur ! Wahl der Datenstruktur bestimmt Algorithmen ! Analyse der Algorithmen im RAM-Modell und im I/O-Modell 95 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Motivation für das EM-Modell ! Ein Rechner, insbesondere der Speicher, ist hierarchisch aufgebaut ! Register ! ... ! Grund: ??? ! Wichtig: Blockbasierter Zugriff günstiger als zufälliger ! Konzept lässt sich auf andere Bereiche übertragen: ! Parallele Kommunikation ! Stapelweise Abarbeitung 96 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik I/O-Modell = EM-Modell ! Speicher ist hierarchisch organisiert: ! ! ! ! Register Caches (L1, L2, L3) RAM SSD, HDD Cache ! External Memory-Modell: ! ! ! ! 97 2 Ebenen: Schnell und langsam Schnell: Cache oder (Haupt)Speicher Langsam: (Haupt)Speicher oder Platte Benennung nur Termini, Prinzipien gelten für jeden Ebenenübergang Graphenalgorithmen und lineare Algebra Hand in Hand RAM Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Modell-Parameter ! Speicher partitioniert in Blöcke der Größe L (Größe einer Cachezeile) ! Größe des schnellen Speichers ist Z ! Langsamer Speicher ist nicht limitiert in der Größe ! Referenziertes Datum nicht im Cache: ! Cache-Fehlzugriff ! Blocktransfer vom RAM in den Cache ! Komplexitätsmaß: Zahl der Cache-Fehlzugriffe (I/Os) ! Frage: Welche Komplexität (Anzahl I/O-Operationen) hat das Scannen eines Arrays der Länge N? 98 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Externes Sortieren Ausnahmsweise kein Graphen- oder Matrixalgorithmus! ! Eingabe: Zahlenfolge A der Länge N >> Z ! Ausgabe: A sortiert abgelegt im langsamen Speicher ! Externes Merge-Sort am Beispiel (s. Wikipedia): ! Sortiere 400 MB Daten mit 100 MB schnellem Speicher 1. Lese 100 MB Daten in schnellen Speicher und sortiere diese mit einem internen Algorithmus, bspw. Quicksort 2. Schreibe die sortierten Daten in den langsamen Speicher 3. Wiederhole 1) und 2), bis alle 100 MB-Blöcke sortiert sind. 4. Lies die ersten 20 MB (= 100 MB / (4 Blöcke + 1)) jedes sortierten Blocks in den schnellen Speicher, Rest: Ausgabepuffer 5. Führe 4-fach-Merge-Sort durch und speichere Ergebnis im Ausgabepuffer. Wenn Ausgabepuffer voll, dann in langsamen Speicher schreiben. Wenn Eingabepuffer leer, dann nächsten Block lesen 99 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Skizze und Zeitkomplexität ! Sortierphase: O(N/L) ! Merge-Phase: k-faches Mischen mit k = Z/2L ! Zeitkomplexität: O(N/L * logZ/L (N/L)) I/Os = O(sort(N)) 100 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Minimum Spanning Forest Algorithmus für RAM-Modell von Jarnik und Prim ! Eingabe: Ungerichteter gewichteter Graph G = (V, E) ! Ausgabe: Wald von Spannbäumen minimalen Gewichts ! Algorithmus (Skizze): ! Starte mit beliebigem Knoten ! Iteriere: Verbinde unbesuchten Knoten mit Baum, der über die leichteste Kante verbunden ist ! Wiederhole für weitere ZHK ! Prioritätswarteschlange speichert Knoten ! Laufzeit: ! O(m log n) mit binären Heaps ! O(m + n log n) mit Fibonacci-Heaps 101 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Beispiel ! Siehe Tafel! 102 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Minimum Spanning Forest Algorithmus für EM-Modell von [Arge et al., SWAT‘00] ! Eingabe und Ausgabe wie eben ! Änderung des Algorithmus: ! Prioritätswarteschlange PQ für EM-Modell ! PQ speichert nun Kanten anstatt Knoten: Keine Aktualisierungen nötig ! PQ enthält (mindestens) alle Kanten, die Knoten des Baums mit Knoten außerhalb verbinden ! Es können darin auch Kanten sein, die zwei Baumknoten miteinander verbinden ! Iteration des Algorithmus (sei u der aktuelle Knoten): ! Extract-min aus PQ für Kante (u, v) ! Nur falls v noch nicht im Baum: Füge v zum Baum hinzu, füge seine inzidenten Kanten außer (u, v) in PQ ein 103 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Analyse des Algorithmus Korrektheit ! Jeder Knoten im Baum fügt seine inzidenten Kanten hinzu ! PQ kann daher zwei Kopien derselben Kante beinhalten ! Annahme: Alle Kantengewichte sind verschieden ! Wenn Kante e aus PQ entfernt wird, ist ihre Kopie nächstes Minimum => zweites extract-min zum Test, ob v im Baum ! Bei gleichem Startknoten (pro ZHK) und eindeutigen Kantengewichten: Reihenfolge der bearbeiteten Knoten wie bei RAMAlgorithmus => gleiches Endergebnis 104 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Analyse des Algorithmus Laufzeit ! Die Adjazenzliste jedes Knotens wird einmal gelesen: O(n + m/L) I/Os ! O(m) Einfüge- und extract-min-Operationen ! PQ: Einfügen und extract-min in O(1/L logZ/L (n/L)) amortisierter Zeit ! Laufzeit: O((n + m/L) + m * logZ/L (m/L) / L) = O(n + sort(m)) ! Schnellere EM-Verfahren existieren 105 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik Zwischenfazit EM-Modell ! Speicherhierarchie wichtiger Aspekt eines Rechners ! Übergang der Ebenen universell ! Blockweise Abarbeitung wichtig ! Dazu Lokalität ausnutzen! ! Möglichst wenig im Speicher springen! 106 Graphenalgorithmen und lineare Algebra Hand in Hand Paralleles Rechnen, Institut für Theoretische Informatik, Fakultät für Informatik