• Keine Ergebnisse gefunden

Repräsentation von Graphen

N/A
N/A
Protected

Academic year: 2022

Aktie "Repräsentation von Graphen"

Copied!
59
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen auf Graphen

Inhalt:

Repräsentation von Graphen

Durchsuchen eines Graphen, Breitensuche und Tiefensuche

Topologisches Sortieren

Kürzeste Wege (Warshall Algorithmus)

Maximaler Fluß (Ford-Fulkerson)

Maximales Matching

(2)

Repräsentation von Graphen

Einen Graph wird durch eine Knoten- und Kantenmenge festgelegt.

Sind die Knoten mit 1,2, . . . , n durchnummeriert, so reicht es aus, die Anzahl n der Knoten anzugeben. Die Kantenmenge kann dargestellt werden durch

eine Adjazenzliste. Sie besteht aus einem Array A[1..n] von Zeigern. Jeder Zeiger ist Ausgangspunkt einer Liste, wobei die Liste A[i] die Knoten (Zahlen) enthält, die mit Knoten i durch eine Kante verbunden sind.

eine Adjazenzmatrix. Dies ist eine (n × n) 0/1-Matrix (oder auch boolsche Matrix) M. Das Element M[i, j] = 1 genau dann, wenn es eine Kante von Knoten i zu Knoten j gibt (M[i, j] = 0 sonst).

(3)

Adjazenzliste und Adjazenzmatrix

a b

c d e

f g h

a b c d e f g h

a 0 1 1 1 0 0 0 0

b 1 0 0 1 0 1 0 0

c 1 0 0 1 0 1 0 0

d 1 1 1 0 1 1 1 1

e 0 0 0 1 0 0 0 1

f 0 1 1 1 0 0 1 0

g 0 0 0 1 0 1 0 1

h 0 0 0 1 1 0 1 0

a b c d

b a f d

c a d f

d c a b e f g h

e d h

(4)

Repräsentation von Graphen

Die optimale Wahl der Darstellung hängt von der Anzahl der Kanten und der des Zugriffs auf die Knoten/Kanten ab.

Adjazenzliste.

Speicherplatz wird nur für die tatsächlich vorhandenen Kanten benötigt. Dies ist vorteilhaft für dünn besetzte Graphen.

Speicherplatz: O(kV k + kEk)

Zugriff auf die Nachbarn eines Knotens ist effizient. Dies ist vorteilhaft, wenn der Graph in dieser Reihenfolge durchsucht wird.

Vorgänger eines Knotens können nicht effizient gefunden werden.

(5)

Repräsentation von Graphen

Adjazenzmatrix.

Speicherplatz der Matrix ist O(kV k2), unabhängig von der Anzahl der Kanten.

Test, ob eine Kante zwischen Knoten i und Knoten j existiert, ist effizient.

Zugriff auf die Nachbarn eines Knotens ist nicht effizient, Komplexität O(n).

Beide Darstellungen eignen sich für gerichtete und ungerichtete Graphen. Ebenso können Kantengewichte verwaltet werden.

(6)

Durchsuchen eines Graphen

Häufig muß ein Graph, ausgehend von einem Knoten u, durchsucht werden. Dabei gibt es zwei unterschiedliche Strategien: Breitensuche und Tiefensuche.

Beide Suchverfahren (erzeugen implizit einen Baum und) erlauben es die Knoten in der Reihenfolge auszugeben in der sie

zum ersten Mal besucht wurden (preorder)

zum letzten Mal besucht wurden (postorder)

Bei Graphen mit konstantem Grad (z.B. 2) kann ein Knoten auch nach den Knoten des “linken” und vor den Knoten des “rechten”

Nachfolgers ausgegeben werden (inorder).

(7)

Durchsuchen eines Graphen, Breitensuche

Breitensuche (breadth-first-Search).

Im wesentlichen Dijkstras Algorithmus, wobei die Kantengewichte alle gleich 1 sind. Als Datenstruktur wird eine Schlange Q (first in, first out) verwendet. Diese enthält zunächst den Startknoten u. Es wird jeweils der erste Knoten der Schlange entnommen, dessen Nachbarn werden, sofern sie noch nicht betrachtet wurden, hinten in die Schlange einge- fügt. Um zu verhindern, dass ein Knoten mehrmals in die Schlange aufgenommen wird, wird er beim Einfügen entsprechend markiert, hier wird der Abstand zum Startknoten u in eine Feld d eingetragen.

