• Keine Ergebnisse gefunden

Einf¨uhrung in die Informatik IV

N/A
N/A
Protected

Academic year: 2021

Aktie "Einf¨uhrung in die Informatik IV"

Copied!
54
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

SS 2005

Einf¨ uhrung in die Informatik IV

Ernst W. Mayr

Fakult¨at f¨ur Informatik TU M¨unchen

http://www14.in.tum.de/lehre/2005SS/info4/index.html.de

11. Juli 2005

(2)

Satz 211

In einer Union-Find-Datenstruktur mit gewichteter Vereinigung l¨ asst sich die Union-Operation in Zeit O(1), die Find-Operation in Zeit O(log n) durchf¨ uhren.

Beweis:

Die Kosten der Find-Operation sind durch die Tiefe der B¨ aume beschr¨ ankt.

Info IV

Ernst W. Mayr 1/18

(3)

Satz 211

In einer Union-Find-Datenstruktur mit gewichteter Vereinigung l¨ asst sich die Union-Operation in Zeit O(1), die Find-Operation in Zeit O(log n) durchf¨ uhren.

Beweis:

Die Kosten der Find-Operation sind durch die Tiefe der B¨ aume

beschr¨ ankt.

(4)

Bei einer Operation Find(x) durchlaufen wir im zu x geh¨ origen Baum den Pfad von x zur Wurzel r. Nach Erreichen von r k¨ onnen wir alle Kanten auf diesem Pfad direkt auf r umlenken und damit zuk¨ unftige Find-Operationen beschleunigen.

Bemerkung:

Eine andere Variante ist, f¨ ur jeden Knoten

y

auf diesem Pfad die Kante von

y

zu seinem Vater auf seinen Großvater umzulenken. Dadurch wird der Pfad i.W. durch zwei Pfade der halben L¨ ange ersetzt, die Umsetzung kann jedoch bereits beim Durchlaufen des Pfades von

x

aus zu

r

erfolgen.

Strategien wie die gerade beschriebenen zur Verk¨ urzung von Find-Suchpfaden nennt man

Pfadkompression

(engl.

path compression).

Info IV

Ernst W. Mayr 2/18

(5)

Bei einer Operation Find(x) durchlaufen wir im zu x geh¨ origen Baum den Pfad von x zur Wurzel r. Nach Erreichen von r k¨ onnen wir alle Kanten auf diesem Pfad direkt auf r umlenken und damit zuk¨ unftige Find-Operationen beschleunigen.

Bemerkung: Eine andere Variante ist, f¨ ur jeden Knoten y auf diesem Pfad die Kante von y zu seinem Vater auf seinen Großvater umzulenken. Dadurch wird der Pfad i.W. durch zwei Pfade der halben L¨ ange ersetzt, die Umsetzung kann jedoch bereits beim Durchlaufen des Pfades von x aus zu r erfolgen.

Strategien wie die gerade beschriebenen zur Verk¨ urzung von

Find-Suchpfaden nennt man

Pfadkompression

(engl.

path compression).

(6)

Bei einer Operation Find(x) durchlaufen wir im zu x geh¨ origen Baum den Pfad von x zur Wurzel r. Nach Erreichen von r k¨ onnen wir alle Kanten auf diesem Pfad direkt auf r umlenken und damit zuk¨ unftige Find-Operationen beschleunigen.

Bemerkung: Eine andere Variante ist, f¨ ur jeden Knoten y auf diesem Pfad die Kante von y zu seinem Vater auf seinen Großvater umzulenken. Dadurch wird der Pfad i.W. durch zwei Pfade der halben L¨ ange ersetzt, die Umsetzung kann jedoch bereits beim Durchlaufen des Pfades von x aus zu r erfolgen.

Strategien wie die gerade beschriebenen zur Verk¨ urzung von Find-Suchpfaden nennt man

Pfadkompression

(engl.

path compression).

Info IV 5.0 Mengendarstellungen — Union-Find-Strukturen

Ernst W. Mayr 2/18

(7)

Satz 212

Union-Find mit Pfadkompression (und ohne gewichtete Vereinigung) erfordert Zeit Θ(log n) pro Operation im worst-case.

Union-Find mit gewichteter Vereinigung und mit

Pfadkompression ben¨ otigt f¨ ur eine (beliebige) Folge von m Union- und Find-Operationen Zeit O(m log

n).

Union-Find mit gewichteter Vereinigung und mit

Pfadkompression ben¨ otigt f¨ ur eine (beliebige) Folge von m Union- und Find-Operationen Zeit O(m · α(m, n)). Dabei ist α(m, n) eine

Inverse

der Ackermannfunktion, definiert durch

α(m, n) := min{i; A i,

j

m

n

k

≥ ld n}

Beweis:

Ohne Beweis.

(8)

Satz 212

Union-Find mit Pfadkompression (und ohne gewichtete Vereinigung) erfordert Zeit Θ(log n) pro Operation im worst-case.

Union-Find mit gewichteter Vereinigung und mit

Pfadkompression ben¨ otigt f¨ ur eine (beliebige) Folge von m Union- und Find-Operationen Zeit O(m log

n).

Union-Find mit gewichteter Vereinigung und mit

Pfadkompression ben¨ otigt f¨ ur eine (beliebige) Folge von m Union- und Find-Operationen Zeit O(m · α(m, n)). Dabei ist α(m, n) eine

Inverse

der Ackermannfunktion, definiert durch

α(m, n) := min{i; A i,

j

m

n

k

≥ ld n}

Beweis:

Ohne Beweis.

Info IV 5.0 Mengendarstellungen — Union-Find-Strukturen

Ernst W. Mayr 3/18

(9)

6. Graphenalgorithmen

