Algorithmen für Graphen

Werbung
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Steuerungsverfahren und ihre
Datenstrukturen
05 - Algorithmen für Graphen
8.
Algorithmen für Graphen ...............................3
8.1
Grundbegriffe der Graphentheorie ..........................3
8.1.1
Graphen ............................................................................. 3
8.1.2
Digraphen........................................................................... 8
8.1.3
Wurzelbäume ................................................................... 10
8.2
Datenstrukturen für Graphen .................................14
8.2.1
Adjazenzmatrix................................................................. 14
8.2.2
Kantenliste........................................................................ 18
8.2.3
DCEL................................................................................ 19
8.3
Graphdurchlauf........................................................21
8.3.1
Zusammenhangskomponenten........................................ 24
8.4
Topologische Sortierung ........................................26
8.5
Bestimmung kürzester Wege .................................30
Kapitel 08- Seite 1
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
8.5.1
Kürzeste Wege in zyklenfreien gerichteten
Graphen ........................................................................... 31
8.5.2
Kürzeste Wege in nicht-negativ gewichteten
Graphen ........................................................................... 33
8.5.3
Kürzeste Wege in beliebig gewichteten Graphen ............ 39
8.5.4
Alle kürzesten Wege ........................................................ 40
8.6
Kritische Pfade ........................................................43
8.7
Minimale spannende Bäume ..................................45
8.8
Flüsse in Netzwerken ..............................................49
Kapitel 08- Seite 2
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
8. Algorithmen für Graphen
Als Einstieg in die Graphenalgorithmen soll vorab eine Reihe von typischen,
beispielhaften Problemen vorgestellt werden. Dabei handelt es sich um Probleme bzw. Fragestellungen der Art:
• Wie kann ein Gut am billigsten von mehreren Anbietern zu mehreren
Nachfragern transportiert werden ?
• Wie können die Arbeitskräfte einer Firma am besten denjenigen Tätigkeiten zugeordnet werden, für die sie geeignet sind ?
• Wie können alle Kunden einer Firma mit einer kürzestmöglichen
Rundreise besucht werden ?
• Welche Wassermenge kann die Kanalisation einer Stadt höchstens
verkraften ?
Um die Antwort auf solche Fragen zu finden, lassen sich die Probleme in Graphen formulieren und schließlich mit Hilfe von geeigneten Graphenalgorithmen lösen.
8.1 Grundbegriffe der Graphentheorie
8.1.1
Graphen
Definition:
Ein Graph G ist ein Paar G = (V , E ) aus einer endlichen Menge V ≠ ∅ und
einer Menge E = {{v, w} | v, w ∈ V ∧ v ≠ w} von zweielementigen Teilmengen
von V . Die Elemente v ∈ V heißen Knoten (Vertices) des Graphen und die
Kapitel 08- Seite 3
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Elemente e ∈ E sind die zugehörigen Kanten (Edges). Graphisch lässt sich
eine Kante {v, w} folgendermaßen darstellen:
e
v
w
Ist e = {v, w} ∈ E , so heißen v und w Endpunkte von der Kante e .
Beispiel: „Graph mit Knotenmenge V und Kantenmenge E “
1
2
6
3
4
7
5
mit V = {1,2,3,...,7} und E = {{1,2}, {1,3}, {2,4}, {3,4}, {3,5}, {4,5}, {6,7}}
Definition:
Sei G = (V , E ) ein Graph und ∅ ≠ V ' ⊆ V eine Teilmenge der ursprünglichen
Knotenmenge.
• Die Einschränkung E V ' von E auf V ' ist die Menge aller Kanten
in E , deren beide Endpunkte in V ' liegen. Der auf V ' induzierte
Kapitel 08- Seite 4
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Teilgraph von G wird durch G V ' = (V ' , E V ' ) beschrieben. Jeder
Graph G ' = (V ' , E ' ) mit V ' ⊆ V und E ' ⊆ E heißt Teilgraph von G .
• Ein Graph G ' mit V ' = V und E' ⊂ E heißt aufspannender Teilgraph.
Bezogen auf das obige Beispiel ergibt sich für die eingeschränkte Knotenmenge V ' = {1,2,4} schließlich die Kantenmenge E V ' = {{1,2}, {2,4}} .
Definition:
Sei G = (V , E ) ein Graph und v ∈ V ein Knoten. Der Grad deg(v) des Knotens
v ist dann die Anzahl der mit v inzidenten Kanten.
Im obigen Beispiel lässt sich daher für die einzelnen Knoten die folgende Liste
angeben, aus der man den jeweiligen Grad ablesen kann.
Knoten 1 2 3 4 5 6 7
Grad
2 2 3 3 2 1 1
Einige grundlegende Definitionen und Bezeichnungen zur Graphentheorie.
Definition:
Sei G = (V , E ) ein Graph. Ein Kantenzug im Graphen ist dann eine geordnete
Folge (v0 ,..., v n ) von Knoten in V mit der Eigenschaft {vi −1 , vi } ∈ E für
i = 1,..., n . Dabei gibt es auch noch einige Kantenzüge mit besonderen Eigen-
schaften:
• Für n = 0 heißt (v0 ) leerer Kantenzug.
Kapitel 08- Seite 5
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
• Sind die vorkommenden Kanten alle paarweise verschieden, so nennt
man den Kantenzug auch Weg.
• Wenn zusätzlich noch die Bedingung v0 = v n gilt, so spricht man von
einem Kreis.
• Sind sogar die vorkommenden Knoten paarweise verschieden, so
heißt der Kantenzug auch Pfad oder „einfacher Weg“.
• Im Falle v0 = v n mit n ≥ 3 wird der Kantenzug Zyklus genannt.
• In allen Fällen wird v0 als Anfangs- und v n als Endpunkt bezeichnet. Außerdem gibt n die Länge des Kantenzuges / Weges an.
Beispiel:
Im obigen Graphen kann man unmittelbar erkennen:
• (6,7,6) ist ein Kantenzug der Länge 2 mit Anfangs- und Endpunkt 6,
jedoch kein Weg.
• (3,4,5,3) ein Zyklus der Länge 3.
Beispiel:
1
2
3
5
4
Der Kantenzug {1,2,3,4,5,3,1} ist ein Weg bzw. sogar Kreis aber kein Pfad bzw.
einfacher Weg.
Kapitel 08- Seite 6
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Definition:
Der Knoten v heißt verbindbar mit dem Knoten w , wenn es einen Kantenzug mit Anfangspunkt v und Endpunkt w gibt. Der Graph G dann heißt zusammenhängend, wenn jeder Knoten v mit jedem Knoten w verbindbar ist.
Zu einem Knoten v ∈ V wird mit [v] die Äquivalenzklasse bezüglich „verbindbar mit“ bezeichnet. Dabei werden die einzelnen Teilgraphen ([v], E [v ] )
dann die Zusammenhangskomponenten des Graphen G genannt.
Beispiel:
Wenn man wieder das erste Beispiel betrachtet, so sieht man, dass Knoten 1
verbindbar ist mit den Knoten 2,3,4,5 . Hingegen ist Knoten 6 nur verbindbar
mit Knoten 7 . Jedoch sind die Knoten 1 und 6 nicht verbindbar. Folglich gibt
es zwei Zusammenhangskomponenten.
Definition:
Ein Baum ist ein Graph, der zusammenhängend ist und keinen Zyklus enthält.
Die Knoten v ∈ V eines Baumes mit deg(v) ≤ 1 heißen Blätter. Ein Wald ist
ein Graph, dessen Zusammenhangskomponenten lauter Bäume sind.
Beispiel: „Aus zwei Bäumen bestehender Wald“
2
4
7
5
22
1
19
8
13
16
6
Kapitel 08- Seite 7
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
8.1.2
Digraphen
Definition:
Ein gerichteter Graph (Digraph bzw. „directed graph“) ist ein Paar
G = (V , E ) aus einer endlichen Menge V ≠ ∅ von Knoten und einer Menge E
von Kanten. Dabei sollen die Kanten die Form e = (v, w) mit einem Anfangspunkt v und einem Endpunkt w haben, wobei gelten soll v ≠ w .
v
e
w
Den zu einem Digraphen gehörigen Graphen G erhält man, indem man jede
Kante e = (v, w) durch e = {v, w} ersetzt. Ein Digraph heißt dann zusammenhängend, wenn der Graph G zusammenhängend ist.
Beispiel: „Digraph mit Knotenmenge V und der Kantenmenge E “
1
2
3
4
5
Kapitel 08- Seite 8
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
mit V = {1,2,3,4,5} und E = {{1,2}, {1,4}, {2,1}, {2,4}, {3,5}, {4,5}, {5,3}}
Die bereits bekannten Begriffe für einen Graphen wie
• gerichteter Kantenzug
• leerer gerichteter Kantenzug
• Anfangs- und Endpunkt
• Länge eines Weges
• gerichteter Weg, Kreis, Pfad, Zyklus
lassen sich entsprechend auch für einen Digraphen definieren.
Definition:
Ein Knoten w eines Digraphen G ist vom Knoten v aus erreichbar, wenn es
einen gerichteten Kantenzug mit dem Anfangspunkt v und dem Endpunkt w
gibt. Ein Knoten v eines Digraphen G heißt sogar Wurzel, wenn von v aus
jeder andere Knoten w ∈ G erreichbar ist.
Beispiel:
Am obigen Beispiel erkennt man, dass Knoten 3 vom Knoten 1 aus erreichbar
ist durch den Kantenzug (1,4,5,3) .
Beispiel: „Wurzel eines Digraphen“
1
2
3
Kapitel 08- Seite 9
4
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Offensichtlich stellt der Knoten 1 in diesem Graphen eine Wurzel dar.
Definition:
Sei G = (V , E ) ein Digraph und v ∈ V ein Knoten. Unter dem Eingangsgrad
d in (v) von v versteht man dann die Anzahl der Kanten in E mit dem End-
punkt v . Analog definiert man den Ausgangsgrad d out (v) von v als die Anzahl der Kanten in E mit dem Anfangspunkt v .
8.1.3
Knoten v
1
2
3
4
Eingangsgrad d in (v)
0
1
1
2
Ausgangsgrad d out (v)
1
2
1
0
Wurzelbäume
Definition:
Ein Digraph G heißt Wurzelbaum oder gerichteter Baum, wenn er eine
Wurzel besitzt und der Graph G ein Baum ist.
Beispiel: „Wurzelbaum mit der Wurzel 7“
Kapitel 08- Seite 10
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
7
1
8
13
16
2
4
6
5
22
19
Meist wird bei der graphischen Darstellung auf die Pfeile verzichtet. Statt dessen werden Wurzelbäume von oben nach unten „gelesen“.
Die nächsten Definition gehen auf die „verwandtschaftlichen“ Verhältnisse
der einzelnen Knoten ein.
Definition:
Sei T = (V , E ) ein Wurzelbaum. Ist (v, s) ∈ E , so heißt s Sohn von v und v
Vater von s . Sind v, n ∈ V und gibt es einen gerichteten Pfad von v nach n ,
so heißt n Nachkomme von v und v Vorfahr von n . Ein Knoten v ohne
Söhne heißt Blatt, ein Knoten v mit Söhnen heißt innerer Knoten.
Beispiel:
Bezogen auf das obige Beispiel erhält man somit:
• Die Knoten 1 , 8 , 13 und 16 sind Söhne der Wurzel 7 .
• Der Knoten 19 ist Nachkomme des Vaters 5 und der Knoten 2 , 1
und 7 .
• Der Knoten 6 ist ein Blatt.
• Der Knoten 16 ist ein innerer Knoten.
Kapitel 08- Seite 11
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Als nächstes folgen noch einige Begriffe und Definitionen zur weiteren Beschreibung von Wurzelbäumen und deren Geometrie.
Definition:
Ist v ∈ V ein Knoten, so nennt man die Länge des gerichteten Pfades von der
Wurzel bis zum Knoten v auch die Tiefe des Knotens v . Des weiteren bezeichnet die Länge des längsten gerichteten Pfades von v zu einem Blatt als
die Höhe des Knotens v . Die Höhe des Baumes T ist dementsprechend die
Höhe seiner Wurzel. Die Knoten der Tiefe i fasst man alle zum Niveau i zusammen, folglich stellt Niveau 0 den Wurzelknoten dar.
Beispiel:
Für den obigen Graphen gelten die folgenden Werte:
Niveau
Knoten
0
7
1
1, 8, 13, 16
2
2, 6
3
4, 5
4
22, 19
Im obigen Beispiel beträgt die Höhe der Wurzel 4 .
Definition:
Als Teilbaum von T mit der Wurzel v bezeichnet man den Teilgraphen von
T , der v und alle dessen Nachkommen enthält und selbst ein Wurzelbaum mit
Wurzel v ist. Der Wurzelbaum T hat den Grad γ , wenn für die einzelnen
Ausgangsgrade gilt:
Kapitel 08- Seite 12
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
d out (v) ≤ γ für alle v ∈ V .
Der Wurzelbaum T vom Grad γ heißt vollständig, wenn jeder innere Knoten genau γ Söhne hat und alle Blätter auf demselben Niveau i liegen.
Beispiel:
Obiger Wurzelbaum hat demnach den Grad 4 . Er ist aber nicht vollständig.
Definition:
Ein Wurzelbaum, bei dem für die Söhne jedes inneren Knotens eine feste Reihenfolge in der Numerierung vorgegeben ist, heißt geordneter Baum. Ein geordneter Baum vom Grad 2 heißt Binärbaum. Die inneren Knoten eines Binärbaumes können jeweils einen linken und einen rechten Sohn besitzen.
Beispiel: „Binärbaum“
3
11
1
19
54
17
7
10
9
5
Die Wurzel 3 hat den linken Sohn 11 und den rechten Sohn 1 . Würde man die
drei untersten Knoten 17,10 und 5 entfernen, so wäre der Baum sogar vollständig.
Kapitel 08- Seite 13
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
8.2 Datenstrukturen für Graphen
Für die Effizienz von Graphenalgorithmen ist es sowohl im Hinblick auf den
Speicherplatz als auch im Hinblick auf die Laufzeit wichtig, die für Graphen
geeigneten Speicherstrukturen zu verwenden. Im folgenden werden dazu drei
Möglichkeiten der Speicherung eines Graphen betrachtet.
In allen Fällen wird der Graph zugrunde gelegt, der bereits im einführenden
Kapitel vorgestellt wurde. Er setzt sich aus einer endlichen Menge von Knoten
V und einer endlichen Menge von Kanten E zusammen, so dass
gilt G = (V , E ) .
8.2.1
Adjazenzmatrix
Eine Möglichkeit der Speicherung besteht in der Verwendung einer Matrix,
bei der jeder Eintrag einer Kante des Graphen von einem Knoten zu einem anderen entspricht.
Definition:
Sei V = {1,..., n} die Knotenmenge des Graphen. Dann ist die zum Graphen
G = (V , E ) gehörende Adjazenzmatrix AG = (ai , j ) ∈ IR n×n elementweise definiert
durch:
1 falls (i, j ) ∈ E
ai , j = 
für alle i, j = 1,..., n
 0 sonst