(8)

Datenstruktur Schlange

Operationen:

Initialisieren (ergibt leere Schlange).

Einfügen eines Elements.

Lesen und Entfernen eines Elements.

Die Schlange ist ein “first in, first out” (FIFO) Speicher:

wird x vor y eingefügt, so wird x vor y entfernt.

Im Gegensatz dazu ist der Stack ein “last in, first out” (LIFO) Speicher:

wird x vor y eingefügt, so wird x nach y entfernt.

(9)

Durchsuchen eines Graphen, Breitensuche

Breitensuche (Eingabe: Graph G = (V, E) und Knoten u ∈ V ) FOR v ∈ V DO d(v) := ∞

d(u) := 0, Q := {u}

WHILE Q 6= ∅ DO

v := erstes Element in Q entferne v aus Q

FOR v ∈ N(v) DO

IF d(v) = ∞ THEN

d(v) := d(v) + 1 und Q = Q ∪ {v}

Die Tabelle d enthält die Abstände der Knoten zum Knoten u.

(10)

Durchsuchen eines Graphen, Tiefensuche

Tiefensuche (depth-first-search)

Hier wird ein Pfad zuerst in die Tiefe verlängert. Dies lässt sich

rekursiv einfach formulieren. Für einen Knoten u wird die Tiefensuche nacheinander für alle Nachbarn aufgerufen.

Jeder Knoten ist zunächst weiß gefärbt. Wird er in der Tiefensuche erreicht, wird er grau, sind alle Nachbarn (abschließend) betrachtet worden, wird er schwarz.

Tiefensuche(Knoten u ∈ V ) f(u) := grau

FOR v ∈ N(u) DO

IF f(v) = weiß THEN Tiefensuche(v) f(u) := schwarz

(11)

Durchsuchen eines Graphen, Analyse

Die Komplexität (bei beiden Verfahren) ergibt sich aus der Anzahl der Zugriffe auf die Kanten und Knoten.

Jeder Knoten wird einmal in die Schlange aufgenommen bzw. durch einen rekursiven Aufruf grau gefärbt. Jede Kante wird genau einmal (für ungerichtete Graphen zweimal) betrachtet.

Die Komplexität ist daher O(kV k + kEk).

Für zusammenhängende Graphen gilt, kEk ≥ kV k − 1, daher ist die Komplexität O(kV k + kEk) = O(kEk).

(12)

Topologisches Sortieren

Eine topologische Sortierung eines gerichteten Graphen G = (V, E) ist

eine Anordnung (Nummerierung) der Knoten V = {v1, v2, . . . , vn}, so dass

für alle Kanten (vi, vj) gilt i < j.

Offensichtlich lassen sich Graphen, die Kreise enthalten, nicht topologisch sortieren. Es gilt:

Ein Graph ist azyklisch genau dann, wenn er sich topologisch sortieren lässt.

(13)

Topologisches Sortieren, azyklische Graphen

Beweis: (⇐) klar, denn in einer topologischen Sortierung gibt es keine Rückwärtskanten.

(⇒) G sei azyklisch. Dann gibt es einen Knoten, der keinen

Vorgänger—also keine eingehende Kante—hat. (Wenn nicht, folge den Vorgängern bis ein Kreis ensteht).

Wir sortieren G wie folgt. Bestimme Knoten v der keinen Vorgänger hat. Gib v die nächste Nummer und entferne v mit seinen

ausgehenden Kanten und sortiere den Restgraphen topologisch.

(14)

Topologisches Sortieren mit Tiefensuche

Der Beweis liefert schon ein Verfahren, um topologisch zu sortieren.

Eine topologische Sortierung ergibt sich auch aus der Tiefensuche.

Zunächst werden alle Knoten weiß gefärbt. Die Prozedur Tiefensuche wird dann solange mit einem weiß gefärbten Knoten aufgerufen, bis es keine weiß gefärbten Knoten mehr gibt. Die umgekehrte Reihenfolge, in der die Knoten schwarz gefärbt werden, ist eine topologische

