Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Effiziente Algorithmen

Ähnliche Präsentationen


Präsentation zum Thema: "Effiziente Algorithmen"—  Präsentation transkript:

1 Effiziente Algorithmen
Hartmut Klauck Universität Frankfurt SS 06 30.5.

2 Linearzeit Algorithmen?
Berechnung minimaler Spannbäume Wenn m¸ n log n erreichen wir Linearzeit mit Prims Algorithmus Sonst? Es ist bekannt, dass minimale Spannbäume in Laufzeit O(m (m,n)) berechnet werden können, für die inverse Ackermann Funktion  (m,n)· 4 für alle denkbaren Eingaben Algorithmus ist sehr komplex

3 Linearzeit Unser Ziel ist ein Linearzeit Algorithmus, der randomisiert ist Wir brauchen einen weiteren Algorithmus als Basis: Boruvka

4 Boruvka Idee: An jedem Knoten wählen wir die billigste Kante (diese ist somit leicht für einen Schnitt) Wir kontrahieren die so gebildeten Knotenmengen und iterieren Nach O(log n) Phasen alles kontrahiert

5 Boruvka Eine Unterroutine [„Boruvka Phase“]
Eingabe: Graph G, Gewichte W (paarweise verschieden) Bestimme für jeden Knoten u eine kleinste inzidente Kante eu={u,v} Betrachte den Graphen G‘=(V,[u {eu}) und bestimme dessen Zusammenhangskomponenten Kontrahiere alle Zusammenhangskomponenten zu Knoten in einer neuen Knotenmenge V‘ Durchlaufe Kantenmenge E von G: Entferne alle Selbstkanten (für V‘) Ersetzte Mehrfachkanten durch die Kante kleinsten Gewichts.

6 Boruvka Sortiere alle Kanten
Iteriere Boruvka Phasen, bis nur noch ein Knoten übrig ist In jeder Phase speichere Kanten eu. Gib die gespeicherten Kanten aus.

7 Implementierung Schritt 1 und 2 mit Adjazenzlisten
Speichere Zusammenhangskomponenten als Pointer auf einen Repräsentantenknoten (Wurzel des Suchbaums) Schritt 3 so implizit Schritt 4: durchlaufe alle Kanten (aufsteigendes Gewicht) Füge alle Kanten in neue Adjazenzliste ein, ausser Selbstkanten bezüglich V‘ Ignoriere Mehrfachkanten implizit: später wird einfach die leichteste Kante als die erste in der Liste bestimmt Laufzeit einer Boruvka Phase somit O(n+m)

8 Laufzeit Eine Knoten heisse aktiv, wenn er nach Phase i noch im Graphen vorhanden ist, d.h. noch als Repräsentant einer Zusammenhangskomponente In jeder Runde wird die Anzahl aktiver Knoten mindestens halbiert: Jeder Knoten sucht sich einen Nachbarn Im worst case bilden die gewählten Kanten ein Matching Laufzeit damit O(m log n)

9 Korrektheit Wir wählen die Kanten eu als Kanten des Spannbaums
Zu zeigen: Diese bilden Spannbaum: pro Phase wählt jeder Knoten genau einen Nachbarn Zyklus bei dieser Wahl ergäbe Widerspruch (da Kantengewichte paarweise verschieden) Am Schluss sind alle Zusammenhangskomponenten verbunden Der Baum ist minimal, da alle gewählten Kanten sicher sind

10 Zusammenfassung Wir erhalten Algorithmen, die in Laufzeit O(m+n log n) das Spannbaumproblem lösen Boruvkas Algorithmus läuft in Zeit O((m+n) log n), wird unsere Grundlage für einen randomisierten Algo mit Linearzeit sein.

11 Vorbereitungen Sei F ein Spannwald in G=(V,E)
Knoten u,v liegen in derselben Zusammenhangskomponente in F, dann sei gF(u,v) das Gewicht der schwersten Kante auf dem Weg u! v in F Ansonsten setze gF(u,v)=1 Eine Kante e={u,v} heisst F-schwer, falls gF(e)<W(e), sonst F-leicht Alle Kanten in einem Spannwald F sind F-leicht

12 Vorbereitungen Beobachtung: Sei F irgendein Spannwald von G
Kein minimaler Spannbaum T von G enthält eine F-schwere Kante Beweis: Sei e={u,v} F-schwer, und in T Betrachte Weg p von u! v in F Alle Kanten in p sind leichter als e Es gibt eine Kante e‘ in p, die einen Kreis in T schliesst Einfügen von e‘ und Entfernen von e gibt einen besseren Spannbaum, Widerspruch zur Optimalität von T

13 Ansatz Angenommen wir haben einen Spannwald F
F-leichte Kanten verbessern den Wald, wenn sie entweder Bäume verbinden, oder mit F einen Zyklus bilden, auf dem eine grössere Kante liegt F-schwere Kanten sind nutzlos Wir benötigen einen Algorithmus zur Bestimmung schwerer Kanten

14 Ein Ergebnis Es gibt einen Algorithmus, der auf ungerichteten Graphen mit nichtnegativen Gewichten, und auf einem Wald F alle F-schweren Kanten identifiziert. Die Laufzeit ist O(n+m) Tatsächlich ist dies auch ein Algorithmus zur Verifikation der Minimalität eines gegebenen Spannbaums.

15 Der randomisierte Algorithmus
Eingabe: ungerichteter Graph G mit Gewichten W Führe 3 Boruvka Phasen aus, erhalte neuen Graphen H [dieser hat · n/8 Knoten]; Q sei die Menge der durch Boruvka gewählten Kanten; wenn Graph zu einem Knoten kontrahiert gebe Q aus Für jede Kante e in H entferne e mit Wahrscheinlichkeit ½, erhalte Graph H* Bestimme einen minimalen Spannwald T1 in H* rekursiv Bestimme alle T1-schweren Kanten in H und entferne diese aus H Bestimme einen minimalen Spannbaum T2 für H rekursiv Gib T2 [ Q aus

16 Eine Behauptung Theorem 12.1:
Sei H* ein Teilgraph von H, der entsteht, indem jede Kante mit Wahrscheinlichkeit 1-p entfernt wird. Sei F ein minimaler Spannwald in H* Dann ist die erwartete Zahl von T-leichten Kanten in H durch n/p beschränkt Intuition: H* sollte eine gute „Stichprobe“ für H ergeben, wenige T-leichte Kanten in H heisst wenige Kanten müssen noch „getestet“ werden

17 Laufzeit Schritte 2,3,5 in Zeit O(n+m)
Wir werden auf folgende Rekursion geführt: T(n,m) sei die erwartete Laufzeit bei n Knoten und m Kanten T( O(1), O(1) ) =O(1) T(n,m)· T(n/8, m/2) per Induktion und Linearität des Erwartungswertes +T(n/8, n/4) durch Theorem O(m+m) Auflösung: T(m,n)=O(m+n)

18 Zur Korrektheit Ausgabe bildet einen Spannbaum [wenn G zusammenhängend ist, sonst Spannwald mit 1 Baum pro Komponente] Beweis per Induktion, Basis wenn G nach 3 Boruvka Phasen zu 1 Knoten kontrahiert Induktion: Kanten aus den Boruvka Phasen korrekt, Kanten in T2 bilden Spannbaum welcher diese verbindet per Induktion In Schritt 5 entfernte Kanten liegen in keinem minimalen Spannbaum, ohne diese ist der Graph also noch zusammenhängend Minimalität analog: Per Induktion: Boruvka Phasen korrekt T2 minimaler Spannbaum per Induktion Entfernung der T1 schweren Kanten beeinflusst Minimalität nicht


Herunterladen ppt "Effiziente Algorithmen"

Ähnliche Präsentationen


Google-Anzeigen