Bei einem ungerichteten Graphen ist das Indexpaar (i, j ) durch die Indexmenge {i, j} zu ersetzen. In diesem Fall ist die Adjazenzmatrix symmetrisch,
da die Kanten eines ungerichteten Graphen von einem zum anderen Knoten in
beiden Richtungen nutzbar sind.
Kapitel 08- Seite 14
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Beispiel: „Adjazenzmatrix eines gerichteten Graphen“
In diesem Beispiel wird der folgende, bereits bekannte gerichtete Graph betrachtet.
1
2
3
4
5
Die zugehörige Adjazenzmatrix ist dan gegeben durch:
0

1
AG =  0

0
0

1
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0

0
1

1
0 
Bisher sind alle Kanten eines Graphen ohne eine Gewichtsfunktion angegeben
worden.
Definition:
Ein (Kanten-) gewichteter Graph G = (V , E , g ) ist ein Graph G = (V , E ) mit
den üblichen Bezeichnungen für V und E sowie mit einer Gewichtsfunktion
g : E → IR , die jeder Kante des Graphen einen reellen Wert zuweist.
Kapitel 08- Seite 15
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Beispiel: „(Kanten-) gewichteter Graph“
Die Beschriftung / Markierung der einzelnen Kanten gibt jeweils den von der
Gewichtsfunktion g genannten Wert der Kante an.
6
1
2
6
3
15
9
4
Bei gewichteten Graphen werden die Kantenbeschriftung, also die einzelnen
Gewichte, direkt in die Adjazenzmatrix eintragen. Ein geeignetes Element,
wie z.B. das Unendlich-Zeichen ∞ des Wertebereiches, wird jedoch zusätzlich
benötigt, um auszudrücken, dass keine Kante vorhanden ist.
Beispiel: „Adjazenzmatrix eines gewichteten Graphen“
Wenn man den obigen gewichteten Graphen betrachtet, so lautet die zugehörige, modifizierte Adjazenzmatrix:
∞ 6 ∞ ∞ 


 ∞ ∞ 6 15 
AG = 
∞ ∞ ∞ 9


∞ ∞ ∞ ∞ 


Wie verabredet, beschreibt dabei ein Eintrag der Form ∞ eine nicht vorhandene Kante.
Sollen neben dem Gewicht einer Kante weitere Informationen verarbeitet bzw.
gespeichert werden, so wird meist eine Kantentabelle verwendet. Einträge in
Kapitel 08- Seite 16
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
der Adjazenzmatrix sind jetzt Verweise (Zeiger) auf eine Position der Kantentabelle. Wenn eine Kantentabelle existiert und wenn alle Informationen der
Kante e = (i, j ) ∈ E mit i, j ∈ V = {1,..., n} in der Kantentabelle an Position k
stehen, dann wird in der Adjazenzmatrix der Eintrag ai , j = k gesetzt.
Beispiel: „Kantentabelle eines gewichteten Graphens“
Betrachtet wird wiederum der obige gewichtete Graph. Sei dabei die folgende
Adjazenzmatrix vorgegeben, wobei die entsprechenden Einträge der Matrix
durch Positionsnummer (Zeiger) ersetzt worden sind, die auf die zugehörige
Zeile der Kantentabelle verweisen.
∞ 1 ∞ ∞


∞ ∞ 2 3 
AG = 
∞ ∞ ∞ 4


∞ ∞ ∞ ∞