Sortierung.

FOR v ∈ V DO f(v) := weiß FOR v ∈ V DO

IF f(v) = weiß THEN Tiefensuche(v)

(15)

Topologisches Sortieren mit Tiefensuche, Analyse

Um die Korrektheit zu zeigen, seien die Knoten in umgekehrter

Reihenfolge ihres “Schwarz-Werdens” nummeriert: V = {v1, . . . , vn} (d.h. vn wird als erster schwarz und v1 als letzter).

Sei (u, v) eine Kante von u nach v. Wir müssen zeigen, dass die Nummer von u kleiner ist als die von v, d.h. v muß vor u schwarz gefärbt werden.

Im Verlauf des Verfahrens wird irgendwann Tiefensuche(u) aufgerufen.

Dort wird (in der ersten Anweisung) u grau gefärbt. Da v ∈ N(u) wird in diesem Aufruf (irgendwann) die Kante (u, v) und somit der Knoten v betrachtet.

(16)

Topologisches Sortieren mit Tiefensuche, Analyse

Der Knoten v ist weiß, grau oder bereits schwarz gefärbt.

v ist schwarz. Da u erst am Ende des Aufrufs schwarz gefärbt wird, wird v vor u schwarz.

v ist grau. D.h. ein Aufruf Tiefensuche(v) hat bereits stattgefunden und ist noch nicht abgeschlossen, da v noch nicht schwarz ist. Es gibt also einen Pfad von v nach u (sonst wäre der Aufruf von v vor dem Aufruf von Tiefensuche(u) abgeschlossen). Mit der Kante (u, v) ensteht ein Kreis. Widerspruch.

v ist weiß. Dann erfolgt ein rekursiver Aufruf von Tiefensuche(v).

Erst wenn dieser beendet wird und v schwarz gefärbt ist, wird u schwarz gefärbt.

(17)

Transitive Hülle

Die transitive Hülle eines Graphen G = (V, E) ist der Graph G = (V, E) mit

(u, v) ∈ E ⇔ es gibt einen Pfad von u nach v in G

E ist transitiv abgeschlossen, d.h falls E die Kante (u, v) und die Kante (v, w) enthält, so enthält E auch die Kante (u, w).

(18)

Transitive Hülle, Breitensuche

Die transitive Hülle von G kann durch eine Breitensuche berechnet werden. Die Breitensuche berechnet ein Feld d welches den Abstand (Länge eines kürzesten Pfades) von einem Knoten u zu allen anderen Knoten berechnet. D.h. es gibt genau dann einen Pfad von u nach v, wenn nach der Breitensuche d(v) 6= ∞.

E = ∅

FOR u ∈ V DO

Breitensuche(G, u) FOR v ∈ V DO

IF d(v) 6= ∞ THEN E = E ∪ {(u, v)}

Komplexität: O(kV k · kEk) = O(n · m), wobei n Anzahl der Knoten und m Anzahl der Kanten ist.

(19)

Transitive Hülle, Schrittweise

Gegeben sei der Graph G = (V, E) mit V = {1,2, . . . , n}.

Definiere 0/1 Variable mki,j mit mki,j = 1 genau dann, wenn Knoten j von Knoten i aus über die ersten k Knoten erreichbar ist. Also:

mki,j =





1, es gibt einen Pfad von i nach j, auf dem alle zwischen i und j liegenden Knoten aus {1,2, . . . , k} stammen

0, sonst

Als Randbedingungen erhalten wir:

m0i,j =

1, falls (i, j) ∈ E oder i = j 0, sonst

(20)

Rekursionsgleichung

mki,j lässt sich rekursiv aus mki,j1 berechnen.

Es gibt einen Pfad von i nach j über Knoten aus {1,2, . . . , k},

wenn es einen Pfad von i nach j über Knoten aus {1,2, . . . , k − 1}

gibt, oder

wenn es einen Pfad

von i nach k über Knoten aus {1,2, . . . , k − 1} und einen Pfad

von k nach j über Knoten aus {1,2, . . . , k − 1} gibt.

Formal:

mki,j = mki,j1 ∨ (mki,k1 ∧ mkk,j1).

(21)

Warshall-Algorithmus