6.1 K¨ urzeste Pfade

Gegeben: Digraph G = (V, A), |V | = n, |A| = m, mit einer L¨ angenfunktion d : A →

Q+

, sowie ein Startknoten s ∈ V . Gesucht: f¨ ur alle t ∈ V \ {s} die Entfernung (bzw. ein k¨ urzester Pfad) von s nach t.

Im Folgenden bezeichne f¨ ur einen Knoten

v∈V

Γ

+

(v) die von

v

aus mittels einer Kante erreichbare Nachbarschaft von

v:

Γ

+

(v) =

{w∈V

; (v, w)

∈A}

(10)

6. Graphenalgorithmen

6.1 K¨ urzeste Pfade

Gegeben: Digraph G = (V, A), |V | = n, |A| = m, mit einer L¨ angenfunktion d : A →

Q+

, sowie ein Startknoten s ∈ V . Gesucht: f¨ ur alle t ∈ V \ {s} die Entfernung (bzw. ein k¨ urzester Pfad) von s nach t.

Im Folgenden bezeichne f¨ ur einen Knoten v ∈ V Γ

+

(v) die von v aus mittels einer Kante erreichbare Nachbarschaft von v:

Γ

+

(v) = {w ∈ V ; (v, w) ∈ A}

Info IV 6.1 K¨urzeste Pfade

Ernst W. Mayr 4/18

(11)

Der Algorithmus Dijkstra (G, d, s):

W

:=

{s}

for all v∈V do

ρ[v]

:=





0 falls

v

=

s d(s, v)

falls

v∈

Γ

+

(s)

sonst

pred[v] :=