Die zugehörige Kantentabelle hat schließlich die Form:
Position k
Gewicht
Sonstige Informationen
(Kantenattribute)
1
6
2
6
3
15
4
9
Ein Vorteil der Darstellung eines gewichteten oder ungewichteten Graphen
mittels einer Adjazenzmatrix besteht in der Möglichkeit, in mit einem Auf-
Kapitel 08- Seite 17
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
wand in der Größenordnung von O(1) Operationen festzustellen, ob eine Kante e ∈ E vom Knoten v zum Knoten w existiert oder nicht. Ein Nachteil hingegen ist der hohe Speicherplatzbedarf in der Größenordnung von Θ(n 2 ) sowie der genauso hohe Initialisierungsaufwand von Θ(n 2 ) , für Graphen mit
wenige Kanten (sparse incidence matrix)
8.2.2
Kantenliste
Neben der Adjazenzmatrix kann man einen Graphen auch mit Hilfe von Kantenlisten speichern. Dabei verwalten die Kantenlisten für jeden Knoten v ∈ V
des Graphen eine Liste der beim Knoten v beginnenden Kanten. Über einen ARRAY der Länge n = V , wobei jeder Eintrag des ARRAY’s eine Liste
repräsentiert, lassen sich die Kantenlisten einfach implementieren, so dass jede
Liste direkt zugänglich ist.
Beispiel: „Kantenliste für einen Graphen“
ARRAY
in jedem ARRAYEintrag beginnt
eine Liste
Knoten
Knoten
1
2
2
3
3
4
4
EOL
4
EOL
EOL
Kante (2,3)
EOL
Knoten
Kante (2,4)
Kante (3,4)
Bei einer solchen Kantenliste enthält die i -te Liste ein Listenelement mit dem
Eintrag j für den entsprechenden Endknoten j , falls eine Kante (i, j ) ∈ E
zum Graphen gehört. Außerdem können die einzelnen Listenelemente noch
Kapitel 08- Seite 18
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
weitere Einträge enthalten, wenn z.B. zusätzliche Informationen zu speichern
sind.
Der Vorteil dieser Darstellung eines Graphen ist der geringe Platzbedarf. Er
bewegt sich nämlich in der Größenordnung von O( V + E ) , da jeder Knoten
und jede Kante nur genau einmal gespeichert wird. Zudem kann man alle
Nachbarn eines Knoten in linearer Zeit erreichen, so dass auch hier die
Zugriffszeit vergleichsweise klein ist.
Der Test, ob zwei Knoten v und w benachbart sind, also eine verbindende
Kante existiert, ist mit einer Kantenliste als Datenstruktur nicht mehr in konstanter Zeit durchführbar, da die Kantenliste des Knotens v durchlaufen werden muss, um das Vorhandensein des Knotens w zu überprüfen.
Falls zu einem Knoten auch seine Vorgänger-Nachbarknoten aufgesucht werden müssen, kann man noch inverse Kantenlisten zusätzlich verwalten, so dass
zu jedem Knoten eine Liste seiner Vorgänger zur Verfügung steht.
8.2.3
DCEL
Eine Verallgemeinerung der im vorigen Unterkapitel vorgestellten Kantenliste
stellt die doppelt verkettete Kantenliste (DCEL = double chained edge list)
dar. Diese doppelt verkettete Kantenliste weist für jeden Knoten v des Graphen eine Liste der bei v beginnenden Kanten und zusätzlich eine Liste der
bei v endenden Kanten auf. Dabei werden jeweils die Vorgänger- und Nachfolger-Nachbarknoten miteinander verkettet.
Eine Möglichkeit, solche DCEL´s recht einfach zu implementieren, besteht in
der Realisierung mit Hilfe von ARRAY’s.
Beispiel: „Doppelt verkettete Kantenliste“
Ausgehend von dem obigen, bereits bekannten, gewichteten Graphen sollen
Kapitel 08- Seite 19
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
die beiden folgenden Kantenlisten in einer doppelt verketteten Kantenliste mit
Hilfe eines ARRAY’s gespeichert werden.
als Anfangsknoten
Kante (1,2)
1
Knoten
2
2
Kante (2,3)
3
3
Kante (3,4)
4
4
Knoten
EOL
Kante (2,4)
4
EOL
EOL
EOL
als Endknoten
1
Knoten
EOL
2
Kante (1,2)
1
EOL
3
Kante (2,3)
2
EOL
4
Kante (3,4)
3
Knoten
Kante (2,4)
4
EOL
Anhand der folgenden Auflistung erkennt man, an welcher Position im
ARRAY die Liste zu finden ist, wenn man den jeweiligen Knoten als Anfangs- oder Endknoten betrachten will.
Position in der Tabelle
Knoten
als AnfangsKnoten
Als EndKnoten
1
1
--
2
2
1
3
4
2
4
--
3
Kapitel 08- Seite 20
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Die folgende Tabelle gibt nun den ARRAY wieder, mit dessen Hilfe sich eine
Rückwärts
verkettet
1
1
2
6
--
--
--
--
2
2
3
6
3
--
--
--
3
2
4
15
--
2
--
4
4
3
4
9
--
--
3
--
Gewicht
Endknoten
Vorwärts
verkettet
Anfangsknoten
Zeile im ARRAY
solche doppelt verkettete Liste speichern lässt.
Vor- Nach- Nach- Vorgänger folger gänger folger
in
in
Zeile Zeile
Sonstige
Informat.
der
Kante
8.3 Graphdurchlauf
Einige der noch folgenden Algorithmen zur Lösung von Graphenproblemen,
greifen immer wieder auf die Möglichkeit zurück, alle Knoten zu erkennen,
die von einem ausgezeichneten Knoten über die gerichteten oder ungerichteten
Kanten zu erreichen sind. Der folgende Algorithmus markiert daher in einem
Graphen G = (V , E ) all jene Knoten w ∈ V , die über Kanten mit einem bestimmten Knoten v ∈ V verbunden sind.
Algorithmus: „Graph durchlaufen“ mit dem Knoten v als Zielknoten
Dazu wird im Verlauf des Algorithmus eine geeignete Datenstruktur (Queue
oder Stack bei Tiefen- bzw. Breitensuche) benötigt, um die Knoten des Graphen darin zu speichern. Diese Struktur soll mit D bezeichnet werden. Außer-
Kapitel 08- Seite 21
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
dem sollen alle Elemente der Datenstruktur D eine Markierungsmöglichkeit
für die beiden Werte „besucht“ und „NOT besucht“ besitzen.
PROCEDURE Graphdurchlauf( v )
FOR alle Knoten w ∈ V \ {v}
wmarkierung := NOT besucht
D := ∅
füge Knoten v in Datenstruktur D ein
WHILE D ≠ ∅
entferne einen beliebigen Knoten w aus Datenstruktur D
wmarkierung := besucht
FOR alle Kanten e = ( w, x) ∈ E mit x ∈ V
IF NOT ( x markierung = besucht)
THEN
füge Knoten x in Datenstruktur D ein
Am Ende findet man alle Knoten des Graphen, die über Kanten mit dem Ausgangsknoten v verbunden sind, anhand ihrer Markierung „besucht“.
Falls das Einfügen und Löschen eines Knotens in die Datenstruktur D vom
Aufwand her in der Größenordnung von O(1) Operationen möglich ist, so ergibt sich für die vom gesamten Algorithmus „Graphdurchlauf“ benötigte Anzahl an Operationen eine Größenordnung von O( V + E ) Operationen. Dies
beruht darauf, dass im schlechtesten Fall jeder Knoten w ∈ V einmal entfernt
und jede Kante e ∈ E einmal aufgegriffen wird.
Ist der zu Anfang ausgesuchte Knoten v eine Wurzel des Graphen G , so wird
jeder einzelne Knoten des Graphen genau einmal markiert. Ist hingegen v
kein Wurzelknoten, so bleiben bei einem Durchlauf des Algorithmus auch einige unbesuchte Knoten übrig.
Kapitel 08- Seite 22
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Was die mögliche Strategie beim Durchlaufen des Graphen angeht, so ist sie
u.a. abhängig von der verwendeten Datenstruktur D . Dementsprechend gibt es
zwei wesentliche Arten, einen Graphen zu durchlaufen:
• Breadth First („zuerst in die Breite“)
Als Datenstruktur D wird eine Queue verwendet.
Der Algorithmus „Graphdurchlauf“ besucht dabei die Knoten ebenweise:
im Graph werden zunächst alle über einen Pfad der Länge 1,
dann über einen Pfad der Länge 2,..., erreichbaren Knoten
besucht.
• Depth First („zuerst in die Tiefe“)
Als Datenstruktur D wird ein Stack verwendet.
Der Algorithmus „Graphdurchlauf“ besucht dabei die Knoten folgendermaßen:
im Graph wird zunächst ein Pfad bis zum letzten Endpunkt
verfolgt; danach wird der nächste Nachbarpfad untersucht,...
Die Depth First-Strategie wird meist rekursiv implementiert, wobei
der Stack nicht mehr explizit auftritt. Als Algorithmus lässt sich dies
wie folgt formulieren.
Algorithmus: „Markieren“ für die Depth First-Strategie
PROEDURE markieren( v )
v markierung := besucht
FOR alle Kanten e = (v, x) ∈ E mit x ∈ V
IF NOT ( x markierung = besucht)
THEN
markieren( x )
Kapitel 08- Seite 23
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
8.3.1
Zusammenhangskomponenten
Bei der Beantwortung der Frage, welche Knoten eines Graphen G = (V , E ) über Kanten mit einem Knoten v verbunden sind, stößt man auf den Begriff der
Zusammenhangskomponenten. Dazu sei G = (V , E ) ein gerichteter oder ungerichteter Graph. Dann kann man alle Zusammenhangskomponenten des Graphen G bestimmen, indem man den Algorithmus „Graphdurchlauf“ geringfügig modifiziert:
Algorithmus: „Zusammenhangskomponenten“
Diesmal besitzen alle Knoten des Graphen die Möglichkeit, mit dem Wert „0“
oder dem Namen eines Knotens „ v “ markiert zu werden. Zudem wird wieder
eine geeignete Datenstruktur D (Queue oder Stack) benötigt. Mit Hilfe dieser
Voraussetzung ergibt sich dann der folgende Algorithmus:
Kapitel 08- Seite 24
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
PROCEDURE Zusammenhangskomponenten
FOR alle v ∈ V
v markierung := „0“
FOR alle v ∈ V
IF v markierung = „0“
THEN
D := ∅
v markierung := „ v “
füge Knoten v in Datenstruktur D ein
WHILE D ≠ ∅
entferne einen beliebigen Knoten w aus
Datenstruktur D
FOR alle Kanten e = ( w, x) ∈ E oder
e = ( x, w) ∈ E mit x ∈ V
IF ( x markierung = „0“)
THEN
x markierung := „ v “
füge Knoten x in
Datenstruktur D ein
Was den Aufwand des Algorithmus „Zusammenhangskomponenten“ angeht,
so werden alle Knoten des Graphen G , ähnlich wie beim Algorithmus „Graph
durchlaufen“, von der Größenordnung her in O( V + E ) Operationen markiert.
Dabei erhalten zwei Knoten genau dann die gleiche Markierung, wenn sie beide jeweils zur selben Zusammenhangskomponente des Graphen gehören.
Kapitel 08- Seite 25
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
8.4 Topologische Sortierung
Aus dem einführenden Kapitel ist bereits der Begriff des zyklischen Graphen
bekannt. Solche zyklische Graphen treten ganz allgemein in vielen Anwendungen auf, in denen gerichtete Graphen eine Rolle spielen. Sie können dabei
aber in einer Problemstellung bzw. Anwendung durchaus unerwünscht sein.
(So sind zyklische Gruppen von V1 ⊂ V2 keine zulässigen Lösungen des Travelling Salesman Problem)
Fall etwas der zyklische Graph
A
B
C
D
zur Modellierung einer Fertigungsstraße herangezogen würde, so würde daraus folgen, dass Arbeitsgang B vor Arbeitsgang C, Arbeitsgang C vor Arbeitsgang D und Arbeitsgang D vor Arbeitsgang B ausgeführt werden muss.
Dies ist aber ein Widerspruch. Daher werden für solche und andere Probleme
gerichtete Graphen ohne Zyklen benötigt.
Um feststellen zu können, ob ein Graph zyklenfrei ist oder nicht, wird als
nächstes die Definition der topologischen Sortierung eingeführt.
Definition:
Sei G = (V , E ) ein gerichteter Graph und es soll gelten V = n . Eine Anordnung (v1 ,..., v n ) der Knotenmenge V heißt konsistent geordnet, falls gilt:
Kapitel 08- Seite 26
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
e = (v i , v j ) ∈ E ⇒ i < j
Der gesamte Graph G wird topologisch sortiert genannt, wenn die gesamte
Knotenmenge V konsistent angeordnet ist.
Beispiel: „Topologisches Sortieren“
Der gerichtete Graph mit Zyklus aus dem obigen Beispiel wird so modifiziert,
dass seine Knotenmenge konsistent angeordnet ist, so dass der Graph topologisch sortiert ist.
A
B
C
D
Die konsistenten Anordnungen der Knotenmenge lauten dann (A,D,B,C)
und (D,A,B,C).
Nach der Definition der topologischen Sortierung soll nun der Zusammenhang
zwischen dieser Eigenschaft eines Graphen und der (Nicht-)Existenz von Zyklen aufgedeckt werden. Dazu der nächste Satz.
Satz:
Ein gerichteter Graph G ist topologisch sortierbar ⇔ der gerichtete Graph G
enthält keine Zyklen.
Beweis:
„ ⇒ “: Unter der Annahme, dass ein Graph mit einem Zyklus (vi ,..., vi )
1
k
topologisch sortierbar in der Form (v1 ,..., vi ,..., vi ,..., v n ) ist, führt zu der
1
Kapitel 08- Seite 27
k
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Ungleichung i1 < ik . Gleichzeitig resultiert aus dem zyklischen
Verhalten ik < i1 . Damit liegt ein Widerspruch vor und die Annahme
ist falsch. Damit ist die Beweisrichtung „zyklisch ⇒ nicht topologisch
sortierbar“ gezeigt und daraus per Negation die Aussage „topologisch
sortierbar ⇒ nicht zyklisch“ gefolgert worden.
„ ⇐ “: Der Beweis lässt sich mit Hilfe vollständiger Induktion durchführen.
Für n = 1 und
n − 1 sollen die zu zeigende Aussage gelten. Dann
kann man aus einem zyklenfreien Graphen mit n Knoten (v1 ,..., v n ) den
sicher existierenden Knoten v mit dem Eingangsgrad d in (v) = 0 , an
dem also keine Kanten ankommen, entfernen. Die restlichen n − 1
Knoten lassen sich wegen der Induktionsannahme topologisch
sortieren. Danach wird der Knoten v anschließend wieder vorne
eingefügt, wodurch die gesamte Knotenfolge wieder topologisch
sortiert ist.
Aus dieser im Beweis verwendeten Idee ergibt sich unmittelbar der folgende
Algorithmus, der eine Knotenfolge eines Graphen topologisch sortiert. Dabei
bewegt sich der Aufwand des Algorithmus in einer Größenordnung von
O( V + E ) Operationen.
Algorithmus: „topologisches Sortieren“ einer Knotenfolge V = {v1 ,..., v n )
(als Test auf Zyklenfreiheit)
Dazu wird wieder eine geeignete Datenstruktur D in Form eines Stacks oder
einer Queues benötigt. Dann ergibt sich schließlich:
Kapitel 08- Seite 28
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
PROCEDURE topologisches_Sortieren
D=∅
FOR alle v ∈ V
δ (v) := d in (v)
IF δ (v) = 0
THEN
füge Knoten v in Datenstruktur D ein
FOR j = 1,..., V
IF D = ∅
THEN
melde „Der Graph G hat einen Zyklus“
STOP {fertig}
ELSE
wähle beliebigen Knoten v j aus Datenstruktur D
entferne Knoten v j aus Datenstruktur D
FOR alle Kanten e = (v j , x) ∈ E mit x ∈ V
δ ( x) := δ ( x) − 1
IF δ ( x) = 0
THEN
füge Knoten x in Datenstruktur
D ein
Am Ende bilden die im Verlauf des Algorithmus jeweils gewählten Knoten v j
mit ihrer Reihenfolge v1 ,..., v n eine topologisch sortierte Knotenfolge.
Kapitel 08- Seite 29
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
8.5 Bestimmung kürzester Wege
Eines der wichtigsten graphentheoretischen Probleme in der Praxis ist die Ermittlung kürzester Wege in gewichteten Graphen. Als Anwendungsfall sind
z.B. Verkehrsnetze zu nennen, bei denen die Suche nach kürzesten Wegen oder nach Wegen, bei denen die geringsten Kosten für den Transport einer gewissen Gütermenge anfallen, wie auch alle CPM-Netze (Netze mit Knoten, die
Ereignisse eines Projektes darstellen).
Zunächst wird jedoch noch eine Definition benötigt, die den Begriff des kürzesten Weg zwischen zwei Knoten eines Graphen einführt.
Definition:
• Sei G = (V , E , g ) ein gerichteter oder ungerichteter Graph mit der
Gewichtungsfunktion g : E → IR für die Kanten. Außerdem seien
x, v ∈ V zwei Knoten des Graphen.
Der Abstand eines Knotens x von einem vorher gewählten Knoten v
wird dann, falls es überhaupt einen solchen Kantenzug von v nach x
gibt, definiert durch:
l
δ v ,g ( x ) := inf{ ∑ g(( w j −1 , w j )) | W = ( w0 ,..., wl ) ist Kantenzug von w0 = v nach wl = x }
j =1
Existiert ein solcher Kantenzug nicht, danngilt
δ v , g ( x) = ∞ .
• Liegt allerdings der Fall δ v , g ( x) < ∞ vor, so wird der zugehörige Kantenzug W als der kürzester Weg zwischen den Knoten v und x bezeichnet.
Bemerkung:
Setzt man für die Gewichtsfunktion g (e) = 1 für alle Kanten e ∈ E des Gra-
Kapitel 08- Seite 30
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
phen voraus und gilt noch zusätzlich δ v , g ( x) < ∞ , so sind der Abstand δ v , g ( x)
und die Länge des zugehörigen Kantenzuges W von v nach x identisch.
8.5.1
Kürzeste Wege in zyklenfreien gerichteten
Graphen
Dieses Unterkapitel befasst sich damit, in einem gerichteten, zyklenfreien und
gewichteten Graphen G = (V , E , g ) den kürzesten Weg von einem Startknoten
v ∈ V , an dem wegen der Voraussetzung d in (v) = 0 keine Kante endet, bis hin
zu einem Knoten x ∈ V zu bestimmen. Dabei wird dieser Abstand δ v , g ( x) für
alle Knoten x ∈ V ermittelt.
Der nächste Algorithmus bestimmt nun all diese Abstände bzw. kürzesten
Wege.
Algorithmus: „kürzeste Wege in zyklenfreien gerichteten Graphen“ mit Hilfe
von
Kapitel 08- Seite 31
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
PROCEDURE kürzeste_Wege_in_zykelfreien_gerichtetetn_Graphen( V , E , g )
V := topologische sortierte Knotenfolge (v1 ,..., v n )
v :=v1 mit d in (v1 ) = 0
FOR alle w ∈ V
IF w = v
THEN
δ v , g ( w) := 0
ELSE
δ v , g ( w) := +∞
FOR j = 1,..., n
w := v j
FOR alle Kanten e = ( w, x) ∈ E mit x ∈ V
δ v , g ( x) := min{δ v , g ( x), δ v , g ( w) + g (( w, x))}
Bei der Berechnung der Gewichtes der kürzesten Wege stellt man fest, dass
beim l -ten Durchlauf der FOR-Schleife mit j = 1,..., n durch δ v , g ( x) jeweils
das minimale Gewicht der Kantenzüge W von v nach x ausgedrückt wird,
wobei diese Kantenzüge sich jedoch nur aus den Knoten z i mit z i ∈ {v1 ,..., vl } ,
bis eventuell auf den Knoten x selbst, zusammensetzen. Daher stehen die
wirklich kürzesten Wege des Graphen erst nach Berücksichtigung aller Knoten zur Verfügung.
Aufgrund der Struktur des Algorithmus ergibt sich für den Berechnungsaufwand aller Abstände δ v , g ( x) eine Größenordnung von O( V + E ) Operationen.
Kapitel 08- Seite 32
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
8.5.2
Kürzeste Wege in nicht-negativ gewichteten
Graphen
In diesem Unterkapitel liegt der Schwerpunkt der Betrachtungen auf Graphen
mit einer nicht-negativen Gewichtsfunktion für die Kanten. Der Vorteil solcher Graphen bzw. Gewichtsfunktionen basiert darauf, dass sich durch die
Hinzunahme weiterer Kanten die bisher ermittelten Abstände zwischen Knoten nicht wieder verkürzen können.
Daher sei G = (V , E , g ) ein gerichteter oder ungerichteter Graph mit einer
nicht-negativen Gewichtsfunktion g , so dass demnach g (v) ≥ 0 für alle v ∈ V
gilt. Zudem sei ein Knoten v ∈ V gewählt.
Damit stellt sich in diesem Abschnitt die Aufgabe, alle Abstände δ v , g ( x) vom
Knoten v ∈ V bis hin zu den Knoten x ∈ V zu bestimmen. Um den Lösungsansatz für diese Problem zu verdeutlichen, wird zunächst die grundlegende Idee
vermittelt, bevor sich danach der eigentliche Algorithmus anschließt.
Die Menge aller Knoten V des Graphen wird ausgehend vom Knoten v in
drei Untermengen zu unterteilen:
• „Menge der gewählten Knoten“
Zwischen dem Knoten v und den Knoten dieser Menge ist eine kürzester Weg bekannt und bereits als solcher gewählt.
• „Menge der Randknoten“
Zwischen dem Knoten v und den Knoten dieser Menge ist mindestens ein Weg bekannt, der jedoch nicht der kürzeste Weg sein muss.
• „Menge der unerreichten Knoten“
Es existiert kein Weg oder es ist noch kein Weg bekannt zwischen
dem Knoten v und den Knoten dieser Menge.
In Form einer Skizze ergibt sich damit das folgende Bild:
Kapitel 08- Seite 33
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
dies ist zumindest ein
bekannter Weg
Menge der
unerreichten Knoten
dieser kürzeste Weg
ist bereits bekannt
Knoten v' '
Knoten v'
Knoten
v
Menge der
gewählten Knoten
Knoten v' ' '
über diesen Weg ist
noch nichts bekannt
Menge der
Randknoten
Menge aller Knoten
Aus der obigen Skizze lässt sich auch auf einfache Weise die weitere Vorgehensweise für den Algorithmus ablesen. Dabei werden einfach für jeden Knoten x ∈ V die folgenden Eigenschaften gespeichert:
⇒ den bisher berechneten, vorläufigen Abstand δ v , g ( x) zum
Anfangsknoten v
⇒ seinen Vorgänger auf dem bisher berechneten, vorläufig kürzesten Weg
von v nach x
⇒ eine Markierung, die darüber Auskunft gibt, ob x bereits gewählt worden
ist oder nicht
⇒ die Menge der Randknoten
Aufgrund der nicht-negativen Gewichtsfunktion g ist es nun möglich, die
Verlängerung eines kürzesten Weges durch Hinzunahme einzelner Kanten
Kapitel 08- Seite 34
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
zu bereits bekannten kürzesten Wegen mit folgender Invarianten zu berechnen:
• Für alle kürzesten Wege vom Ausgangsknoten v bis zu einem Knoten x und alle Kanten ( x, v' ) mit v'∈ {Menge der gewählten Knoten}
gilt:
δ v ,. g ( x) + g (( x, v' )) ≥ δ v , g (v' )
• Es existiert mindestens ein kürzester Weg vom Ausgangsknoten v
bis zu einem Knoten x und mindestens eine Kante ( x, v' ) mit
v'∈ {Menge der gewählten Knoten} , so dass gilt:
δ v , g ( x) + g (( x, v' )) = δ v , g (v' )
Mit Hilfe dieser beiden Invarianten lässt sich nun der folgende Algorithmus
formulieren.
Algorithmus: „kürzeste Wege in nicht-negativ gewichteten Graphen“
Im Verlauf dieses Algorithmus wird die Prozedur „Randergänzung( R, x )“ mit
der Menge der Randpunkte R und einem Knoten x als Argumente aufgerufen. Ihre Funktionsweise wird direkt im Anschluss anhand ihres Pseudo-Codes
erläutert. Außerdem wird jeder Knoten des Graphen mit einer Markierung
„gewählt“ versehen, die darüber Auskunft gibt, ob der zum Knoten führende
kürzeste Weg bereits bekannt ist oder nicht.
Kapitel 08- Seite 35
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
PROCEDURE kürzeste_Wege_in_nicht-negat._gewichteten_Graphen( V , E , g )
FOR alle x ∈ V \ {v}
δ v , g ( x) := +∞
Vorgänger (x) := ∅
x markierung := NOT gewählt
δ v , g (v) := 0
Vorgänger (v) := v
v markierung := „gewählt“
R := ∅
Randergänzung( R, v )
WHILE R ≠ ∅
entferne Knoten x mit minimalem Abstand δ v , g ( x) aus
der Randmenge R
x markierung := gewählt
Randergänzung( R, x )
Der Aufruf der Prozedur „Randergänzung ( R, x )“ mit einem gewählten Knoten x als Argument bewirkt, dass einige der bisher unerreichten Knoten zur
Menge der Randknoten R hinzu genommen und die entsprechenden, dadurch
kürzer gewordenen Abstände zu den Randknoten angepasst werden. Wie dies
im Detail aussieht, kann man in nächsten Algorithmus erkennen.
Algorithmus: „Randergänzung( R, x )“ mit Hilfe der Prozedur
Kapitel 08- Seite 36
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
PROCEDURE Randergänzung( R, x )
FOR alle Kanten e = ( x, v' ) ∈ E mit v'∈ {Menge der gewählten Knoten}
IF NOT ( v' markierung = gewählt) AND ( δ v , g ( x) + g (( x, v' )) < δ v , g (v' ) )
THEN
Vorgänger (v' ) := x
δ v , g (v' ) = δ v , g ( x) + g (( x, v' ))
füge Knoten v' in Menge der Randknoten R ein
Beispiel:
Für dieses Beispiel soll der folgende ungerichtete, nicht-negativ gewichtete
Graph als Grundlage verwendet werden. Als gewählter Ausgangsknoten ist
dabei der Knoten 1 vorgesehen.
Ausgangsknoten
2
1
15
9
3
2
5
7
4
4
1
6
5
10
6
3
7
Um den Verlauf des oben vorgestellten Algorithmus darzustellen, werden die
einzelnen Schritte des Verfahren in einer Tabelle notiert. Dabei werden die für
die einzelnen Knoten relevanten Daten jeweils folgendermaßen zu einem Tripel zusammengefasst:
Kapitel 08- Seite 37
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
(Knoten x, Abstand δ v , g ( x), Vorgänger ( x))
Bei der Suche nach allen kürzesten Wegen vom Knoten 1 aus erkennt man
dann mit Hilfe der Daten aus der folgenden Tabelle, wie sich vorläufige Abstände verändern können. Außerdem lässt sich anhand der Liste der gewählten
Knoten und der zugehörigen Vorgängerinformation jeweils ein kürzester Weg
vom Knoten 1 bis zu jedem anderen Knoten konstruieren.
Zur Hervorhebung ist in der rechten Spalte jeweils das Tripel, dessen Abstandswert das Minimum ist, unterstrichen.
gewählter Knoten
Menge der Randknoten
(als Tripel notiert)
Knoten 1 mit
Abstand 0 und Nachfolger 1
(2,2,1), (3,15,1), (4,9,1)
Knoten 2 mit
Abstand 2 und Nachfolger 1
(3,15,1), (4,7,2), (5,9,2)
Knoten 4 mit
Abstand 7 und Nachfolger 2
(3,15,1), (5,9,2), (6,11,4), (7,17,4)
Knoten 5 mit
Abstand 9 und Nachfolger 2
(3,15,1), (6,11,3), (7,12,5)
Knoten 6 mit
Abstand 11 und Nachfolger 4
(3,12,6), (7,12,5)
Knoten 3 mit
Abstand 12 und Nachfolger 6
(7,12,5)
Knoten 7 mit
Abstand 12 und Nachfolger 5
∅
Mit Hilfe dieser Tabelle kann man nun auch alle kürzesten Wege angeben. Sie
sehen wie folge aus:
Kapitel 08- Seite 38
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
von Knoten 1
nach Knoten
über die folgenden Knoten
Gesamtgewicht
1
1
0
2
1 2
2
3
1 2 4 6 3
12
4
1 2 4
7
5
1 2 5
9
6
1 2 4 6
11
7
1 2 5 7
12
8.5.3
Kürzeste Wege in beliebig gewichteten Gra-
phen
Bisher wurden die kürzesten Wege in Graphen berechnet, die entweder zyklenfrei sind oder deren Gewichtsfunktion nicht-negativ ist. In diesem Kapitel
soll nun kurz diskutiert werden, welche Folgen die Zulassung einer verallgemeinerten Form der Gewichtsfunktion haben wird. Dabei ändert sich die Berechnung der kürzesten Wege in einem Graphen erheblich, da jetzt auch negative Gewichte erlaubt sind.
Da die Gewichtsfunktion g nun beliebige Werte annehmen kann, muss es keinen eindeutigen kürzesten Weg mehr geben. Dies beruht auf der möglichen
Existenz eines Zyklus, dessen Gesamtgewicht, also die Summe der einzelnen
Kantengewichte, negativ ist. Dieser Sachverhalt lässt sich am besten folgendermaßen verdeutlichen. Der Weg von einem Knoten v hin zu einem Knoten
w habe das Gesamtgewicht 13. Entlang dieses Weges befände sich zudem ein
Zyklus, dessen Summe der Kantengewichte beim einmaligen Durchlaufen des
Kapitel 08- Seite 39
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Zyklus –7 beträgt. Nun besteht die Möglichkeit, einen Weg zu planen, bei dem
dieser Zyklus einmal mehr durchlaufen wird, wodurch sich das Gesamtgewicht des Weges auf 6 vermindern würde. Damit wäre ein kürzerer Weg von
v nach w gefunden. Setzt man dieses wiederholte Durchlaufen des Zyklus
fort, so ergeben sich immer neue kürzeste Wege. Somit kann Naheliegenderweise kein kürzester Weg existieren, da das Gesamtgewicht eines Weges beliebig minimierbar ist. Dies drückt man auch durch δ v , g ( w) = −∞ aus.
Aus diesen Überlegungen lässt sich sogar ein Satz über die Existenz von kürzesten Wegen formulieren.
Satz:
In einem beliebig gewichteten, gerichteten oder ungerichteten Graphen, der
einen Weg vom Knoten v hin zu einem Knoten w enthält, existiert ein kürzester Weg von v nach w genau dann, wenn kein einziger Weg von v nach w
einen Zyklus mit negativem Gesamtgewicht aufweist.
8.5.4
Alle kürzesten Wege
Eine weitere Aufgabenstellung im Rahmen der Untersuchung von kürzesten
Wegen ist die Bestimmung aller kürzesten Wege in einem Graphen, d.h. es
wird für alle Paare von Knoten eines gerichteten oder ungerichteten, beliebig
gewichteten Graphen G = (V , E , g ) der jeweilige kürzeste Weg bestimmt. Dabei wird zusätzlich noch die Voraussetzung benötigt, dass der Graph keine
Zyklen mit einem negativen Gesamtgewicht enthält, um die Existenz solcher Wege gewährleisten zu können.
Das Problem, alle kürzesten Kanten zu bestimmen, lässt sich auf recht einfache Weise lösen. Dazu werden sukzessive jeweils zwei Kanten zu einer neuen
Kante zusammengefasst und das Gewicht entsprechend angepasst, bis am Ende ein Weg zwischen zwei Knoten nur noch aus genau einer Kante besteht und
Kapitel 08- Seite 40
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
das Gesamtgewicht gerade dem Gewicht dieser Kante entspricht.
Die Umsetzung dieser Lösungsidee geschieht nun dadurch, dass ausgehend
vom Graphen G eine Folge von Graphen Gi mit bestimmten Eigenschaften
konstruiert wird. Dazu sei die Knotenmenge des Graphen mit V = {v1 ,..., v n }
bezeichnet, so dass insgesamt n Knoten zur Verfügung stehen. Die erwähnten
Eigenschaften setzen sich dabei wie folgt zusammen.
• Der Graph Gi hat die gleiche Knotenmenge V = {v1 ,..., v n } wie der
Graph G .
• Im Graphen Gi existiert genau dann eine Kante (v, w) mit dem Gewicht g ((v, w)) = a , wenn es im Ausgangsgraphen G einen Kantenzug vom Knoten v zum Knoten w gibt, der als Zwischenknoten nur
Knoten aus der Menge {1,..., i} enthält. Der kürzeste derartige Kantenzug hat dabei das Gewicht a .
Dient als Startpunkt für die Folge der Graph G0 := G , so erfüllt dieser Graph
bereits die oben genannten Eigenschaften bzw. Spezifikationen. Um die einzelnen Graphen der Folge aber konstruieren zu können, benötigt man eine
Konstruktionsvorschrift für den i -ten Schritt, wenn aus dem Graph Gi −1 der
nachfolgende Graph Gi ermittelt wird.
Konstruktionsvorschrift:
Seien {w1 ,..., wr } ∈ V die Vorgänger vom Knoten vi im Graphen Gi −1 und
{x1 ,..., x s } ∈ V die Nachfolger. Bei den ungerichteten Graphen kann man auf die
Unterscheidung in Vorgänger und Nachfolger verzichten. Dort reicht es die
Menge der unmittelbaren Nachbarknoten zu untersuchen. Mit Hilfe dieser Bezeichnungen werden nun im i -ten Schritt alle Paare ( wk , xl ) mit k = 1,..., r und
l = 1,..., s betrachtet.. Ein solches Paar könnte z.B. folgendermaßen aussehen.
Kapitel 08- Seite 41
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
g ki ,l
wk
g ki −,i1
gii,−l1
xl
vi
Abbildung 1:
Es gibt an dieser Stelle zwei Möglichkeiten die beiden unteren Kanten in der
oberen Abbildung in die gestrichelte, obere Kante zu überführen:
• Falls im Graphen Gi −1 noch keine Kante ( wk , xl ) existiert, so erzeuge
eine solche Kante ( wk , xl ) mit dem Gewicht g ki ,l = g ki −,i1 + g ii.−l 1 .
• Falls im Graphen Gi −1 bereits eine Kante ( wk , xl ) existiert, so soll im
Graphen Gi für das Gewicht der Kante ( wk , xl ) gelten
g
i
k ,l
 g ki −,i1 + g ii,−l 1
=  i −1
 g k ,l
falls g ki −,i1 + g ii,−l 1 < g ki −,l1
sonst
Der auf diese Weise konstruierte Graph Gi erfüllt wiederum die geforderten Eigenschaften bzw. Spezifikationen, denn im Graph Gi −1 waren bereits
alle kürzesten Kantenzüge bekannt und durch Kanten repräsentiert, die als
Zwischenknoten nur Knoten aus der Teilmenge {v1 ,..., vi −1 } verwendeten. Nach
dem i -ten Konstruktionsschritt sind in Gi jetzt alle Kantenzüge bekannt, die
auf Knoten aus der Menge {v1 ,..., vi } zurückgreifen.
Dementsprechend sind nach n Schritten die Gewichte aller kürzesten Wege
aus dem Graphen G im Graph Gn repräsentiert.
Die oben erläuterte Konstruktionsidee für die Folge von Graphen Gi wird nun
im folgenden Algorithmus umgesetzt.
Kapitel 08- Seite 42
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Algorithmus: „alle kürzesten Wege in beliebig gewichtetem, zyklenfreien
Graphen“
PROCEDURE alle_kürz._Wege_in_bel._gew._zyklenfreien_Graphen( V , E , g )
FOR alle w ∈ V
FOR alle x ∈ V
IF w = x
THEN
δ ( w, x) := 0
ELSE
IF ( w ≠ x ) AND ( ( w, x) ∈ E )
THEN
δ ( w, x) := g (( w, x))
ELSE
δ ( w, x) := +∞
FOR i = 1,..., n
FOR alle w ∈ V
FOR alle x ∈ V
δ ( w, x) := min{δ ( w, x), δ ( w, vi ) + δ (vi , x)}
8.6 Kritische Pfade
Unter dem Begriff eines kritischen Pfades versteht man bei einem gerichteten
Graphen den Pfad mit dem maximalen Gewicht von einem Anfangsknoten
des Graphen zu einem Endknoten.
Definition:
Gegeben sei ein gerichteter gewichteter Graph G = (V , E , g ) ohne Zyklen. Zusätzlich existieren ein Anfangsknoten v mit dem Eingangsgrad d in (v) = 0 und
Kapitel 08- Seite 43
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
ein Endknoten w mit dem Ausgangsgrad d out ( w) = 0 . Dann wird das Gewicht
des Weges, der die Knoten v und w verbindet, definiert durch:
l
K v, g (w) = max{∑ g ((z k −1, z k )) | W = ( zo ,..., zl ) ist ein Kantenzugvon z o = v nach zl = w} ,
k =1
falls ein solcher Kantenzug W existiert
K v , g ( w) = +∞ ,
falls kein solcher Kantenzug W existiert
Jeder Pfad vom Anfangsknoten v zum Endknoten w mit dem Gesamtgewicht
K v , g ( w) heißt kritischer Pfad.
Beispiel: „Kritischer Pfad“
kritische
Pfade
2
Eingangsknoten
1
5
3
4
3
2
4
Ausgangsknoten
5
2
4
In diesem Graphen existieren mit (1,2,5) und (1,3,5) zwei kritische Pfade, die
jeweils das Gewicht 8 aufweisen.
Zum Schluss wird noch kurz der Algorithmus vorgestellt, mit dessen Hilfe
man die kritischen Pfade von einem Eingangsknoten bis zu einem Endknoten
berechnen kann. Dabei greift das Verfahren auf den bereits bekannten Al-
Kapitel 08- Seite 44
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
gorithmus „kürzeste Wege in zyklenfreien gerichteten Graphen“ zurück,
indem die Gewichtsfunktion negativ verwendet wird.
Algorithmus: „kritische Pfade“
mit dem Eingangsknoten v und dem Ausgangsknoten w
PROCEDURE kritische Pfade( v, w )
kürzeste Wege in zyklenfreien gerichteten Graphen( V , E ,− g )
IF δ v , − g ( w) = +∞
THEN
K v , g ( w) := +∞
ELSE
K v , g ( w) := −δ v , − g ( w)
8.7 Minimale spannende Bäume
Definition:
Ein spannender Baum in einem ungerichteten Graphen G = (V , E ) ist ein
Teilgraph der Form G ' = (V ' , E ' ) , mit G ' ⊂ G . An den Teilgraphen werden dabei folgende Anforderungen gestellt:
• Der Teilgraph G ' ist ein Baum, also zusammenhängend und ohne
Zyklen.
• Die Knotenmenge V ' und V sind identisch, also V ' = V .
Neben einem spannenden Baum wird noch der Begriff des minimal spannenden Baumes in einem gewichteten ungerichteten Graphen G = (V , E , g ) eingeführt.
Definition:
Unter einem minimal spannenden Baum bzw. einem minimalen Spann-
Kapitel 08- Seite 45
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
baum in einem gewichteten, ungerichteten Graphen G = (V , E , g ) versteht man
einen spannenden Baum G ' = (V , E ' , g E ' ) mit E ' ⊂ E für dessen Gesamtgewicht g (G ' ) = ∑ g (e) gelten soll:
e∈E '
g (G ' ) = min{g (G ' ' ) | G ' ' = (V , E ' ' , g
E ''
) ist ein spannender Baum}
Beispiel: „Minimaler Spannbaum“
4
1
2
5
1
8
2
1
3
3
4
1
4
3
3
2
4
2
5
5
Ausgangsgraph
minimaler Spannbaum
des Ausgangsgraphen
Die Grundlage zur Konstruktion minimal spannender Bäume ist die folgende
Idee, wie sie auch im nächsten Algorithmus umgesetzt wird:
Auf Anfang sei T = (VT , ET , g T ) ein Graph , der genau die Knoten von G
enthält, aber keine Kanten. Demnach gilt also VT = V , ET = ∅ und
g T = g . Die Kanten des Graphen G werden nun in der Reihenfolge
steigender Gewichte betrachtet. Wenn eine Kante zwei getrennte Komponenten von T verbindet, so wird sie in den Graphen T eingefügt und
die Komponenten werden verschmolzen. Andernfalls wird die Kante
Kapitel 08- Seite 46
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
ignoriert. Sobald T nur noch eine einzige Komponente besitzt, stellt der
Graph T einen minimal spannender Baum des Ausgangsgraphen G dar.
Algorithmus: „minimaler spannender Baum“
Im Verlauf des Algorithmus wird eine Datenstruktur K zur Speicherung von
Kanten benötigt. und stellt den Vorrat an verfügbaren Kanten dar. Außerdem
wird noch eine mit W bezeichnete Datenstruktur zur Speicherung von Teilmengen der Knotenmenge gebraucht. Diese Teilmengen beschreiben die Zusammenhangskomponenten des Graphen.
PROCEDURE minimaler_spannender_Baum
K := ∅
W := ∅
FOR alle Kanten e ∈ E
füge Kante e in Datenstruktur K ein
FOR alle Knoten v ∈ V
füge Menge {v} in Datenstruktur W ein
T := ∅
WHILE K ≠ ∅
e := Kante {v, w} ∈ K mit minimalem Gewicht
entferne Kante e aus Datenstruktur K
IF ( v ∈ T1 ⊂ W und w ∈ T2 ⊂ W mit T1 ∩ T2 = ∅ )
THEN
ersetze T1 und T2 in der Datenstruktur W durch T1 ∪ T2
füge Kante {v, w} in Graph T ein
Ist der Graph G zusammenhängend, so erzeugt der oben angegebene Algorithmus einen minimal spannenden Baum für G , andernfalls werden minimal
spannende Bäume für alle Zusammenhangskomponenten von G erzeugt.
Was die Eindeutigkeit eines durch diesen Algorithmus erzeugten minimal
Kapitel 08- Seite 47
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
spannenden Baumes angeht, so wird man leicht an einem Beispiel erkennen
können, dass dies nicht immer der Fall ist.
Der Aufwand dieses Algorithmus bewegt sich in einer Größenordnung von
O( E log( V ) Operationen.
Abschließend wird die Vorgehensweise des Algorithmus an einem Beispiel erläutert.
Beispiel: „Konstruktion eines minimal spannenden Baumes“
nach dem Prinzip des oben vorgestellten Algorithmus. Dazu wird wieder der
bereits aus dem vorigen Beispiel bekannte Graph verwendet.
Kapitel 08- Seite 48
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
1
2
1
2
1
3
4
3
5
4
5
Schritt 1: E T = {}
Start des Algorithmus
1
Schritt 2: ET = {{1,3}}
minim. Gewicht: 1
2
1
2
1
1
3
4
3
3
4
2
2
5
5
Schritt 3: ET = {{1,3},{2,5}}
minim. Gewicht: 2
1
Schritt 4: ET = {{1,3},{2,5},{3,4}}}
minim. Gewicht: 3
4
2
1
3
3
4
2
5
Schritt 5: ET = {{1,3},{2,5},{3,4},{1,2}}
minim. Gewicht: 4
8.8 Flüsse in Netzwerken
Zum Abschluss der Ausführungen über graphentheoretische Algorithmen wird
noch auf Flüsse in Netzwerken eingegangen, wozu zunächst diese beiden
wichtigen Begriffe eingeführt und definiert werden.
Kapitel 08- Seite 49
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Definition:
Ein Netzwerk N = (V , E , q, s, c) = (G, q, s, c) ist ein gerichteter Graph G = (V , E )
mit zwei ausgezeichneten Knoten q, s ∈ V und einer Kapazitätsfunktion
c : E → IR + ∪ {0} auf der Kantenmenge. Dabei soll der Knoten q den Ein-
gangsgrad d in (q) = 0 und der Knoten s den Ausgangsgrad d out ( s) = 0 haben.
Wegen dieser Voraussetzungen wird q als „Quelle“ und s als „Senke“ bezeichnet. Außerdem sei s von q erreichbar.
Definition:
Ein Fluss ist eine Abbildung f : E → IR + ∪ {0} auf der Kantenmenge eines
Netzwerkes mit folgenden Eigenschaften:
• Kapazitätsbeschränkung:
0 ≤ f (e) ≤ c(e) für alle Kanten e ∈ E ,
d.h. der Fluss einer jeden Kante ist durch die Kapazität dieser Kante
begrenzt.
• Flusserhaltung:
∑
f (( x, v)) =
( x ,v )∈E
∑ f ((v, y)) für alle Knoten v ∈ V \ {q, s} ,
( v , y )∈E
d.h. die Gesamtsumme des in einen Knoten v einströmenden Flusses
ist gleich der Gesamtsumme des ausströmenden Flusses aus diesem
Knoten v .
Zusätzlich werden noch zwei weitere Größen eines Flusses definiert. Unter
dem Wert w( f ) =
∑ f ((q, x))
eines Flusses f versteht man also die Gesamt-
(q, x)
summe des aus der Quelle ausströmenden Flusses. Dementsprechend fasst
man als maximalen Fluss f einen Fluss mit dem maximalen Wert w( f ) unter allen möglichen Flüssen auf.
Kapitel 08- Seite 50
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Als nächstes wird ein Standardbeispiel vorgestellt, dass im weiteren Verlauf dieses
Kapitels immer wieder erwähnt wird, um an bestimmten Stellen einen theoretischen
Sachverhalt zu verdeutlichen.
Beispiel: „Fluss in einem Netzwerk“
Für jede gerichtete Kante sind in der Abbildung jeweils der aktuelle Fluss und
die Kapazität angegeben.
Fluß: 0
Kap.: 4
1
2
Fluß: 3
Kap.: 5
Fluß: 0
Kap.: 5
Fluß: 3
Kap.: 7
q
Quelle
Fluß: 0
Kap.: 7
3
Fluß: 0
Kap.: 4
Fluß: 0
Kap.: 3
Fluß: 3
Kap.: 3
s
Senke
Fluß: 3
Kap.: 6
4
Wie man leicht sieht, fließt gerade ein Fluss mit dem Wert 3 durch das Netzwerk. Dabei bewegt er sich von der Quelle q über die Knoten 1,3 und 4 bis
hin zur Senke s .
In diesem Beispiel ist bisher nur der aktuelle Fluss mit dem Wert 3 bekannt.
Über den in der obigen Definition erwähnten maximalen Fluss mit dem maximalen Wert w( f ) ist noch nichts gesagt worden. Bevor nun ein Algorithmus
zur Bestimmung eines maximalen Flusses in einem Netzwerk formuliert werden kann, benötigt man allerdings noch einige Vorbereitungen.
Zunächst ist klar, dass nicht mehr in einem Netzwerk fließen kann, als aus der
Quelle herausströmt oder in die Senke hineinströmt. Im obigen Standardbeispiel verlassen maximal 7 + 5 = 12 Einheiten die Quelle q , während maximal
5 + 6 = 11 Einheiten in die Senke fließen können. Diese beiden Werte der
Kapitel 08- Seite 51
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Quelle und der Senke sind jedoch nicht die einzigen Faktoren, die den Wert
eines maximalen Flusses begrenzen. Eine weitere Einflussgröße nennt die folgende Definition.
Definition:
Sei N = (V , E , q, s, c) = (G, q, s, c) ein Netzwerk. Dann versteht man unter dem
Schnitt eines Netzwerkes N eine disjunkte Zerlegung V = Q ∪ S der Knotenmenge in zwei Teilmengen, die durch q ∈ Q und s ∈ S charakterisiert werden. Die Kapazität c(Q, S ) des Schnittes ist schließlich die Summe der einzelnen Kapazitäten der Kanten von Q nach S :
c(Q, S ) :=
∑ c((v, w))
( v , w )∈E , v∈Q , w∈S
Entsprechend ist der Fluss f (Q, S ) eines Schnittes definiert durch:
f (Q, S ) =
∑ f ((v, w)) −
( v , w )∈E ,v∈Q , w∈S
∑ f ((w, v))
( w,v )∈E , v∈Q , w∈S
Ein Schnitt eines Netzwerkes mit dem kleinsten Fluss unter allen möglichen
Schnitten heißt minimaler Schnitt.
Um die beiden Größen Kapazität und Fluss eines Schnittes am Standardbeispiel zu verdeutlichen, werden sie für den Fall eines Schnittes mit Q = {q,1,3}
und S = {2,4, s} berechnet. Bei dieser Zerlegung der Knotenmenge ergibt sich
für die Kapazität c(Q, S ) = 10 und für den Fluss f (Q, S ) = 3 .
Zwischen den Begriffen „Fluss eines Schnittes“ und dem „maximalen Fluss“
gibt es einen einfachen Zusammenhang. Dieser basiert auf der zu Anfang eingeführten Flusserhaltung in einem Netzwerk und der disjunkten Vereinigung
V = Q ∪ S . Wenn man mit f einen Fluss und mit (Q, S ) einen Schnitt be-
zeichnet, so kann man folgende Gleichungskette herleiten:
Kapitel 08- Seite 52
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
f (Q, S )
=
∑ f ((v, w)) −
( v , w )∈E ,v∈Q , w∈S
=
∑ f ((v, w)) −
( v , w )∈E ,v∈Q , w∈S
∑ f ((w, v))
( w,v )∈E , v∈Q , w∈S
∑ f ((w, v)) +
( w,v )∈E , v∈Q , w∈S
∑ f ((w, v)) −
=
( w,v )∈E ,v , w∈Q
=
∑ f ((v, w)) −
( v , w )∈E ,v∈Q , w∈V
=
∑ f ((v, w)) −
( v , w )∈E ,v∈Q , w∈V
=
∑ f ((v, w))
( v , w )∈E ,v , w∈Q
∑ f ((w, v))
( w, v )∈E ,v , w∈Q
∑ f ((w, v)) +
( w,v )∈E ,v∈Q , w∈V
∑ f ((v, w)) −
( v , w )∈E ,v , w∈Q
∑ f ((w, v))
( v , w )∈E ,v , w∈Q
∑ f ((w, v))
( w,v )∈E ,v∈Q , w∈V
∑ f ((q, v)) = ∑ f ((q, v))
( q ,v )∈E ,v∈V
=
∑ f ((v, w)) −
( v , w )∈E ,v , w∈Q
( q ,v )∈E
w( f )
Offensichtlich gilt also die Beziehung f (Q, S ) = w( f ) . Aus der Kapazitätsbeschränkung kann man dann sofort schließen, dass der Fluss f (Q, S ) über einen beliebigen Schnitt (Q, S ) dessen Kapazität c(Q, S ) nicht übersteigen
kann. Dies gilt insbesondere einerseits für den maximalen Wert aller möglichen Flüssen und andererseits für den minimalen Wert aller möglichen Kapazitäten. Damit erhält man unmittelbar die vereinfachte Abschätzung
max flow ≤ min cut
bzw.
w( f ) = max f (Q, S ) ≤
alle Flüsse f
min
alle Schnitte ( Q , S )
c(Q, S )
Damit ist der Wert w( f ) des maximalen Flusses f sicher nicht größer als die
Kapazität eines minimalen Schnittes.
Kapitel 08- Seite 53
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Bei der Berechnung des Flusses und der Kapazität eines Schnittes am Standardbeispiel ergaben sich die Werte f (Q, S ) = 3 und c(Q, S ) = 10 . Damit erfüllen diese Werte offensichtlich die obige Abschätzung. Nichtsdestotrotz hat der
Fluss aber offensichtlich noch nicht seinen maximalen Wert angenommen, da
es noch Kanten im Netzwerk gibt, bei denen die Kapazität nicht voll ausgenutzt wird. Um diese Idee weiter entwickeln zu können, schließt sich nun die
nächste Definition an.
Definition:
Sei N = (V , E , q, s, c) = (G, q, s, c) ein Netzwerk.
1. Eine Verbindung vom Knoten x zum Knoten y im Netzwerk N ist eine
Folge W = (v0 ,..., vl ) = ( x, v1 ,..., vl −1 , y ) paarweise verschiedener Knoten vi
mit i = 0,..., l . Dabei gilt (vi −1 , vi ) ∈ E oder (vi , vi −1 ) ∈ E für alle i = 1,..., l .
Im ersten Fall heißt die Kante (vi −1 , vi ) ∈ E eine Vorwärtskante der Verbindung, im zweiten Fall heißt die Kante (vi , vi −1 ) ∈ E eine Rückwärtskante
der Verbindung.
2. Eine Verbindung W heißt bezüglich eines Flusses f ausbaufähig, falls
gilt:
•
f (e) < c(e) für jede Vorwärtskante e ∈ W
•
f (e) > 0 für jede Rückwärtskante e ∈ W
Im Standardbeispiel sollen die beiden Verbindungen W = (4,3,1) und
W = (3,1, q) auf Ausbaufähigkeit untersucht werden.
1.
f (3,4) = 3 = c(3,4)
⇒ keine Ungleichung ⇒ nicht ausbaufähig
2.
f (1,3) = 3 < 7 = c(1,3) und f (q,1) = 3 < 5 = c(q,1)
⇒ beides Ungleichungen ⇒ ausbaufähig
Kapitel 08- Seite 54
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Mit Hilfe dieser Definition lässt sich nun endlich der folgende Satz zur Berechnung eines maximalen Flusses formulieren.
Satz:
Der Wert eines Flusses f ist genau dann maximal, wenn es keine bezüglich
dem Fluss f ausbaufähige Verbindung von der Quelle q zur Senke s gibt. In
diesem Fall ist der maximale Fluss w( f ) gerade gleich dem der Kapazität eines minimalen Schnitte.
Beweis:
„ ⇒ “:
Der Beweis wird mit Hilfe der Negation geführt. Dazu wird angenommen,
dass es eine ausbaufähige Verbindung für einen Fluss f gibt. In diesem Fall
könnte man den Fluss entlang dieser Verbindung vergrößern, was wiederum
gegen die Existenz eines maximalen Flusses spricht. Daher kann umgekehrt
keine ausbaufähige Verbindung bestehen, wenn ein maximaler Fluss vorliegt.
„⇐“
Für diese Beweisrichtung wird angenommen, dass es keine ausbaufähige Verbindung für einen Fluss f gibt. Dann wählt man als Teilmengen der Knotenmenge:
Q = {q} ∪ {v ∈ V | es gibt eine ausbaufähige Verbindung von q nach v}
S = V \Q
Dadurch bildet (Q, S ) einen Schnitt des Netzwerkes N . Wenn nun (v, w) eine
Kante von Q nach S wäre, so würde f ((v, w)) = c((v, w)) gelten, denn andernfalls wäre w ∈ Q . Analog erhält man für eine Kante (v, w) von S nach Q , dass
gerade f ((v, w)) = 0 gilt. Somit ist w( f ) = c(Q, S ) . Andererseits gilt für jeden
Fluss f ' der Wert w( f ' ) ≤ c(Q, S ) = w( f ) . weshalb der Fluss f ein maximaler
Fluss ist.
Kapitel 08- Seite 55
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Basierend auf der Idee dieses Satzes kann man auf einfache Weise die Grobstruktur eines Algorithmus zur Berechnung eines maximalen Flusses in
einem Netzwerk formulieren. Diese Grobstruktur sieht dabei folgendermaßen
aus.
Algorithmus: „maximaler Fluss in einem Netzwerk“ (Grobstruktur)
PROCEDURE maximaler_Fluss
starte mit dem Fluss f = 0
WHILE es existiert bezüglich f eine ausbaufähige Verbindung W von
q nach s erhöhe entlang der Verbindung W den Fluss f
Falls dieser kurz skizzierte Algorithmus erfolgreich endet, so liefert er einen
maximalen Fluss.
Kapitel 08- Seite 56
Univ.-Prof. Dr. M.-R. Wolff
Steuerungsverfahren
BWL / Wirtschaftsinformatik
Algorithmen für Graphen
Herunterladen