Der Warshall Algorithmus berechnet die Adjazenzmatrix A von G. Warshall Algorithmus

Eingabe: Adjazenzmatrix A[1..n, 1..n]

FOR k := 1 TO n DO

FOR i := 1 TO n DO IF A[i, k] = 1 THEN

FOR j := 1 TO n DO

IF A[k, j] = 1 THEN A[i, j] := 1

Die Komplexität ist O(n3) (drei geschachtelte for-Schleifen).

(22)

Kürzeste Wege

Eine Modifikation von Warshalls Algorithmus berechnet in einem kantenbewerteten Graphen die kürzesten Wege zwischen allen Knotenpaaren.

(Beachte: Dijkstras Algorithmus berechnet die kürzesten Wege von einem Startknoten zu allen anderen Knoten).

mki,j ist jetzt die kürzeste Weglänge eines Pfades von Knoten i zum Knoten j über Knoten aus der Menge {1,2, . . . , k}.

Rekursionsgleichung:

mki,j = min{mki,j1, mki,k1 + mkk,j1}.

(23)

Algorithmus von Floyd

Die Matrix D enthält jetzt beim Aufruf die Gewichte der Kanten (Entfernungen zwischen allen Knotenpaaren). Sei w : E → R+ die Bewertungsfunktion:

D[i, j] =





0, falls i = j

w(i, j), falls (i, j) ∈ E

∞, sonst Algorithmus von Floyd

Eingabe: Entfernungsmatrix D[1..n, 1..n]

FOR k := 1 TO n DO

FOR i := 1 TO n DO

(24)

Flüsse in Netzwerken

Gegeben ist ein gerichteter Graph G = (V, E) mit

einer Quelle s ∈ V ,

einer Senke t ∈ V ,

einer Kapazität c : V × V → IN, wobei c(u, v) = 0 für (u, v) 6∈ E. Der Graph repräsentiert ein Netzwerk von

Leitungen, Röhren, Straßen, etc.

Die Quelle erzeugt (Strom, Nachrichten etc.) in beliebiger Menge, die Senke nimmt in beliebiger Menge auf.

Die Kapazität entspricht dem maximalem Durchfluß von Knoten zu Knoten.

(25)

Beispiel, Netzwerk

u v

s t

w x

12

10

20

9 16

13

4

14

7

4

(26)

Flüsse in Netzwerken

In einem Netzwerk soll der Fluss von der Quelle zur Senke maximiert werden.

Für jedes Paar von Knoten (u, v) wird ein Fluss f(u, v) bestimmt, so dass

die Kapazitäten nicht überschritten werden, d.h., f(u, v) ≤ c(u, v),

die Symmetriebedingung f(u, v) = −f(v, u) gilt.

das Kirchhoffsche Gesetz gilt:

∀u ∈ V − {s, t} : X

vV

f(u, v) = 0.

Der Betrag eines Flusses f ist |f| := P

vV f(s, v).

(27)

Netzwerk mit Fluss f

u v

s t

w x

12/12

10

15/20

4/9 11/16

8/13

1/4

11/14

7/7

4/4

(28)

Pfad p von s nach t

u v

s t

w x

15/20

4/9

c(w,v)=0, f(w,v)=-4 8/13

Für alle (a, b) in p ist die Restkapazität c(a, b) − f(a, b) positiv. Der Pfad kann einen zusätzlichen Fluss g = 4 übertragen.

(29)

Netzwerk mit Fluss f + g

u v

s t

w x

12/12

10

19/20

9 11/16

12/13

1/4

11/14

7/7

4/4

(30)

Flüsse in Netzwerken, Restnetzwerk

Definition. Gegeben sei ein Netzwerk G mit Kapazität c und ein

zulässiger Fluss f. Das Restnetzwerk Gf = (V, Ef) mit Restkapazität cf ist gegeben durch:

cf(u, v) = c(u, v) − f(u, v) und

Ef = {(u, v) | cf(u, v) > 0}

Das Restnetzwerk enthält Kanten, deren Kapazitäten durch den aktuellen Fluss bestimmt werden.

Es können neue Kanten entstehen: Kante (u, v) falls (v, u) ∈ E.

(31)

Restnetzwerk G