(s

falls

v∈

Γ

+

(s) nil sonst

while W 6= V do

bestimme x

0

∈ V \ W so, dass ρ[x

0

] = min{ρ[v]; v ∈ V \ W } W := W ∪ {x

0

}

for all v ∈ Γ

+

(x

0

) ∩ (V \ W ) do if ρ[v] > ρ[x

0

] + d(x

0

, v) then

ρ[v] := ρ[x

0

] + d(x

0

, v); pred[v] := x

0

return ρ, pred

(12)

Der Algorithmus Dijkstra (G, d, s):

W := {s}

for all v ∈ V do

ρ[v] :=





0 falls v = s d(s, v) falls v ∈ Γ

+

(s)

∞ sonst

pred[v] :=

(

s falls v ∈ Γ

+

(s) nil sonst

while W 6=V do

bestimme

x0∈V \W

so, dass

ρ[x0

] = min{ρ[v];

v∈V \W} W

:=

W ∪ {x0}

for all v∈

Γ

+

(x

0

)

(V

\W

)

do if ρ[v]> ρ[x0

] +

d(x0, v) then

ρ[v] :=ρ[x0

] +

d(x0, v); pred[v] :=x0

return ρ, pred

Info IV

Ernst W. Mayr 5/18

(13)

Der Algorithmus Dijkstra (G, d, s):

W := {s}

for all v ∈ V do

ρ[v] :=





0 falls v = s d(s, v) falls v ∈ Γ

+

(s)

∞ sonst

pred[v] :=

(

s falls v ∈ Γ

+

(s) nil sonst

while W 6= V do

bestimme x

0

∈ V \ W so, dass ρ[x

0

] = min{ρ[v]; v ∈ V \ W } W := W ∪ {x

0

}

for all v ∈ Γ

+

(x

0

) ∩ (V \ W ) do if ρ[v] > ρ[x

0

] + d(x

0

, v) then

ρ[v] := ρ[x

0

] + d(x

0

, v); pred[v] := x

0

return ρ,

pred

(14)

Der Algorithmus Dijkstra (G, d, s):

W := {s}

for all v ∈ V do

ρ[v] :=





0 falls v = s d(s, v) falls v ∈ Γ

+

(s)

∞ sonst

pred[v] :=

(

s falls v ∈ Γ

+

(s) nil sonst

while W 6= V do

bestimme x

0

∈ V \ W so, dass ρ[x

0

] = min{ρ[v]; v ∈ V \ W } W := W ∪ {x

0

}

for all v ∈ Γ

+

(x

0

) ∩ (V \ W ) do if ρ[v] > ρ[x

0

] + d(x

0

, v) then

ρ[v] := ρ[x

0

] + d(x

0

, v); pred[v] := x

0

return ρ, pred

Info IV 6.1 K¨urzeste Pfade

Ernst W. Mayr 5/18

(15)

Satz 213

Der Algorithmus

Dijkstra

bestimmt, f¨ ur s und f¨ ur alle t ∈ V , einen k¨ urzesten Pfad bzw. die L¨ ange eines solchen von s nach t.

Bemerkung:

Wir nennen das entsprechende algorithmische Problem das

single source shortest path Problem

(sssp).

(16)

Satz 213

Der Algorithmus

Dijkstra

bestimmt, f¨ ur s und f¨ ur alle t ∈ V , einen k¨ urzesten Pfad bzw. die L¨ ange eines solchen von s nach t.

Bemerkung:

Wir nennen das entsprechende algorithmische Problem das

single source shortest path Problem

(sssp).

Info IV 6.1 K¨urzeste Pfade

Ernst W. Mayr 6/18

(17)

Beweis:

Wir zeigen folgende Invarianten:

1

∀v ∈ W :

ρ[v] = L¨ ange eines k¨ urzesten Pfades von s nach v

2

∀v ∈ V \ W :

ρ[v] = L¨ ange eines k¨ urzesten Pfades von s nach v, der als innere Knoten nur solche aus W enth¨ alt

3

die im Feld pred gespeicherten Verweise liefern jeweils die

genannten Pfade

(18)

Beweis:

Wir zeigen folgende Invarianten:

1

∀v ∈ W :

ρ[v] = L¨ ange eines k¨ urzesten Pfades von s nach v

2

∀v ∈ V \ W :

ρ[v] = L¨ ange eines k¨ urzesten Pfades von s nach v, der als innere Knoten nur solche aus W enth¨ alt

3

die im Feld pred gespeicherten Verweise liefern jeweils die genannten Pfade

Induktionsanfang: Die Invarianten sind durch die im Algorithmus erfolgte Initialisierung gew¨ ahrleistet.

Info IV

Ernst W. Mayr 7/18

(19)

Beweis:

Induktionsschritt: Betrachte den Schleifendurchlauf mit W := W ∪ {x

0

}.

Es ist gem¨ aß I.A. ρ[x

0

] gleich der L¨ ange eines k¨ urzesten Pfades von s nach x

0

, der als innere Knoten nur solche aus (dem alten) W enth¨ alt.

3.5. GRAPHENALGORITHMEN 85

W

sr

pred[xr 0] P

rx0

yr

P0

Angenommen es gibt doch einen anderen, kürzerens−x0 Pfad P0. Dann muss dieser Pfad mindestens einen Knoten enthalten, der außerhalb vonW liegt. Seiynun der erste Knoten aufP0außerhalb vonW.

Dann gilt nach Wahl vonx0:ρ[y]≥ρ[x0].

=⇒l(P0) =ρ[y] +Länge des Teilstücksy−x0 ≥ρ[x0] = l(P)(hier wird wesentlich die Eigenschaft verwendet, dass für alle Kantenl≥0ist).

Dies ist aber ein Widerspruch dazu, dass der PfadP0kürzer ist alsP. (2): Wir müssen nun auch Pfade berücksichtigen, die den Knotenx0enthalten.

for all–Schleife.

Bemerkung: Der Beweis zeigt: Der Algorithmus von Dijkstra funktioniert nur, fallsl≥0 ist.

Laufzeit: Hängt wesentlich von der Wahl der Datenstrukturen ab:

Verwendet man ein Array, so gilt:

n

|{z}

Schleife

·(O(n)

| {z } min

+O(n)

| {z } for all

) =O n2

Unter Verwendung von sogenanten Priority Queues (Vorrangwarteschlangen):

Implementiereρ[ ]als Priority Queue, wobei der Schlüssel einesv ∈ V genau der Wert ρ[v]ist. Man erhält:

Kosten pro Aufruf Anzahl Aufrufe

Bin.Heaps Fib. Heaps

Insert n O(logn) O(1)

DeleteMin n O(logn) O(logn)

DecreaseKey m

pro Kante≤1Aufruf O(logn) O(1)

Insgesamt O((n+m)·logn) O(nlogn+m)

Der Algorithmus von Floyd-Warshall

Ziel: Bestimme kürzeste Pfade zwischen allen Paaren von Knoten.

Ansatz: Verwende dynamische Programmierung.

r b b. . . .b b r

| {z }

∈ {1, . . . k}

i j V ={1, . . . , n}

Fk[i, j] :=Länge eines kürzesteni−jPfades mit Zwischenknoten∈ {1, . . . , k}

 l({i, k}) {i, j} ∈E

Angenommen, es g¨ abe einen k¨ urzeren Pfad P

0

. Sei y 6= x

0

der erste Knoten auf P

0

außerhalb W . Dann gilt nach Wahl von x

0

: ρ[y] ≥ ρ[x

0

], also

L¨ ange(P

0

) ≥ ρ[y] ≥ ρ[x

0

] = L¨ ange(P ) , und damit Widerspruch!

Info IV

Ernst W. Mayr 7/18

(20)

Beweis:

Induktionsschritt: Betrachte den Schleifendurchlauf mit W := W ∪ {x

0

}.

Es ist gem¨ aß I.A. ρ[x

0

] gleich der L¨ ange eines k¨ urzesten Pfades von s nach x

0

, der als innere Knoten nur solche aus (dem alten) W enth¨ alt.

3.5. GRAPHENALGORITHMEN 85

W

sr

pred[xr 0] P

rx0

yr

P0

Angenommen es gibt doch einen anderen, kürzerens−x0 Pfad P0. Dann muss dieser Pfad mindestens einen Knoten enthalten, der außerhalb vonW liegt. Seiynun der erste Knoten aufP0außerhalb vonW.

Dann gilt nach Wahl vonx0:ρ[y]≥ρ[x0].

=⇒l(P0) =ρ[y] +Länge des Teilstücksy−x0 ≥ρ[x0] = l(P)(hier wird wesentlich die Eigenschaft verwendet, dass für alle Kantenl≥0ist).

Dies ist aber ein Widerspruch dazu, dass der PfadP0kürzer ist alsP. (2): Wir müssen nun auch Pfade berücksichtigen, die den Knotenx0enthalten.

for all–Schleife.

Bemerkung: Der Beweis zeigt: Der Algorithmus von Dijkstra funktioniert nur, fallsl≥0 ist.

Laufzeit: Hängt wesentlich von der Wahl der Datenstrukturen ab:

Verwendet man ein Array, so gilt:

n

|{z}

Schleife

·(O(n)

| {z } min

+O(n)

| {z } for all

) =O n2

Unter Verwendung von sogenanten Priority Queues (Vorrangwarteschlangen):

Implementiereρ[ ]als Priority Queue, wobei der Schlüssel einesv ∈ V genau der Wert ρ[v]ist. Man erhält:

Kosten pro Aufruf Anzahl Aufrufe

Bin.Heaps Fib. Heaps

Insert n O(logn) O(1)

DeleteMin n O(logn) O(logn)

DecreaseKey m

pro Kante≤1Aufruf O(logn) O(1)

Insgesamt O((n+m)·logn) O(nlogn+m)

Der Algorithmus von Floyd-Warshall

Ziel: Bestimme kürzeste Pfade zwischen allen Paaren von Knoten.

Ansatz: Verwende dynamische Programmierung.

r b b. . . .b b r

| {z }

∈ {1, . . . k}

i j V ={1, . . . , n}

Fk[i, j] :=Länge eines kürzesteni−jPfades mit Zwischenknoten∈ {1, . . . , k}

Initialisierung: F0[i, j] =

l({i, k}) {i, j} ∈E

0 i=j

∞ sonst

Angenommen, es g¨ abe einen k¨ urzeren Pfad P

0

. Sei y 6= x

0

der erste Knoten auf P

0

außerhalb W . Dann gilt nach Wahl von x

0

: ρ[y] ≥ ρ[x

0

], also

L¨ ange(P

0

) ≥ ρ[y] ≥ ρ[x

0

] = L¨ ange(P ) , und damit Widerspruch!

Wir verwenden hier essentiell, dass d ≥ 0.

Info IV

Ernst W. Mayr 7/18

(21)

Beweis:

Induktionsschritt: Betrachte den Schleifendurchlauf mit W := W ∪ {x

0

}.

Es ist gem¨ aß I.A. ρ[x

0

] gleich der L¨ ange eines k¨ urzesten Pfades von s nach x

0

, der als innere Knoten nur solche aus (dem alten) W enth¨ alt.

3.5. GRAPHENALGORITHMEN 85

W

sr

pred[xr 0] P

rx0

yr

P0

Angenommen es gibt doch einen anderen, kürzerens−x0 Pfad P0. Dann muss dieser Pfad mindestens einen Knoten enthalten, der außerhalb vonW liegt. Seiynun der erste Knoten aufP0außerhalb vonW.

Dann gilt nach Wahl vonx0:ρ[y]≥ρ[x0].

=⇒l(P0) =ρ[y] +Länge des Teilstücksy−x0 ≥ρ[x0] = l(P)(hier wird wesentlich die Eigenschaft verwendet, dass für alle Kantenl≥0ist).

Dies ist aber ein Widerspruch dazu, dass der PfadP0kürzer ist alsP. (2): Wir müssen nun auch Pfade berücksichtigen, die den Knotenx0enthalten.

for all–Schleife.

Bemerkung: Der Beweis zeigt: Der Algorithmus von Dijkstra funktioniert nur, fallsl≥0 ist.

Laufzeit: Hängt wesentlich von der Wahl der Datenstrukturen ab:

Verwendet man ein Array, so gilt:

n

|{z}

Schleife

·(O(n)

| {z } min

+O(n)

| {z } for all

) =O n2

Unter Verwendung von sogenanten Priority Queues (Vorrangwarteschlangen):

Implementiereρ[ ]als Priority Queue, wobei der Schlüssel einesv ∈ V genau der Wert ρ[v]ist. Man erhält:

Kosten pro Aufruf Anzahl Aufrufe

Bin.Heaps Fib. Heaps

Insert n O(logn) O(1)

DeleteMin n O(logn) O(logn)

DecreaseKey m

pro Kante≤1Aufruf O(logn) O(1)

Insgesamt O((n+m)·logn) O(nlogn+m)

Der Algorithmus von Floyd-Warshall

Ziel: Bestimme kürzeste Pfade zwischen allen Paaren von Knoten.

Ansatz: Verwende dynamische Programmierung.

r b b. . . .b b r

| {z }

∈ {1, . . . k}

i j V ={1, . . . , n}

Fk[i, j] :=Länge eines kürzesteni−jPfades mit Zwischenknoten∈ {1, . . . , k}

 l({i, k}) {i, j} ∈E

Angenommen, es g¨ abe einen k¨ urzeren Pfad P

0

. Sei y 6= x

0

der erste Knoten auf P

0

außerhalb W . Dann gilt nach Wahl von x

0

: ρ[y] ≥ ρ[x

0

], also

L¨ ange(P

0

) ≥ ρ[y] ≥ ρ[x

0

] = L¨ ange(P ) , und damit Widerspruch!

Die beiden anderen Invarianten sind damit klar.

Info IV 6.1 K¨urzeste Pfade

Ernst W. Mayr 7/18

(22)

Eine naive Implementierung von Dijkstra’s Algorithmus (mit ρ als Array) ergibt eine Laufzeit O(n

2

).

Implementiert man dagegen

ρ

als Priority Queue (wobei jedes

v∈V

mit dem Schl¨ ussel

ρ[v] eingetragen wird), so ergibt sich

Satz 214

F¨ur die Laufzeit des Dijkstra-Algorithmus f¨ur das Single-Source-Shortest-Path-Problem gilt:

Anzahl Aufrufe Kosten pro Aufruf

BinHeaps FibHeaps

Insert

n O(logn) O(1)

ExtractMin

n−

1

O(logn) O(logn)

DecreaseKey

≤m O(logn) O(1)

Insgesamt O((n

+

m) logn) O(m

+

n

log

n)

Info IV

Ernst W. Mayr 8/18

(23)

Eine naive Implementierung von Dijkstra’s Algorithmus (mit ρ als Array) ergibt eine Laufzeit O(n

2

).

Implementiert man dagegen ρ als Priority Queue (wobei jedes v ∈ V mit dem Schl¨ ussel ρ[v] eingetragen wird), so ergibt sich Satz 214

F¨ ur die Laufzeit des

Dijkstra

-Algorithmus f¨ ur das Single-Source-Shortest-Path-Problem gilt:

Anzahl Aufrufe Kosten pro Aufruf BinHeaps FibHeaps

Insert n O(log n) O(1)

ExtractMin n − 1 O(log n) O(log n)

DecreaseKey ≤ m O(log n) O(1)

Insgesamt O((n + m) log n) O(m + n log n)

(24)

Gegeben: Digraph G = (V, A), V = {v

1

, . . . , v

n

}, |A| = m, mit einer L¨ angenfunktion d : A →

Q+

.

Gesucht: f¨ ur alle s, t ∈ V die Entfernung (bzw. ein k¨ urzester Pfad) von s nach t.

Bemerkung:

Wir nennen das entsprechende algorithmische Problem das

all pairs shortest path Problem

(apsp).

Info IV

Ernst W. Mayr 9/18

(25)

Gegeben: Digraph G = (V, A), V = {v

1

, . . . , v

n

}, |A| = m, mit einer L¨ angenfunktion d : A →

Q+

.

Gesucht: f¨ ur alle s, t ∈ V die Entfernung (bzw. ein k¨ urzester Pfad) von s nach t.

Bemerkung:

Wir nennen das entsprechende algorithmische Problem das

all pairs shortest path Problem

(apsp).

(26)

Der Algorithmus Floyd-Warshall (G, d):

for all i, j∈ {1, . . . , n} do

D0

[i, j] :=





0 falls

i

=

j d(vi, vj

) falls (v

i, vj

)

∈A

sonst

for k = 1 to n do

∀i, j: D

k

[i, j] := min{D

k−1

[i, j], D

k−1

[i, k] + D

k−1

[k, j]}

return D

n

Satz 215

Der Floyd-Warshall-Algorithmus berechnet in ZeitO(n3) die k¨urzeste Entfernung f¨ur alle s, t∈V.

Info IV

Ernst W. Mayr 10/18

(27)

Der Algorithmus Floyd-Warshall (G, d):

for all i, j ∈ {1, . . . , n} do

D

0

[i, j] :=





0 falls i = j d(v

i

, v

j

) falls (v

i

, v

j

) ∈ A

∞ sonst

for k

= 1

to ndo

∀i, j: Dk

[i, j] := min{D

k−1

[i, j], D

k−1

[i, k] +

Dk−1

[k, j]}

return D

n

Satz 215

Der Floyd-Warshall-Algorithmus berechnet in ZeitO(n3) die k¨urzeste Entfernung f¨ur alle s, t∈V.

(28)

Der Algorithmus Floyd-Warshall (G, d):

for all i, j ∈ {1, . . . , n} do

D

0

[i, j] :=





0 falls i = j d(v

i

, v

j

) falls (v

i

, v

j

) ∈ A

∞ sonst

for k = 1 to n do

∀i, j: D

k

[i, j] := min{D

k−1

[i, j], D

k−1

[i, k] + D

k−1

[k, j]}

return Dn

Satz 215

Der Floyd-Warshall-Algorithmus berechnet in ZeitO(n3

)

die k¨urzeste Entfernung f¨ur alle s, t∈V.

Info IV

Ernst W. Mayr 10/18

(29)

Der Algorithmus Floyd-Warshall (G, d):

for all i, j ∈ {1, . . . , n} do

D

0

[i, j] :=





0 falls i = j d(v

i

, v

j

) falls (v

i

, v

j

) ∈ A

∞ sonst

for k = 1 to n do

∀i, j: D

k

[i, j] := min{D

k−1

[i, j], D

k−1

[i, k] + D

k−1

[k, j]}

return D

n

Satz 215

Der Floyd-Warshall-Algorithmus berechnet in ZeitO(n3

)

die k¨urzeste Entfernung f¨ur alle s, t∈V.

(30)

Der Algorithmus Floyd-Warshall (G, d):

for all i, j ∈ {1, . . . , n} do

D

0

[i, j] :=





0 falls i = j d(v

i

, v

j

) falls (v

i

, v

j

) ∈ A

∞ sonst

for k = 1 to n do

∀i, j: D

k

[i, j] := min{D

k−1

[i, j], D

k−1

[i, k] + D

k−1

[k, j]}

return D

n

Satz 215

Der Floyd-Warshall-Algorithmus berechnet in Zeit O(n

3

) die k¨ urzeste Entfernung f¨ ur alle s, t ∈ V .

Info IV 6.1 K¨urzeste Pfade

Ernst W. Mayr 10/18

(31)

Beweis:

Es ist leicht zu sehen, dass D

k

[i, j] die L¨ ange eines k¨ urzesten Pfades von v

i

nach v

j

ist, der als innere Knoten nur solche

∈ {v

1

, . . . , v

k

} ben¨ utzt (i und j selbst k¨ onnen > k sein).

Damit ergibt sich die Korrektheit des Algorithmus durch Induktion.

Die Schranke f¨ ur die Laufzeit ist offensichtlich.

(32)

Beweis:

Es ist leicht zu sehen, dass D

k

[i, j] die L¨ ange eines k¨ urzesten Pfades von v

i

nach v

j

ist, der als innere Knoten nur solche

∈ {v

1

, . . . , v

k

} ben¨ utzt (i und j selbst k¨ onnen > k sein).

Damit ergibt sich die Korrektheit des Algorithmus durch Induktion.

Die Schranke f¨ ur die Laufzeit ist offensichtlich.

Info IV

Ernst W. Mayr 11/18

(33)

Beweis:

Es ist leicht zu sehen, dass D

k

[i, j] die L¨ ange eines k¨ urzesten Pfades von v

i

nach v

j

ist, der als innere Knoten nur solche

∈ {v

1

, . . . , v

k

} ben¨ utzt (i und j selbst k¨ onnen > k sein).

Damit ergibt sich die Korrektheit des Algorithmus durch Induktion.

Die Schranke f¨ ur die Laufzeit ist offensichtlich.

(34)

Bemerkungen

1

Der Floyd-Warshall-Algorithmus funktioniert auch mit negativen Kantenl¨ angen, solange der Graph keine Kreise negativer L¨ ange enth¨ alt (im letzteren Fall ist der k¨ urzeste Abstand nicht ¨ uberall wohldefiniert, sondern wird

−∞). Das

Vorhandensein negativer Kreise kann an den Werten der Diagonale von

Dn

erkannt werden.

2

Man beachte die ¨ Ahnlichkeit des Algorithmus zum

Algorithmus f¨ ur die Konstruktion eines regul¨ aren Ausdrucks zu einem gegebenen endlichen Automaten.

3

F¨ ur ungerichtete Graphen mit trivialer L¨ angenfunktion (also Kantenl¨ ange = 1) liefert Breitensuche eine effizientere Methode!

Info IV

Ernst W. Mayr 12/18

(35)

Bemerkungen

1

Der Floyd-Warshall-Algorithmus funktioniert auch mit negativen Kantenl¨ angen, solange der Graph keine Kreise negativer L¨ ange enth¨ alt (im letzteren Fall ist der k¨ urzeste Abstand nicht ¨ uberall wohldefiniert, sondern wird −∞). Das Vorhandensein negativer Kreise kann an den Werten der Diagonale von D

n

erkannt werden.

2

Man beachte die ¨ Ahnlichkeit des Algorithmus zum

Algorithmus f¨ ur die Konstruktion eines regul¨ aren Ausdrucks zu einem gegebenen endlichen Automaten.

3

F¨ ur ungerichtete Graphen mit trivialer L¨ angenfunktion (also

Kantenl¨ ange = 1) liefert Breitensuche eine effizientere

Methode!

(36)

Bemerkungen

1

Der Floyd-Warshall-Algorithmus funktioniert auch mit negativen Kantenl¨ angen, solange der Graph keine Kreise negativer L¨ ange enth¨ alt (im letzteren Fall ist der k¨ urzeste Abstand nicht ¨ uberall wohldefiniert, sondern wird −∞). Das Vorhandensein negativer Kreise kann an den Werten der Diagonale von D

n

erkannt werden.

2

Man beachte die ¨ Ahnlichkeit des Algorithmus zum

Algorithmus f¨ ur die Konstruktion eines regul¨ aren Ausdrucks zu einem gegebenen endlichen Automaten.

3

F¨ ur ungerichtete Graphen mit trivialer L¨ angenfunktion (also Kantenl¨ ange = 1) liefert Breitensuche eine effizientere Methode!

Info IV

Ernst W. Mayr 12/18

(37)

Bemerkungen

1

Der Floyd-Warshall-Algorithmus funktioniert auch mit negativen Kantenl¨ angen, solange der Graph keine Kreise negativer L¨ ange enth¨ alt (im letzteren Fall ist der k¨ urzeste Abstand nicht ¨ uberall wohldefiniert, sondern wird −∞). Das Vorhandensein negativer Kreise kann an den Werten der Diagonale von D

n

erkannt werden.

2

Man beachte die ¨ Ahnlichkeit des Algorithmus zum

Algorithmus f¨ ur die Konstruktion eines regul¨ aren Ausdrucks zu einem gegebenen endlichen Automaten.

3

F¨ ur ungerichtete Graphen mit trivialer L¨ angenfunktion (also

Kantenl¨ ange = 1) liefert Breitensuche eine effizientere

Methode!

(38)

6.2 Transitive H¨ ulle

Gegeben: Digraph G = (V, A), |V | = n, |A| = m. Gesucht: die

transitive H¨ulle

G

= (V, A

) von G, wobei gilt:

A

= {(v, w) ∈ V × V ; es gibt in G einen Pfad von v nach w}

Bemerkungen

1 F¨ur Digraphen kann der Floyd-Warshall-Algorithmus benutzt werden. Die Kante (v, w) ist inA gdw die Entfernung vonv nach wendlich ist.

2 F¨ur die Transitive H¨ulle gibt es effizientere Algorithmen, die in der Vorlesung EA besprochen werden.

3 In ungerichteten Graphen entspricht die Berechnung der Transitiven H¨ulle der Bestimmung der

Zusammenhangskomponenten.

Info IV

Ernst W. Mayr 13/18

(39)

6.2 Transitive H¨ ulle

Gegeben: Digraph G = (V, A), |V | = n, |A| = m. Gesucht: die

transitive H¨ulle

G

= (V, A

) von G, wobei gilt:

A

= {(v, w) ∈ V × V ; es gibt in G einen Pfad von v nach w}

Bemerkungen

1

F¨ ur Digraphen kann der Floyd-Warshall-Algorithmus benutzt werden. Die Kante (v, w) ist in

A

gdw die Entfernung von

v

nach

w

endlich ist.

2

F¨ ur die Transitive H¨ ulle gibt es effizientere Algorithmen, die in der Vorlesung EA besprochen werden.

3

In ungerichteten Graphen entspricht die Berechnung der Transitiven H¨ ulle der Bestimmung der

Zusammenhangskomponenten.

(40)

6.2 Transitive H¨ ulle

Gegeben: Digraph G = (V, A), |V | = n, |A| = m. Gesucht: die

transitive H¨ulle

G

= (V, A

) von G, wobei gilt:

A

= {(v, w) ∈ V × V ; es gibt in G einen Pfad von v nach w}

Bemerkungen

1

F¨ ur Digraphen kann der Floyd-Warshall-Algorithmus benutzt werden. Die Kante (v, w) ist in A

gdw die Entfernung von v nach w endlich ist.

2

F¨ ur die Transitive H¨ ulle gibt es effizientere Algorithmen, die in der Vorlesung EA besprochen werden.

3

In ungerichteten Graphen entspricht die Berechnung der Transitiven H¨ ulle der Bestimmung der

Zusammenhangskomponenten.

Info IV

Ernst W. Mayr 13/18

(41)

6.2 Transitive H¨ ulle

Gegeben: Digraph G = (V, A), |V | = n, |A| = m. Gesucht: die

transitive H¨ulle

G

= (V, A

) von G, wobei gilt:

A

= {(v, w) ∈ V × V ; es gibt in G einen Pfad von v nach w}

Bemerkungen

1

F¨ ur Digraphen kann der Floyd-Warshall-Algorithmus benutzt werden. Die Kante (v, w) ist in A

gdw die Entfernung von v nach w endlich ist.

2

F¨ ur die Transitive H¨ ulle gibt es effizientere Algorithmen, die in der Vorlesung EA besprochen werden.

3

In ungerichteten Graphen entspricht die Berechnung der Transitiven H¨ ulle der Bestimmung der

Zusammenhangskomponenten.

(42)

6.2 Transitive H¨ ulle

Gegeben: Digraph G = (V, A), |V | = n, |A| = m. Gesucht: die

transitive H¨ulle

G

= (V, A

) von G, wobei gilt:

A

= {(v, w) ∈ V × V ; es gibt in G einen Pfad von v nach w}

Bemerkungen

1

F¨ ur Digraphen kann der Floyd-Warshall-Algorithmus benutzt werden. Die Kante (v, w) ist in A

gdw die Entfernung von v nach w endlich ist.

2

F¨ ur die Transitive H¨ ulle gibt es effizientere Algorithmen, die in der Vorlesung EA besprochen werden.

3

In ungerichteten Graphen entspricht die Berechnung der Transitiven H¨ ulle der Bestimmung der

Zusammenhangskomponenten.

Info IV 6.2 Transitive H¨ulle

Ernst W. Mayr 13/18

(43)

6.3 Minimale Spannb¨ aume

Sei G = (V, E) ein zusammenh¨ angender, ungerichteter Graph mit einer Gewichtsfunktion w : E →

Q+

. Das Gewicht eines

Teilgraphen G

0

= (V

0

, E

0

) von G ist dann w(G

0

) =

P

e∈E0

w(e).

Definition 216

Ein

minimaler Spannbaum

von

G

= (V, E) ist ein Spannbaum von

G

(also ein

Baum

(V, E

0

) mit

E0 ⊆E) mit minimalem Gewicht

unter allen Spannb¨ aumen von

G.

Anwendungen:

Verdrahtungs- und Routingprobleme,

Zuverl¨ assigkeit von Netzwerken

(44)

6.3 Minimale Spannb¨ aume

Sei G = (V, E) ein zusammenh¨ angender, ungerichteter Graph mit einer Gewichtsfunktion w : E →

Q+

. Das Gewicht eines

Teilgraphen G

0

= (V

0

, E

0

) von G ist dann w(G

0

) =

P

e∈E0

w(e).

Definition 216

Ein

minimaler Spannbaum

von G = (V, E) ist ein Spannbaum von G (also ein Baum (V, E

0

) mit E

0

⊆ E) mit minimalem Gewicht unter allen Spannb¨ aumen von G.

Anwendungen:

Verdrahtungs- und Routingprobleme, Zuverl¨ assigkeit von Netzwerken

Info IV

Ernst W. Mayr 14/18

(45)

6.3 Minimale Spannb¨ aume

Sei G = (V, E) ein zusammenh¨ angender, ungerichteter Graph mit einer Gewichtsfunktion w : E →

Q+

. Das Gewicht eines

Teilgraphen G

0

= (V

0

, E

0

) von G ist dann w(G

0

) =

P

e∈E0

w(e).

Definition 216

Ein

minimaler Spannbaum

von G = (V, E) ist ein Spannbaum von G (also ein Baum (V, E

0

) mit E

0

⊆ E) mit minimalem Gewicht unter allen Spannb¨ aumen von G.

Anwendungen: Verdrahtungs- und Routingprobleme,

Zuverl¨ assigkeit von Netzwerken

(46)

Lemma 217 (rote Regel)

Sei G = (V, E), e ∈ E schwerste Kante auf einem Kreis C in G.

Dann gibt es einen minimalen Spannbaum von G, der e nicht enth¨ alt (d.h. dann ist jeder minimale Spannbaum von G − e auch minimaler Spannbaum von G). Ist e die einzige schwerste Kante auf einem Kreis C in G, dann ist e in keinem minimalen

Spannbaum von G enthalten.

Info IV 6.3 Minimale Spannb¨aume

Ernst W. Mayr 15/18

(47)

Beweis:

Sei e schwerste Kante in C, und sei M ein minimaler Spannbaum von G, der e enth¨ alt. Durch Entfernen von e zerf¨ allt M in zwei Teilb¨ aume, die, da C ein Kreis ist, durch eine geeignete Kante f 6= e aus C wieder verbunden werden k¨ onnen. Der dadurch entstehende Spannbaum M

0

von G enth¨ alt e nicht und hat das Gewicht

w(M

0

) = w(M ) − w(e) + w(f ) .

Falls

e

einzige schwerste Kante in

C

ist, w¨ are

w(M0

)

< w(M

) im

Widerspruch zur Tatsache, dass

M

minimaler Spannbaum von

G

ist.

(48)

Beweis:

Sei e schwerste Kante in C, und sei M ein minimaler Spannbaum von G, der e enth¨ alt. Durch Entfernen von e zerf¨ allt M in zwei Teilb¨ aume, die, da C ein Kreis ist, durch eine geeignete Kante f 6= e aus C wieder verbunden werden k¨ onnen. Der dadurch entstehende Spannbaum M

0

von G enth¨ alt e nicht und hat das Gewicht

w(M

0

) = w(M ) − w(e) + w(f ) .

Falls e einzige schwerste Kante in C ist, w¨ are w(M

0

) < w(M ) im Widerspruch zur Tatsache, dass M minimaler Spannbaum von G ist.

Info IV 6.3 Minimale Spannb¨aume

Ernst W. Mayr 16/18

(49)

Der Algorithmus Kruskal (V, E, w):

sortiere

E

aufsteigend:

w(e1

)

≤w(e2

)

≤. . .≤w(em

) initialisiere Union-Find-Struktur f¨ ur

V

T

:=

for i = 1 to m do

bestimme die Endpunkte v und w von e

i

if Find(v) 6= Find(w) then T := T ∪ {e

i

}

Union(Find(v),Find(w))

return T

(50)

Der Algorithmus Kruskal (V, E, w):

sortiere E aufsteigend: w(e

1

) ≤ w(e

2

) ≤ . . . ≤ w(e

m

) initialisiere Union-Find-Struktur f¨ ur V

T := ∅

for i

= 1

to m do

bestimme die Endpunkte

v

und

w

von

ei

if

Find(v)

6= Find(w) then T

:=

T∪ {ei}

Union(Find(v),Find(w)) return T

Info IV

Ernst W. Mayr 17/18

(51)

Der Algorithmus Kruskal (V, E, w):

sortiere E aufsteigend: w(e

1

) ≤ w(e

2

) ≤ . . . ≤ w(e

m

) initialisiere Union-Find-Struktur f¨ ur V

T := ∅

for i = 1 to m do

bestimme die Endpunkte v und w von e

i

if Find(v) 6= Find(w) then T := T ∪ {e

i

}

Union(Find(v),Find(w))

return T

(52)

Satz 218

Kruskal’s Algorithmus bestimmt einen minimalen Spannbaum des zusammenh¨ angenden Graphen G = (V, E) in Zeit O(m log n).

Beweis:

Find(v) = Find(w) gdw die Kante (v, w) schwerste Kante auf einem Kreis in

G

ist. Die Korrektheit des Algorithmus folgt damit aus dem vorigen Lemma.

Die Laufzeit f¨ ur das Sortieren betr¨ agt

O(m

log

n) (m≥n−

1, da

G

zusammenh¨ angend). Bei geeigneter Implementierung

(gewichtete Vereinigung) ist die Zeitkomplexit¨ at jeder Find-Operation

O(logn).

Info IV

Ernst W. Mayr 18/18

(53)

Satz 218

Kruskal’s Algorithmus bestimmt einen minimalen Spannbaum des zusammenh¨ angenden Graphen G = (V, E) in Zeit O(m log n).

Beweis:

Find(v) = Find(w) gdw die Kante (v, w) schwerste Kante auf einem Kreis in G ist. Die Korrektheit des Algorithmus folgt damit aus dem vorigen Lemma.

Die Laufzeit f¨ ur das Sortieren betr¨ agt

O(m

log

n) (m≥n−

1, da

G

zusammenh¨ angend). Bei geeigneter Implementierung

(gewichtete Vereinigung) ist die Zeitkomplexit¨ at jeder

Find-Operation

O(logn).

(54)

Satz 218

Kruskal’s Algorithmus bestimmt einen minimalen Spannbaum des zusammenh¨ angenden Graphen G = (V, E) in Zeit O(m log n).

Beweis:

Find(v) = Find(w) gdw die Kante (v, w) schwerste Kante auf einem Kreis in G ist. Die Korrektheit des Algorithmus folgt damit aus dem vorigen Lemma.

Die Laufzeit f¨ ur das Sortieren betr¨ agt O(m log n) (m ≥ n − 1, da G zusammenh¨ angend). Bei geeigneter Implementierung

(gewichtete Vereinigung) ist die Zeitkomplexit¨ at jeder Find-Operation O(log n).

Info IV 6.3 Minimale Spannb¨aume

Ernst W. Mayr 18/18

Referenzen

ÄHNLICHE DOKUMENTE

Mit der gleichen Methode und dem gleichen Rechenaufwand kann man zu dem getesteten Wort, falls es in der Sprache ist, auch gleich einen Ableitungsbaum konstruieren, indem man sich

Das Argument war dann, dass beim Erkennen von z (mindestens) ein Zustand zweimal besucht werden muss und damit der dazwischen liegende Weg im Automaten beliebig oft wiederholt

Dies ist auch nach der Transformation der Fall. W¨ ahrend vor der Transformation alle Zeichenreihen der obigen Form von rechts her aufgebaut werden, werden sie danach von links

Ernst W.. Am Anfang steht ein neues Kellersymbol auf dem Stack. Sobald bei der Simulation von A 1 dieses auf dem Stack vorgefunden wird, weiß man, dass A 1 seinen Stack leerger¨

2 Werden zwei oder ein Stacksymbol abgelegt und dabei das oberste Stacksymbol X ge¨ andert, entfernen wir zun¨ achst in einem eigenen Schritt das oberste Stacksymbol und pushen dann

Eine kontextfreie Grammatik ist eine LR(k)-Grammatik, wenn man durch Lookaheads der L¨ ange k erreichen kann, dass bei einer Reduktion von links nach rechts in jedem Schritt h¨

Die von linear beschr¨ ankten, nichtdeterministischen Turingmaschinen akzeptierten Sprachen sind genau die kontextsensitiven (also Chomsky-1)

Gibt es einen Unterschied, wenn man sich auf eine bestimmte Programmiersprache beschr¨ ankt..