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