f

für Fluss f

u v

s t

w x

11 11

5

5

7 5 12

5

8

3

4

3 11

15

4

(32)

Flüsse in Netzwerken, Erweiterungspfad

Definition. Ein Erweiterungspfad ist ein kreisfreier Pfad p in Gf von s nach t.

Nach Definition ist cf(u, v) > 0 für alle Kanten (u, v) des Pfades p.

Die Restkapazität cf(p) des Pfades ist

cf(p) = min{cf(u, v) | (u, v) liegt in p}

Bemerkung: Der Fluss g mit

g(u, v) =





cf(p), (u, v) liegt in p

−cf(p), (v, u) liegt in p

0, sonst

(33)

Erweiterungspfad p in G

f

u v

s t

w x

11 11

5

5

7 5 12

5

8

3

4

3 11

15

4

(34)

Erweiterungspfad

Lemma

Sei G ein Netzwerk, c eine Kapazität und f ein zulässiger Fluss.

Sei Gf das Restnetzwerk, cf die Restkapazität.

Sei g ein zulässiger Fluss in Gf.

Dann gilt, dass f + g ein zulässiger Fluss auf G ist.

(35)

Erweiterungspfad, Beweis

Wir überprüfen, dass f + g ein zulässiger Fluss in G ist.

Kapazit¨atsbedingung: Da G zulässiger Fluss in Gf ist, gilt g(u, v) ≤ cf(u, v) = c(u, v) − f(u, v).

Daraus folgt (f + g)(u, v) =

f(u, v) + g(u, v) ≤ f(u, v) + c(u, v) − f(u, v) = c(u, v).

Symmetriebedingung:

(f + g)(u, v) = f(u, v) + g(u, v)

= −f(v, u) − g(v, u) = −(f(v, u) + g(v, u)) = −(f + g)(v, u).

(36)

Erweiterungspfad, Beweis

Kirchhoffsches Gesetz: Sei u ∈ V − {s, t}. Dann gilt X

vV

(f + g)(u, v) = X

vV

(f(u, v) + g(u, v))

= X

vV

f(u, v) + X

vV

g(u, v) = 0 + 0 = 0.

Ferner gilt für den Betrag des Flusses f + g

|(f + g)| = X

vV

(f + g)(s, v) = X

vV

(f(s, v) + g(s, v)) = |f| + |g|.

(37)

Ford-Fulkerson

Nach dem Lemma kann ein Fluss f durch einen Fluss g im Restnetzwerk vergrößert werden.

Sei f gegeben.

Bestimme Restnetzwerk Gf

Bestimme Erweiterungspfad p mit Restkapazität cf(p), z.B. durch Breiten- oder Tiefensuche in Gf.

Erhöhe Fluss in G zu f + g, wobei

g(u, v) =





cf(p), (u, v) liegt in p

−cf(p), (v, u) liegt in p

0, sonst

(38)

Ford-Fulkerson

Eingabe: Graph G = (V, E) und Kapazität c : V × V → IN FOR ALL (u, v) ∈ E DO f(u, v) := 0; f(v, u) := 0

REPEAT

Berechne Restnetzwerk Gf

Suche Erweiterungspfad p in Gf

cf(p) = min{cf(u, v) | (u, v) liegt in p}

g(u, v) =





cf(p), (u, v) liegt in p

−cf(p), (v, u) liegt in p

0, sonst.

f := f + g

UNTIL es gibt keinen Pfad von s nach t in Gf Ausgabe: Fluss f

(39)

Min Cut Max Flow

Es bleibt noch zu zeigen, dass es immer einen Erweiterungspfad gibt, solange der Fluss nicht maximal ist. Dazu betrachten wir den Fluss über einen Schnitt durch das Netzwerk.

u v

s 11 t

11

1

9

7 5 12

12

3

1

@ 4

(40)

Schnitt eines Netzwerks

Definition. Sei G ein Netzwerk mit Kapazität c.

Ein Schnitt ist eine Zerlegung der Knotenmenge V in Mengen A und B mit

A ∩ B = ∅ und A ∪ B = V und

s ∈ A und t ∈ B.

Die Kapazität c eines Schnitts (A, B) ist c(A, B) = X

uA,vB

