2.Teil

Werbung
8
1. Graphen
f
Beispiel:
5
5
d
1
7
a
e
2
4
2
b
7
6
c
Für den obenstehenden zusammenhängenden Graphen soll ein Minimalgerüst konstruiert
werden. Wir ordnen zunächst die Kanten des Graphen nach wachsender Bewertung, d.h.
{d,e},{b,d},{b,e},{a,b},{d,f},{e,f},{b,c},{c,e},{a,d}.
1
2
2
4
5
5
6
7
7
Bei Durchführung des Algorithmus erhalten wir folgende Zwischenresultate:
Komponentensystem M
Ausgewählte Kante
{{a},{b},{c},{d},{e},{f}}
{d,e}
{{a},{b},{c},{d,e},{f}}
{b,d}
{{a},{b,d,e},{c},{f}}
{a,b}
{{a,b,d,e},{c},{f}}
{d,f}
{{a,b,d,e,f},{c}}
{b,c}
{{a,b,c,d,e,f}}
-
Die Menge der in dieser Weise ausgewählten Kanten, nämlich
B={{d,e},{b,d},{a,b},{d,f},{b,c}}.
bilden dann ein Minimalgerüst.
2) Algorithmus für kürzeste Wege
Ist G ein (gerichteter oder ungerichteter) Graph mit einer reellen Bewertungsfunktion w, so
kann man allgemein jeder (gerichten oder ungerichteten) Kantenfolge eine Bewertung
zuweisen, indem man die Bewertungen aller darin vorkommenden Kanten aufaddiert. In
dieser Weise kann man dann auch je zwei Knoten a und b des Graphen einen Abstand d(a,b)
zuweisen, nämlich als die kleinste Bewertung aller Kantenfolgen, welche a und b verbinden.
(Falls es keine Kantenfolge gibt, welche a und b verbindet, wird d(a,b)= ∞ gesetzt.)
Algorithmus von Dijkstra: Sei G=(V,E) ein (gerichteter oder ungerichteter) Graph mit einer
nichtnegativen Bewertung w. Ist dann v 0 ∈ V ein festgewählter Knoten, so kann dann für
jeden Knoten v ∈ V in folgender Weise der Abstand d(v):=d(v, v 0 ) , sowie eine Menge p(v)
aller unmittelbaren „Vorgänger” (auf einem kürzesten Weg von v nach v 0 ) berechnet werden:
(1) Setze d ( v 0 ) ← 0, d(v) ← ∞ ∀ v ∈ V \{ v 0 } , p(v):= ∅ ∀ v ∈ V , sowie U ← V.
9
1. Graphen
(2) Falls U= ∅ , dann STOP, sonst weiter mit (3).
(3) Finde ein u ∈ U für das d(u) minimal ist. Ist d(u)= ∞ , dann ebenfalls STOP.
(4) Für alle v ∈ U mit uv ∈ E sei d(v) ← min{d(v),d(u)+w(uv)}. Zusätzlich wird, falls der neue
Wert von d(v) kleiner als der alte ist, auch p(v) aktualisiert: p(v) ← {u}. (Ist man dabei nicht
nur an einem, sondern an allen kürzesten Wegen von v 0 nach v interessiert, so hätte man im
Fall der Gleichheit des alten und neuen Wertes die Ersetzung p(v) ←
p(v) ∪ {u} vorzunehmen.)
(5) Setze U:=U\{u} und mache weiter mit (2).
Nach Beendigung des Algorithmus kann man zu jedem v ∈ V , welches von v 0 überhaupt
über einen Weg „erreichbar” ist, was sich in d(v)< ∞ ausdrückt, auch sofort einen kürzesten
Weg v 0 v1 ...v k von v 0 nach v = v k in der Weise angeben, indem man jeweils ein v i −1 ∈ p( v i )
in der Reihenfolge i = k,k-1,…,1 auswählt.
Ist n die Anzahl der Knoten des betrachteten Graphen, so kann man zeigen, dass die
Komplexität des Dijkstra-Algorithmus O(n 2 ) beträgt, was bedeutet, dass der Rechenaufwand
(gemessen an der Anzahl von gewissen Elementaroperationen oder auch einfach an der
Rechenzeit) nicht stärker anwächst als die Funktion Cn 2 für eine gewisse reelle Konstante
C>0. Insbesondere handelt es sich dabei also um einen sog. Polynomialzeitalgorithmus (d.h.
die Komplexität ist von der Form O(n k ) für eine gewisse relle Konstante k), welche allgmein
als „gut” angesehen werden. Mit dem gleichem Auwand kann insbesondere auch überprüfen,
ob ein Knoten v von v 0 überhaupt „erreichbar” ist, da nur in diesem Fall d(v) einen endlichen
Wert hat.
Beispiel:
Für den durch das nachstehende Diagramm gegebenen bewerteten gerichteten Graphen sollen
alle Abstände zum Knoten a berechnet werden.
16
b
6
c
v0 = a
3
7
d
4
5
8
0
1
2
e
2
f
g
In nachfolgender Tabelle ist die laufende Wertetabelle für die Abstandsfunktion d und die
jeweiligen Vorgänger (wir wählen im Fall von Gleichheit immer nur einen und lassen daher
die Klammern {} weg) beim Durchlaufen der einzelnen Iterationen angegeben.
10
1. Graphen
0
Iteration
1
2
3
4
5
d (a ) / p (a )
d (b) / p( b)
d (c) / p (c)
0 /−
∞ / − 16 / a 16 / a 12 / f 12 / f 12 / f
∞ /− ∞ /− ∞ /− ∞ /− ∞ /− 6 / g
d (d ) / p (d )
d (e) / p (e)
∞ /−
∞ /−
3/a
∞ /−
7/d
6/f
d (f ) / p (f )
d (g ) / p (g )
∞ /−
∞ /−
∞ /−
∞ /−
4/d
∞ /−
6/f
6
11 / c
6/f
Die jeweils in (3) getroffene Wahl wurde in obiger Tabelle besonders hervorgehoben. (Die
zugehörigen Knoten in der Indexspalte müssen dann in (5) aus U entfernt werden! )
Die endgültige Belegung der Werte von d wird dann durch die fettgedruckten Zahlen in
obiger Tabelle angegeben, also
v
a b
c
d
e
f
g
d(v) 0 11 6
3
6 4 6
Die in der Tabelle ebenfalls erfassten unmittelbaren Vorgänger auf einem kürzesten Weg zum
jeweiligen Knoten kann nun dazu verwendet werden, um diese kürzesten Wege auf einfache
Weise zu rekonstruieren. Lässt man nämlich im obigen Graphen alle Kanten uv weg, wo u
(nach der letzten Iteration) nicht Vorgänger von v ist, so erhält man folgendes Gerüst für
unseren Graphen, aus welchen man die kürzesten Wege vom Knoten a zu einem beliebigen
anderen Knoten unmittelbar ablesen kann:
a
b
5
c
3
d
0
1
e
2
f
2
g
3) Algorithmen aus der Netzplantechnik
Ein weiterer wichtiger Algorithmus, welcher von Ford stammt, befasst sich mit der
Berechnung von längsten Wegen in Netzplänen. (Vgl. Beispiel 2.) Unter einem Netzplan
versteht man dabei einen azyklischen gerichteten Graphen G mit einer reellen
Bewertungsfunktion w, wobei darüberhinaus gefordert wird, dass ein Knoten Q mit
d − (Q) = 0 (eine sog. Quelle) und ein Knoten S mit d + (S) = 0 (eine sog. Senke) vorliegt,
und dass er darüberhinaus schwach zusammenhängend ist, d.h. ohne Berücksichtigung der
Orientierung der Kanten gibt es stets einen (dann ungerichteten) Weg zwischen zwei
verschiedenen Knoten des Graphen.
11
1. Graphen
In der sog. Netzplatztechnik geht es dann darum, für jeden Knoten des Netzplans den längsten
Weg (wieder im Sinne der Bewertung) eines jeden Knotens sowohl zur Quelle als auch zur
Senke zu bestimmen.
In den Anwendungen sind dann die Knoten des Netzplans gewisse Ereignisse (wie etwa bei
einem Bauvorhaben das Erreichen von gewissen Stadien der Fertigstellung), die Quelle ist
das Startereignis (z.B. Baubeginn) und die Senke das Zielereignis. Durch technologische
Vorgaben können gewisse Ereignisse oft erst nach anderen eintreten, was sich im Graphen so
ausdrückt, dass es von einem früheren Ereignis E zu einem späteren Ereignis F einen
gerichteten Weg gibt, dessen Bögen alles Vorgänge sind, welche noch ablaufen müssen,
bevor das Ereignis F eintreten kann, wenn E schon eingetreten ist.
Wir denken uns die Knoten eines Netzplans so von 0 bis n durchnummeriert, dass für jeden
Bogen der Anfangsknoten stets eine niedere Nummer als der Endknoten hat, was stets
möglich ist. Eine solche Nummerierung heißt auch monoton oder aufsteigend und
mindestens eine solche existiert genau dann, wenn der Graph azyklisch ist
Gewichtet man alle Kanten eines Netzplans mit 1 (unabhängig von einer schon bestehenden
Gewichtung), so heißt die größte Länge eines Wegs von der Quelle Q bis zu einem Knoten K
der Rang von K, in Zeichen: rg(K). Um dann eine monotone Nummerierung der Knoten zu
erreichen, nummeriert man die Knoten nach aufsteigendem Rang durch, wobei es für Knoten
mit gleichem Rang die Reihenfolge bedeutungslos ist. Die Bestimmung der Ränge geschieht
mit nachfolgendem Algorithmus.
Algorithmus von Ford: Sei G ein Netzplan mit der Knotenmenge V, der Bögenmenge E und
der Quelle Q. Für alle Knoten v ∈ V können dann die Ränge rg(v) folgendermaßen gefunden
werden.
(1) Man setze am Anfang rg(v)=0 für alle v ∈ V .
(2) Für alle Knoten v ∈ V mit einem positivem Hingrad ersetzte man in einer festen
Reihenfolge rg(v) durch
max{1 + rg(u ) (u, v) ∈ E}.
Ändert sich dabei keine der vorläufigen Rangzahlen, so hat man damit die endgültigen
Rangzahlen gefunden. Ansonsten wird (2) solange wiederholt, bis sich die Rangzahlen nicht
mehr ändern.
Wir dürfen also nach einer eventuellen Durchführung des Fordschen Algorithmus
voraussetzen, dass die Knoten des Netzplans mit den Zahlen 0,1,2,..,n monoton
duchnummeriert sind. Wenn die Bewertung d ij der gerichteten Kante von i nach j die
Zeitdauer darstellt, welche für den Vorgang, der durch den Bogen von i nach j dargestellt
wird, benötigt wird, so sind dann für j=0,1,2,…,n die Größen
FT j (=Frühestmöglicher Termin für das Eintreten des Ereignisses j),
ST j (=Spätestmöglicher Termin für das Eintreten des Ereignisses j)
von großer Wichtigkeit. Graphentheoretisch ist dabei FT j nichts anderes als die Länge eines
im Sinne dieser Bewertung längsten Weges von 0 nach j und ST j die Differenz FTn -(Länge
eines längsten Wegs von j nach n).
Sie können mit der sog. Critical Path Method (abg. CPM) folgendermaßen rekursiv
berechnet werden:
12
1. Graphen
Algorithmus (CPM):
FT0 = 0, FT j = max{FTi + d ij (i, j ) ∈ E} , j=1,2,…,n
bzw. (mit dem dann bekannten FTn )
STn = FTn , STi = min{ST j − d ij (i, j ) ∈ E}, i=n-1,n-2,…,0.
Beispiel:
Durch das folgende Diagramm
E/1
2
3
F/4
4
Q/0
6
4
2
4
S/5
G/3
4
7
H/2
werde ein Netzplan mit Quelle Q und Senke S dargestellt und den angeschriebenen
Bewertungen dargestellt.
Die Rangzahlen der Knoten ergeben sich dann aufgrund von
Q
0
E
0
F
0
G
0
H
0
S
0
0
0
0
1
1
1
2
3
3
2
2
2
1
1
1
3
4
4
wie in der letzten Zeile angegeben, d.h. es ist etwa
Q ↔ 0 , E ↔ 1, H ↔ 2 , G ↔ 3 , F ↔ 4 , S ↔ 5
eine monotone Nummerierung. Indem man jeden Knoten mit dieser Nummer identifiziert,
erhält man nach obigem Algorithmus die Tabelle
i
FTi
STi
0 / Q 1/ E 2 / H 3 / G 4 / F 5 / S
0 / − 2 / Q 4 / Q 6 / E 12 / G 14 / F
0 / E 2 / G 7 / S 6 / F 12 / S 14 / −
Hier sind ähnlich wie beim Dijkstra-Algorithmus zu allen Einträgen auch gleich die
Vorgänger bzw. Nachfolger mitvermerkt worden, welchen zu den entsprechenden Maxima
bzw. Minima gemäß CPM-Algorithmus geführt hatten.
1. Graphen
13
In diesem Beispiel fallen FT und ST für alle Punkte mit Ausnahme von H zusammen, d.h. für
diese sog. kritischen Ereignisse gibt es keinen Puffer (= zeitlichen Spielraum), will man die
Mindestgesamtdauer des Projekts, nämlich FT5 =14 (auch krit. Dauer genannt), nicht
gefährden. Aus graphentheoretischer Sicht müssen alle diese Knoten auf Wegen von
maximaler Länge von der Quelle bis zur Senke, auch kritische Pfade (engl. critical paths)
genannt, liegen. In obigem Beispiel gibt es nur einen kritischen Pfad, nämlich die
Kantenfolge QEGFS, welche daher auch alle kritischen Ereignisse enthält. Zur
Rekonstruktion müssen einfach nur die involvierten Knoten, nämlich Q,E,G,F,S, welche den
kritischen Erreignissen entsprechen, mit ihren Vorgängerknoten (oder alternativ
Nachfolgerknoten) verbunden werden, welche in der Tabelle eigens für diesen Zweck
vermerkt wurden.
Herunterladen