Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS 06 20.4.

Ähnliche Präsentationen


Präsentation zum Thema: "Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS 06 20.4."—  Präsentation transkript:

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

2 Kürzeste Wege in gewichteten Graphen Gegeben sei ein Graph G als Adjazenzliste mit Gewichten, d.h. für jede Kante (u,v) sei zusätzlich ein Gewicht W(u,v) gespeichert (wenn (u,v) keine Kante ist wird W(u,v)= 1 gesetzt). Wir suchen kürzeste Wege von einem Startknoten s zu anderen Knoten Das Gewicht eines Weges von u nach v sei die Summe der Kantengewichte Die Distanz von u und v sei das minimale Gewicht eines Weges von u nach v Minimale Wege müssen nicht die wenigsten Kanten haben!

3 Varianten Single-Source Shortest-Path: Finde von s aus kürzeste Pfade zu allen anderen Knoten All-Pairs Shortest-Path: Finde die kürzesten Pfade zwischen allen Paaren von Knoten Zuerst betrachte wir das SSSP Problem

4 Beobachtung Wir betrachten Graphen ohne Zyklen negativer Länge Betrachte einen minimalen Weg von s nach v Dann gilt: Alle Teilwege beginnend ab s sind ebenfalls minimal Idee für Algorithmen: Bestimme Wege mit weniger Kanten zuerst Wir benutzen Schätzungen d(v), zu Anfang d(s)=0 und d(v)= 1 sonst Erzeugen im Laufe des Algorithmus bessere Schätzungen

5 Speicherung der Wege Für jeden Knoten v speichern wir einen Vorgänger (v), zu Beginn ist dieser auf NIL gesetzt Die Vorgänger sollen am Ende einen zur Wurzel s gerichteten Baum minimaler Wege bilden

6 Relaxierung einer Kante Grundlegende Operation Relax(u,v,W) if d(v)>d(u)+W(u,v) then d(v):=d(u)+W(u,v); (v):=u D.h. wenn es eine bessere Schätzung für v gibt, erneuere diese

7 Beobachtungen Folgende Eigenschaften gelten für jede Folge von Relax Operationen 1. d(v) ¸ (s,v) zu jeder Zeit (per Induktion, Übung) 2. Somit: Knoten mit (s,v)= 1 haben immer d(v)= 1 3. Sei s u v ein kürzester Pfad mit Endkante (u,v) und d(u)= (s,u) zu einer Zeit. Nach Relaxierung der Kante (u,v) gilt d(v)= (s,v) d(v) · d(u)+W(u,v) nach der Relaxierung = (s,u)+W(u,v) = (s,v), wegen der Minimalität von Teilwegen

8 Dijkstras Algorithmus Löst das single-source shortest-path problem Voraussetzung: W(u,v) ¸ 0 für alle Kanten Idee: speichere Knoten so, dass Knoten mit minimaler Distanzschätzung effizient ausgewählt werden können Wähle einen solchen Knoten, relaxiere alle Kanten zu seinen Nachbarn Bis alle Knoten ausgewählt Korrektheitsidee: für Knoten mit minimaler Distanzschätzung ist diese bereits korrekt

9 Datenstruktur Speichert n Knoten zusammen mit ihrem Distanzwert Wir brauchen folgende Operationen: ExtractMin: Finde einen Knoten v mit minimalem d(v), entferne ihn DecreaseKey(v,x): Ersetze die Distanzschätzung von Knoten v durch x (x ist kleiner als bisherige Schätzung) Initialisierung Diese Operationen reichen aus, um Dijkstras Algorithmus zu implementieren

10 Dijkstras Algorithmus Initialisiere (v)=NIL für alle v und d(s)=0, d(v)= 1 sonst S= ; sei Menge der abgearbeiteten Knoten Q=V While Q ; u:=ExtractMin S:=S [ {u} und Q:=Q-{u} Für alle Nachbarn v von u: Relax(u,v,W) Relax benutzt DecreaseKey

11 Dijkstras Algorithmus

12 Arbeitsprogramm: 1. Beweise Korrektheit 2. Implementiere die Datenstruktur 3. Analysiere Laufzeit

13 3)Laufzeit Die Laufzeit wird dominiert durch höchstens n ExtractMin Operationen und höchstens m DecreaseKey Operationen