c(u, v).

Für einen Fluss f ist der Fluss über den Schnitt (A, B):

f(A, B) = X

uA,vB

f(u, v).

(41)

Schnitt eines Netzwerks, Eigenschaften

Für jeden zulässigen Fluss f gilt:

f(A, B) ≤ c(A, B), denn für jeden Summanden gilt f(u, v) ≤ c(u, v).

|f| = f({s}, V − {s}).

Dies gilt auch für jeden Schnitt A und B, d.h.,

|f| = f(A, B).

(42)

Schnitt eines Netzwerks, Eigenschaften

Behauptung: Für jeden Schnitt A und B gilt |f| = f(A, B).

Dies kann man durch Induktion zeigen.

Behauptung gilt für kAk = 1 nach Definition. (In diesem Fall ist A = {s}).

Sei (A, B) ein Schnitt mit kAk = n + 1.

Wähle v ∈ A − {s} und betrachte Schnitt (A, B) = (A − {v}, B ∪ {v}).

Nach Induktionsvoraussetzung gilt |f| = f(A, B). Daher folgt f(A, B) = f(A, B)−X

uA

f(u, v)+X

uB

f(v, u) = |f|+X

uV

f(v, u) = |f|

(43)

Min-Cut Max-Flow Theorem

Damit gilt für jeden zulässigen Fluss f und jeden Schnitt A und B:

|f| = f(A, B) ≤ c(A, B). Es folgt:

maxf |f| ≤ min

(A,B){c(A, B)}

Das Min-Cut Max-Flow Theorem besagt, dass es einen Schnitt mit

|f| = c(A, B) gibt.

Satz. Sei f ein zulässiger Fluss in einem Netzwerk G mit Kapazität c.

Dann sind die Aussagen (1), (2) und (3) äquivalent.

1. f ist ein maximaler Fluss.

2. Das Restnetzwerk Gf enthält keinen Erweiterungspfad.

(44)

Min-Cut Max-Flow Theorem, Beweis

Wir zeigen aus (1) folgt (2), aus (2) folgt (3), und aus (3) folgt (1).

(1)⇒(2): Wenn |f| maximal ist, kann es keinen Erweiterungspfad p in Gf geben, denn sonst könnte f durch p echt verbessert werden.

(2)⇒(3): Setze A = {u ∈ V | es gibt einen Pfad von s nach u in Gf} und B = V − A.

Dann gilt s ∈ A und nach Voraussetzung t ∈ B. Also ist (A, B) ein Schnitt.

Für alle Knoten u ∈ A und v ∈ B gilt: cf(u, v) = 0.

Mit cf(u, v) = c(u, v) − f(u, v) folgt c(u, v) = f(u, v). Daher gilt:

|f| = f(A, B) = X

uA,vB

f(u, v) = X

uA,vB

c(u, v) = c(A, B)

(45)

Min-Cut Max-Flow Theorem, Beweis

(3)⇒(1): Für alle Schnitte (A, B) und alle zulässigen Flüsse f gilt

|f| ≤ c(A, B).

Da nach Voraussetzung (3) |f| = c(A, B) gilt, muss |f| maximal sein.

Beobachtung: Aus der Implikation (2)⇒(1) des Min-Cut Max-Flow Theorems folgt:

Falls es keinen Erweiterungspfad p in Gf gibt, so ist |f| maximal.

(46)

Ford-Fulkerson, Komplexität

Die Wahl des Erweiterungspfades ist nicht festgelegt. Durch

“ungeschickte” Wahl kann die Laufzeit von der Größe des maximalen Flusses abhängen.

u

s t

v 1000

1000

1

1000 1000

(47)

Ford-Fulkerson, Komplexität

Das Restnetzwerk ergibt sich zu:

u

s t

v 1000

999

1

1 1000

999

1

Eine ungeschickte Wahl wäre hier: p = s, u, v, t mit cf(p) = 1.

(48)

Erweiterungspfade, Komplexität

Ein Erweiterungspfad kann mit Breiten- oder Tiefensuche im

Restnetzwerk bestimmt werden. Der Erweiterungspfad liefert einen zusätzlichen Fluss g. Dadurch wird der Fluss jeweils um mindestens 1 erhöht.

