12 Graphenalgorithmen II

Werbung
Datenstrukturen & Algorithmen
Matthias Zwicker
Universität Bern
Frühling 2010
Graphenalgorithmen
• Minimale Spannbäume
• Kürzeste Pfade
2
Minimale Spannbäume
Beispielproblem
• Stadt besteht aus Menge von Häusern und
Strassen
• Jede Strasse verbindet genau 2 Häuser
• Kosten, um Strasse zwischen Haus u und v
zu reparieren ist w(u,v)
w(u v)
• Ziel: repariere Strassen, so dass
– Alle Häuser verbunden
– Totale Reparaturkosten minimal
3
Minimale Spannbäume
Modellierung als Graph
• Ungerichteter Graph G=(V, E)
• Kantengewichte w(u,v)
( ) für Kanten u,v in E
• Finde Teilmenge T der Kanten so dass
– T verbindet alle Knoten (T ist ein Spannbaum)
P
– Kosten w(T ) = (u,v)∈T w(u, v) werden
minimiert
• Spannbaum mit minimalen Kosten über
alle Spannbäume ist minimaler Spannbaum
(minimal spanning tree, MST)
4
Generischer Algorithmus
• Konstruiere Teilmenge A von Kanten
• Starte mit leerer Menge
• Füge eine Kante nach der anderen in A ein
• Invariante: A ist eine Teilmenge eines MST
– Füge nur Kanten ein, die Invariante erhalten
– Kante (u,v) heisst sicher, wenn A ∪ {(u, v)}
auch Teilmenge eines MST
– D.h., füge nur sichere Kanten hinzu
5
Generischer Algorithmus
• IInitialisierung:
iti li i
L
Leere M
Menge erfüllt
füllt IInvariante
i t
• Fortsetzung:
g Da nur sichere Kanten
hinzugefügt werden bleibt A Teilmenge eines
MST
• Terminierung: Alle Kanten, die zu A
hinzugefügt wurden sind in MST. Bei
Terminierung der
d Schleife
hl f ist A ein
Spannbaum, der auch minimal ist.
6
Auffinden von sicheren Kanten
Definitionen: S Teilmenge von V, A Teilmenge von E
• Schnitt (S,V
(S,V-S):
S): eine Partitionierung der Knoten V in
disjunkte Mengen S und V-S
• Kante ((u,v)
, ) in E kreuzt den Schnitt,, falls ein Knoten
in S und der andere in V-S
• Schnitt respektiert
p
Kantenmenge
g A,, wenn keine
Kante in A den Schnitt kreuzt
• Kante ist eine leichte Kante,, wenn sie einen Schnitt
kreuzt und das kleinste Gewicht aller Kanten hat,
die den Schnitt kreuzen
Theorem: Sei A Teilmenge eines MST, (S,V-S) Schnitt,
der A respektiert, (u,v) leichte Kante, die (S,V-S)
kreuzt Dann ist (u,v)
kreuzt.
(u v) sicher für A.
A
7
Beweis
• Sei T MST der A beinhaltet
• Wenn (u,v)
( ) nicht in T,
T zeige dass
wir MST T´ mit (u,v) konstruieren
können
– T´ : Wähle eine Kante (x,y) in T, die
S h itt k
Schnitt
kreuzt,
t ersetze
t mit
it (u,v)
( )
– Weil (u,v) leichte Kante, w(u,v)< w (x,y)
• T´ ist Spannbaum, Gewicht ist
kleiner gleich T => T´ ist MST
• (u,v) ist sicher für A, weil A
vereinigt mit (u,v) in T
T´ ist
8
Generischer Algorithmus
Während Ablauf des Algorithmus gilt:
• A ist Wald,
Wald dessen ZusammenhangsZusammenhangs
komponenten Bäume sind
– Keine Zyklen in Zusammenhangskomponenten!
– Bäume können aus einzelnen Knoten bestehen
• Jede für A sichere Kante verbindet zwei
Komponenten
• Zu Beginn hat jeder Baum nur ein Knoten
– Es hat |V| Bäume
• In jedem Schritt wird Anzahl Bäume um eins
reduziert
– Zuletzt bleibt ein Baum übrig, der MST
9
Algorithmus von Kruskal
• Folgt direkt Idee des generischen
Algorithmus
• Find in jjedem Schritt sichere Kante,, die
dem Wald hinzugefügt werden kann
– Wähl
Wähle Kante
K
mit
i kl
kleinstem
i
G
Gewicht,
i h di
die
keinen Zyklus verursacht
10
Algorithmus von Kruskal
11
Algorithmus von Kruskal
• Analyse
(diese Operationen nicht
besprochen in Vorlesung!)
T t l O(E lg
Total
l E)
12
Algorithmus von Prim
• Teilmenge von Kanten A des MST ist immer
ein Baum
• In jedem Schritt, finde leichte Kante, die
Baum mit neuem Knoten verbindet
• Verwende Prioritätswarteschlange, um
leichte Kante zu finden
– Prioritätswarteschlange enthält Knoten nicht
erreichbar in A
– Schlüssel ist Kante mit geringstem Gewicht zu
einem Knoten erreichbar in A
• Jeder Knoten v, der hinzugenommen wird,
speichert seinen Vater (v) im Baum
13
Algorithmus von Prim
• Starte mit beliebiger Wurzel r
14
Analyse
• Mit binary heap als Prioritätswarteschlange
• Initialisierung in erster for Schleife:
O(V
( lg
g V))
• Decrease key für Wurzel r: O(lg V)
• while-Schleife:
– |V| Aufrufe von Extract-Min => O(V lg V)
– <=|V|
| | Aufrufe von Decrease-Keyy => O(E
( lgg V))
• Total O(E lg V)
15
Graphenalgorithmen
• Minimale Spannbäume
• Kürzeste Pfade
16
Kürzeste Pfade
• Intuitiv: Finde kürzesten Pfad zwischen zwei
Punkten auf einer Karte
• Eingabe: gerichteter Graph mit Kantengewichten
– Verallgemeinerung von Breitensuche auf gewichtete
Bäume
• Gewicht eines Pfades pp=<v
<v0,vv1,...,vvk>
= Summe der Kantengewichte
=
Pk
( i−1 , vi )
i=1 w(v
• Gewicht des kürzesten Pfades
17
Kürzeste Pfade
Varianten
• Einziger
g Startknoten (single-source)
( g
)
– Alle kürzesten Pfade von einem Startknoten zu allen
anderen Knoten
• Einziger
Ei ig Zi
Zielknoten
lk t ((single-destination)
i gl d ti ti )
– Alle kürzesten Pfade von allen Startknoten zu einem
Zielknoten
– Drehe Richtung aller Kanten => single-source Problem
• Festes Knotenpaar (single-pair)
– Kürzester Pfad zwischen zwei Knoten
– Kein asymptotsich schnellerer Algorithmus bekannt als für
single source
single-source
• Alle Paare (all-pairs)
– Naiv: löse single
single-source
source für alle Startknoten
– Geht besser, Kapitel 25 im Buch
18
Negative Kantengewichte
• Ok, falls keine Zyklen mit negativem
Gewicht erreichbar von Startknoten
Gewicht,
– Könnten unendlich lang im Kreis gehen um
Gewicht zu reduzieren
e Problem
oble falls
alls Zyklus
y lus vo
vom Sta
Startknoten
t ote
– Kein
nicht erreichbar
19
Zyklen
• Annahme: finde kürzeste Pfade ohne Zyklen
• Zyklen
kl mit negativem Gewicht
h
– Nicht erlaubt in Eingabe
• Zyklen mit positivem Gewicht
– Vermeidung von Zyklen führt zu kürzerem Pfad
– Kommen nicht vor in Lösung
• Zyklen mit Gewicht 0
– Führt
Füh t zu nicht-eindeutiger
i ht i d ti
Lö
Lösung
– Annahme: finde Lösung ohne Zyklen mit Gewicht 0
20
Optimale Teilstruktur
Lemma: Jeder Teilpfad eine kürzesten Pfades ist ein
kürzester Pfad
Beweis: Durch Widerspruch
• Pfad p sei kürzester Pfad von u nach v
•
•
•
•
Länge
g
Annahme: existiere kürzerer Pfad
Also
Neuer Pfad p´
• Nun
• Widerspruch, p war kein kürzester Pfad!
21
Kürzeste Pfade, ein Startknoten
Ausgabe: für jeden Knoten
• Länge des kürzesten Pfades
– Nach Initialisierung
– Wird während des Algorithmus reduziert
–
ist Schätzung des kürzesten Pfades
• Vorgängerknoten auf kürzestem Pfad
• Nach Initialisierung
• Aus
wird Vorgängerteilgraph
abgeleitet bildet Baum kürzester Pfade
abgeleitet,
22
Generischer Algorithmus
• Initialisierung
• Relaxation
• Unterschiede konkreter Algorithmen
– Reihenfolge der Relaxationen
– Anzahl Relaxationen auf jeder Kante
23
Eigenschaften kürzester Pfade
• Dreiecksungleichung
– Für alle Kanten (u,v) gilt
• Eigenschaft der oberen Schranke
– Für alle Knoten ist stets
– Sobald
bleibt d[v] konstant
• Kein-Pfad-Eigenschaft
Kein Pfad Eigenschaft
– Wenn es keinen Pfad von s nach v gibt, d.h.,
d
dann
iistt stets
t t
24
Eigenschaften kürzester Pfade
• Konvergenzeigenschaft
– Falls kürzester Pfad
dann ist nach Relax(u,v,w)
und
,
• Pfadrelaxationseigenschaft
– W
Wenn p=<v0,v1,...vk> kürzester
kü
t Pf
Pfad
d von s=v0
nach vk, und Kanten in Reihenfolge (v0,v1),
( 1,v2),...,(v
(v
)
( k-1,vk) relaxiert
l i t werden,
d
d
dann gilt
ilt
– Ungeachtet anderer Relaxationsschritte
25
Bellman-Ford-Algorithmus
• Negative Kantengewichte erlaubt
• Gibt FALSE zurück falls negative Zyklen
• Laufzeit Θ(V E)
26
Kürzeste Pfade in DAGs
• Kanten mit negativem Gewicht erlaubt
• Keine negativen Zyklen möglich
• Laufzeit Θ(V + E)
27
Dijkstra-Algorithmus
• Keine negativen Kantengewichte erlaubt
• Modifikation von Breitensuche
– Prioritätswarteschlange statt FIFO
– Schlüssel sind kürzeste Pfad Schätzungen
• Knoten aufgeteilt in zwei Teilmengen
• S = endgültiger kürzester
kür ester Pfad bestimmt
• Q = Prioritätswarteschlange = V - S
28
Dijkstra-Algorithmus
• Ähnlich wie Algorithmus von Prim, aber
Schlüssel sind Schätzung des kürzesten Pfades
• Greedy Algorithmus
• Analyse: mit binärem Heap O(E lg
l V)
29
Nächstes Mal
• Noch mehr Graphenalgorithmen
30
Herunterladen