14 2) Werden später (!) eine Datenstruktur kennenlernen, die folgende Laufzeiten erlaubt: Amortisierte Zeit von ExtractMin ist O(log n), d.h. Gesamtzeit für n Operationen O(n log n) Amortisierte Zeit von DecreaseKey ist O(1), d.h. Gesamtzeit für m Operationen O(m) Dies erlaubt Laufzeit von O(m+n log n)

15 Simple Implementierung Speichere d(v) in einem Array DecreaseKey in O(1) ExtractMin in O(n) Gesamtlaufzeit: O(n 2 ) für ExtractMin und O(m) für DecreaseKey Praktikabel für Adjazenzmatrizen

16 Korrektheit der Algorithmus Einige Beobachtungen 1. d(v) ¸ (s,v) zu jeder Zeit (per Induktion, Übung) 2. Somit: Knoten mit (s,v)= 1 haben immer d(v)= 1 3. Sei s u v ein kürzester Pfad mit Endkante (u,v) und d(u)= (s,u) zu einer Zeit. Nach Relaxierung der Kante (u,v) gilt d(v)= (s,v) 4. Wenn zu einer Zeit d(v)= 1 für alle Knoten in V-S, dann sind diese Knoten alle nicht von s erreichbar

17 Korrektheit des Algorithmus Theorem: Dijkstras Algorithmus terminiert mit d(v)= (s,v), d.h. die korrekten Distanzwerte werden berechnet. Invariante: Für alle v 2 S gilt d(v)= (s,v) Zu Beginn ist S leer, daher stimmt die Invariante Zu zeigen ist, dass der nächste gewählte Knoten v korrektes d(v) besitzt. Für s ist dies trivial wahr Für v s: Nur Knoten mit endlichem d(v) werden gewählt, oder die restlichen Knoten sind alle nicht von s erreichbar (und dann d(v) korrekt) Es gibt also einen (kürzesten) Weg von s nach v Sei p ein solcher Pfad, und y der erste Knoten ausserhalb von S auf diesem Pfad, x dessen Vorgänger

18 Korrektheit des Algorithmus Behauptung: d(y)= (s,y), wenn v eingefügt wird Damit: d(v) · d(y)= (s,y) · (s,v). QED Zeigen Behauptung: d(x)= (s,x) per Induktion Kante (x,y) wurde bereits relaxiert, d.h. nach Beobachtung 3.) gilt d(y)= (s,y).

19 Korrektheit des Algorithmus Also ist zu jeder Zeit d(v) korrekt für alle Elemente von S Am Ende des Algorithmus ist S=V, somit sind alle Distanzen korrekt berechnet. Noch zu zeigen: Auch die Wege selbst werden korrekt berechnet. Übung

20 Das single-source shortest- path Problem mit negativen Gewichten Gegeben Graph G, Gewichtsfunktion W auf den Kanten, Startknoten s Ausgabe: Ein Bit, das anzeigt, ob ein Zyklus negativer Länge von s erreichbar ist, wenn nicht, dann kürzeste Pfade von s zu allen anderen Knoten.

21 Bellman-Ford Algorithmus Initialisiere d(s)=0, d(v)= 1 sonst For i=1 to n-1: Relaxiere alle Kanten (u,v) Für jede Kante (u,v): wenn d(v)>d(u)+W(u,v), Ausgabe: es existiert ein negativer Zyklus Bemerkung: d(v) und (v) enthalten Distanz und Vorgänger

22 Laufzeit Der Algorithmus läuft offensichtlich in Zeit O(nm)


Herunterladen ppt "Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS 06 20.4."

Ähnliche Präsentationen


Google-Anzeigen