Komplexität des Ford-Fulkerson Algorithmus: O(|f| · kEk), wobei

|f| der Betrag des maximalen Flusses ist, und

O(kEk) die Komplexität ist, die bei der Suche nach einem Erweiterungspfad anfällt.

(49)

Erweiterungspfade, Edmonds-Karp Strategie

Da der Betrag des maximalen Flusses linear eingeht, ist die Komplexität (im Sinne der Bitkomplexität) exponentiell.

Der Wert von |f| wird durch die Kapazitäten beschränkt. Für c : V × V → {0,1} ist |f| durch kEk begrenzt.

Edmonds-Karp Strategie. Wähle im Restnetzwerk Gf einen Erweiterungspfad p mit minimaler Länge.

Ein Pfad minimaler Länge kann z.B. mit Breitensuche (Dijkstras Algorithmus) mit Komplexität O(kEk) bestimmt werden.

(50)

Edmonds-Karp Strategie

Behauptung. Wird jeweils ein Erweiterungspfad mit minimaler Länge ausgewählt, benötigt der Ford-Fulkerson Algorithmus nur kV k · kEk Schleifendurchläufe.

Begr ¨undung. Wir betrachten den Schichtengraph L(Gf) von Gf.

l(v) sei der minimaler Abstand von Knoten v zur Quelle s.

Der Schichtengraph L(Gf) enthält nur Kanten, die auf Pfaden mit minimaler Länge liegen, d.h., Kanten (u, v) mit

(u, v) ∈ E, und l(v) = l(u) + 1.

L(Gf) enthält alle Pfade minimaler Länge von s nach t.

(51)

Edmonds-Karp Strategie, Komplexität

Sei p ein Erweiterungspfad, der mit der Edmonds-Karp Strategie bestimmt wurde, d.h. p hat minimale Länge in Gf. Da p nur Kanten enthält, die auf Pfaden mit minimaler Länge liegen, ist p daher auch ein Pfad in L(Gf).

Wird der Fluss f um cf(p) erhöht, entfällt im neuen Restnetzwerk (mindestens) eine Kante aus L(Gf).

Für eine Kante (u, v) mit c(u, v) > cf(p) kann die Kante (v, u) hinzukommen. Falls solche Kanten hinzukommen sind diese

“rückwärts” gerichtet, denn l(u) = l(v) − 1!

Kanten die hinzukommen, kommen nicht in L(Gf) vor. Pfade (von s nach t), die diese Kanten enthalten sind länger als p.

(52)

Edmonds-Karp Strategie, Komplexität

Sei p der nächste Erweiterungspfad in G = Gf+g.

Falls p auch in L(Gf) liegt, hat p mindestens die Länge von p. Falls p nicht in L(Gf) liegt, ist die Länge um mindestens 1 größer als die von p.

Die Pfadlängen bleiben also entweder gleich oder vergrößern sich.

Da L(Gf) maximal 2kEk Kanten hat und für jeden Pfad

(mindestens) eine Kante entfällt, kann es nicht mehr als 2kEk Pfade einer Länge geben.

Es gibt kV k unterschiedliche Pfadlängen, da eine kreisfreier Pfad jeden Knoten nur einmal enthalten kann.

Anzahl der Schleifendurchläufe ist durch kV k · 2kEk begrenzt und die Komplexität von Ford-Fulkerson ergibt sich zu O(kV k · kEk2).

(53)

Maximales Matching

Gegeben ist ein bipartiter Graph G = (V, E).

Gesucht ist ein maximales Matching.

G = (V, E) ist bipartit, falls

V = V1 ∪ V2

V1 ∩ V2 = ∅

für alle (u, v) ∈ E gilt u ∈ V1 gdw. v 6∈ V1.

Ein Matching ist eine Teilmenge der Kantenmenge, so dass keine zwei Kanten einen Knoten gemeinsam besitzen.

Ein Matching ist maximal, wenn kein anderes Matching mehr Kanten enthält.

(54)

Bipartiter Graph, Beispiel

G = (V1, V2, E) mit V1 = {a, b, c, d, e} und V2 = {1,2,3,4,5} mit

a 1

b 2

c 3

d 4

e 5

(55)

Matching, Beispiel

G = (V1, V2, E) mit V1 = {a, b, c, d, e} und V2 = {1,2,3,4,5} mit

a 1

b 2

c 3

d 4

e 5

Matching M = {(a,1),(b,3),(c, 2)}.

(56)

Maximales Matching und Maximaler Fluss

Maximales Matching kann mit Ford-Fulkerson gelöst werden.

Reduktion: Gegeben bipartiter Graph G = (V1 ∪ V2, E).

Das Netzwerk G entsteht aus dem Graphen G, wobei

In G zwei zusätzliche Knoten eingefügt werden

eine Quelle s und

eine Senke t.

Die Quelle s wird mit jedem Knoten aus V1 durch eine Kante verbunden.

Die Knoten aus V2 werden durch Kanten mit der Senke t verbunden.

Die Kapazität aller Kanten ist 1.

(57)

Maximales Matching und Maximaler Fluss, Beispiel

a 1

b 2

s c 3 t

d 4

e 5

Alle Kanten haben Kapazität 1.

(58)

Maximales Matching und Maximaler Fluss

Sei f ein maximaler Fluss in G. Ein maximales Matching enthält alle Kanten zwischen V1 und V2, deren Fluss f gleich 1 ist.

Reduktion liefert ein Matching. Der Fluss von der Quelle zu jedem Knoten aus V1 ist entweder gleich 0 oder 1. Ebenso ist der Fluss von jedem Knoten aus V2 zur Senke entweder gleich 0 oder 1. Daher folgt mit dem Kirchhoffschen Gesetz:

Der Fluss zwischen Knoten aus V1 und V2 ist entweder 0 oder 1.

Für jeden Knoten u aus V1 ist f(u, v) = 1 für höchstens einen Knoten v ∈ V2.

Für jeden Knoten v aus V2 ist f(u, v) = 1 für höchstens einen Knoten u ∈ V1.

(59)

Maximales Matching und Maximaler Fluss

Reduktion liefert ein maximales Matching.

Angenommen das Matching wäre nicht maximal, das heißt, es gibt ein Matching M mit mehr als |f| Kanten. Wir zeigen, dass daraus folgt, dass |f| kein maximaler Fluss ist.

Betrachte Fluss g mit

g(s, u) = g(u, v) = g(v, t) = 1 (und g(u, s) = g(v, u) = g(t, v) = −1) für alle Kanten (u, v) des Matchings M.

g(u, v) = 0 für alle anderen Kanten.

Da es für jeden Knoten u ∈ V1 höchstens einen Knoten v mit g(u, v) = 1 gibt und es für jeden Knoten v ∈ V2 höchstens einen Knoten u mit g(u, v) = 1 gibt, gilt das Kirchhoffschen Gesetz.

Referenzen

ÄHNLICHE DOKUMENTE

Wenngleich das Konzept quattromodaler Knoten einen gewissen Interpretationsspielraum lässt – so werden etwa die Pipeline, Normal- und Breitspur sowie die Binnen- und

Ein Graph heißt bipartit, wenn es eine Partitio- nierung seiner Knotenmenge in zwei stabile Mengen

Für die Beurteilung von abweichenden Situationen wird angenommen, dass sich die Störwirkung in Abhängigkeit der Anzahl Stop &amp; Go Ereignisse verändert. Bei einer minimal

Technische Universität München, Fakultät für Medizin, Klinik und Poliklinik für Derma- tologie und

Computer-gestützte Programme für das Ge- wichtsmanagmeent seien zwar weniger wirk- sam als persönliche Interventionen, aber auf jeden FAll besser als nichts und auch ange- sichts

  Felder mit einem Namen zzz, die den Access-Type exposedField haben, haben implizit den Namen zzz_changed, wenn sie als Ausgabe-Feld verwendet werden, und den Namen set_zzz,

Eine solche Formel heißt erfüllbar, wenn eine Belegung der Variablen mit Werten true und false existiert, so dass für jedes Paar c i mindestens eines der beiden Elemente ` i1 bzw. `

Und wenn ich das tue, möchte ich auch nicht Toleranz in Anspruch nehmen müssen - Toleranz würde ja nur bedeuten, dass ich zwar schon was und womöglich begründet dagegen habe,