1 1. Graphen 1. Graphen 1.1 Einige Beispiele Beispiel 1: Bahnverbindungen zwischen mehreren Orten Az zB Cz zD Fz zE zG Beispiel 2: Planung eines Hausbaus E8 ● E4 ● E1 ● E2 ● E3 ● E5 E7 ● E6 ● ES Vorgang Ausbau des Kellers Errichtung des Mauerwerks Errichtung des Dachstuhls Decken des Daches Durchführung der Installationen Anbringen des Außenputzes Anbringen des Innenputzes Anbringen des Innenanstrichs Verlegung der Böden Fertigstellung des Schutzraumes Endkommissionierung E11 ● E10 ● Bezeichnung des Vorganges E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E9 ● ES ... „Scheinvorgang“ Dauer (in Tagen) 21 18 4 3 9 5 7 4 6 2 1 Vorgänge, die zuvor abgeschlossen sein müssen --E1 E2 E3 E2 E4, E5 E4, E5 E7 E8 E5 E6, E9, E10 2 1. Graphen 1.2 Grundbegriffe der Graphentheorie Ein Graph besteht aus einer Menge V von „Knoten“ (engl. vertices) und einer Menge E von „Kanten“ (engl. edges), welche je zwei Knoten verbinden. Die Kanten können gerichtet sein wie in Beispiel 2 oder ungerichtet wie in Beispiel 1. Dementsprechend spricht man von gerichteten Graphen (oder Digraph, engl.: directed graph) bzw. ungerichteten Graphen. Ist V = {v1, v2, ... , vn} die Menge der Knoten des Graphen, so lässt sich eine gerichtete Kante von vi nach vk durch ein geordnetes Zahlenpaar (vi, vk) beschreiben, eine ungerichtete Kante kann durch eine zweielementige Menge {vi, vk}angegeben werden. Etwas formaler: Ein gerichteter Graph G ist ein Paar (V, E), wobei V eine beliebige Menge und E ⊆ VxV ist. Für eine gerichtete Kante ( x , y) ∈ E wird x der Anfangsknoten und y der Endknoten genannt und die beiden Knoten heißen adjazent (oder benachbart). Statt „gerichtete Kante“ sagt man auch „Bogen“. Ist V = {v1 , v 2 ,..., v n } endlich, was bei den von uns betrachteten Anwendungen stets der Fall sein wird, so kann die Relation E auch durch eine Matrix A= (a ij ) , die sog. Adjazenzmatrix des Graphen, beschrieben werden, für die gilt ⎧ 1, falls (v i , v j ) ∈ E a ij := ⎨ sonst ⎩ 0 Hat der Graph nur wenige Kanten, so eignet sich die Darstellung des Graphen mit Hilfe von sog. Adjazenzlisten (A v ) v∈V allerdings besser, wobei hier A v für jedes v ∈ V die Menge bezeichnet, welche genau die Knoten w enthält, für die (v,w) ∈ E ist. (In der Computerpraxis sind die A v sog. verkettete Listen.) Endliche Digraphen lassen sich auch graphisch sehr schön durch sog. (Pfeil-) Diagramme veranschaulichen, indem man die Elemente v1 , v 2 ,..., v n durch Punkte der Ebene symbolisiert und genau dann einen Pfeil von v i nach v j zeichnet, wenn ( v i , v j ) ∈ E gilt. Beispiel 3: Gegeben sei der gerichtete Graph G= (V, E) mit V = {v1 , v 2 , v 3 , v 4 , v 5 , v 6 } und E = {( v1 , v 2 ), ( v 2 , v1 ), ( v 3 , v 4 ), ( v 3 , v 5 ), ( v 4 , v 5 ), ( v 5 , v 6 ), ( v 6 , v 3 ), ( v 6 , v 4 )} G = ( V, E ) kann dann etwa durch folgendes Diagramm veranschaulicht werden: v2 v5 v4 v3 v1 v6 3 1. Graphen Die zugehörige Adjazenzmatrix ⎛0 ⎜ ⎜1 ⎜0 A= ⎜ ⎜0 ⎜0 ⎜ ⎜0 ⎝ 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 bzw. die Adjazenzlisten: A 1 = {v 2 } A 2 = {v1 } A 3 = {v 4 , v 5 } A 4 = {v 5 } A 5 = {v 6 } A 6 = {v 3 , v 4 } 0⎞ ⎟ 0⎟ 0⎟ ⎟ 0⎟ 1 ⎟⎟ 0 ⎟⎠ Die Anzahl der Pfeile, welche für einen gegebenen Knoten v ∈ V „wegführen”, wird der Weggrad von v genannt, i.Z. d + ( v). Analog heißt die Anzahl der Pfeile, welche zu v „hinführen”, der Hingrad von v, i.Z. d − ( v). (In obigem Beispiel wäre etwa d + ( v 4 ) = 1 und d − ( v 4 ) = 2. ) Offensichtlich ist d + ( v) bzw. d − ( v) gerade die Anzahl der Einsen in der Zeile bzw. Spalte von v in der Adjazenzmatrix A. Indem man nun die Anzahl der Einsen in der Adjazenzmatrix A insgesamt, welche ja gerade die Kantenzahl E ist, einmal zeilenweise und einmal spaltenweise zählt, erhält man sofort Satz: In jedem gerichteten Graphen G=(V,E) ist ∑d v∈V + ( v) = ∑ d − ( v) = E , v∈V d.h. die Summe aller Weg- bzw. Hingrade für den Graphen G ist gleich der Anzahl seiner Kanten. Gelegentlich ist für einen (gerichteten oder ungerichteten) Graphen auch noch eine Funktion w definiert, welche jedem Bogen bzw. jeder Kante eine reelle Zahl zuordnet, wobei diese von der Problemstellung her meist nichtnegativ ist. (Z.B. könnte diese Bewertung für einen Graphen, welcher ein Straßennetz repräsentiert, die Längen bzw. die Transportkosten für die Straßenstücke sein, welche die Knoten verbinden.) Man spricht in diesem Fall von bewerteten Graphen. Analog wie für gerichtete Graphen definiert man den Grad d(v) eines Knotens v ∈ V in einem ungerichteten Graphen G=(V,E) als die Anzahl der Kanten mit v als einen Endknoten. Der zum obigen Satz entsprechende Satz lautet dann Satz („Handschlaglemma”): In jedem ungerichteten Graphen G=(V,E) gilt ∑ d ( v) = 2 E , v∈V d.h. die Summe aller Grade des Graphen ist gleich der doppelten Anzahl seiner Kanten. In einem Digraph (V,E) heißt nun jede Folge v 0 v1 ...v k mit v 0 , v1 ,..., v k ∈ V und ( v 0 , v1 ), ( v1 , v 2 ),..., ( v k −1 , v k ) ∈ E eine (gerichtete) Kantenfolge. v 0 und v k heißen dann (durch die Kantenfolge) verbunden. Die Zahl k wird dabei die Länge der Kantenfolge genannt. Ist dabei v 0 = v k so spricht man von einer geschlossenen Kantenfolge, sonst von einer offenen. Eine geschlossene Kantenfolge, die jede Kante des Graphen genau einmal enthält, wird (wie dann auch der sie enthaltende Graph selbst) Eulersch genannt. 4 1. Graphen Falls alle Knoten der Kantenfolge paarweise verschieden sind, spricht man von einer Bahn oder einem (gerichteten) Weg, falls dies mit genau der Ausnahme v 0 = v k zutrifft von einem Zyklus oder einem (gerichteten) Kreis. Ein Kreis, der alle Knoten des Graphen genau einmal enthält, wird (wie dann auch der diesen Kreis enthaltende Graph selbst) Hamiltonsch genannt. Existieren in dem gerichteten Graphen keine Zyklen positiver Länge, so heißt er azyklisch. Alle zuvor eingeführten Begriffe lassen sich auch wieder auf ungerichtete Graphen spezialisieren, wodurch man insbesondere die zu den Begriffen Bahn und Zyklus analogen Begriffe Weg bzw. Kreis erhält. Statt azyklisch sagt man auch kreisfrei. Ein ungerichteter kreisfreier Graph wird auch Wald genannt. In ungerichteten Graphen (V,E) kann für alle a,b ∈ V a ~ b :⇔ a und b sind durch einen Weg verbunden eine Äquivalenzrelation definiert werden. (Vgl. 1.3) Die Klassen der zugehörigen Partition heißen die Zusammenhangskomponenten des Graphen. Besitzt der Graph nur eine Zusammmenhangskomponente (d.h. sind je zwei seiner Knoten verbunden), so heißt er zusammenhängend. Diesen Zusammenhangsbegriff kann man in ganz analoger Weise auch gerichteten Graphen einführen, indem man verlangt, dass a und b auf einem gerichteten Kreis liegen, was dann auf sog. stark zusammenhängende gerichtete Graphen führt. Für sie ist aber auch noch die Abschwächung sehr wichtig, bei der man nur verlangt, dass der zugrundeliegende ungerichtete Graph (sein sog. Schatten, der aus dem gerichteten Graphen im wesentlichen durch Weglassung der Kantenorientierung hervorgeht, wobei dadurch entstehende Mehrfachkanten bis auf genau eine gestrichen werden) zusammenhängend ist. In diesem Fall spricht man von schwach zusammenhängenden Digraphen. Ein ungerichteter Graph, welcher zusammenhängend und kreisfrei ist, wird Baum genannt. Insbesondere sind also die Zusammenhangskomponenten eines Waldes stets Bäume. Beispiel: Der durch das nachfolgende Diagramm gegebene ungerichtete Graph ist ein Wald mit zwei Bäumen: Bäume sind besonders strukturierte Graphen, welche in vielen Anwendungen eine wichtige Rolle spielen. Sie lassen sich auf verschieden Weisen einfach charakterisieren, wie der folgende Satz zeigt: Satz: Für einen (ungerichteten) Graphen G=(V,E) mit n Knoten sind folgende Aussagen äquivalent: (1) G ist ein Baum. 5 1. Graphen (2) Je zwei Knoten von G sind durch genau einen Weg verbunden. (3) G ist zusammenhängend, aber der Graph Ge, der aus G durch Wegnahme einer beliebigen Kante e ∈ E entsteht, ist nicht mehr zusammenhängend. (4) G ist zusammenhängend und hat genau n-1 Kanten. (5) G ist kreisfrei und hat genau n-1 Kanten. (6) G ist kreisfrei, aber der Graph G v , w , welcher aus G entsteht, indem man zwei ursprünglich nicht benachbarte Knoten v, w ∈ V durch eine Kante verbindet, enthält genau einen nichttrivialen Kreis. Ist G=(V,E) ein ungerichteter Graph, so heißt G ′ = (V ′, E ′ ) ein Teilgraph von G, wenn gilt V ′ ⊆ V und E ′ ⊆ E . Gilt dabei insbesondere V′ = V , so heißt G ′ ein spannender Teilgraph von G. Ist ferner G zusammenhängend und G′ ein spannender Teilgraph, welcher ein Baum ist, so heißt G ′ auch ein Gerüst von G. 1.3 Relationen und Graphen In (Zahlen-)Mengen können oft gewisse „relationale” Zusammenhänge zwischen den Elementen existieren, wie z.B. a ≤ b oder auch a b („a teilt b”) für a,b ∈ Z. Allgemein: Definition: Unter einer Relation R auf einer Menge M versteht man eine beliebge Teilmenge von M × M:= {( x, y ) x ∈ M , y ∈ M } : R = Relation auf M ⇔ R⊆M×M Gilt dabei (x,y) ∈ R , wofür man oft auch kurz x R y schreibt, so sagt man, „x stehe in Relation mit y (bez. R)”. Einige besonders wichtige Eigenschaften von Relationen sind: • Reflexivität: x R x für alle x ∈ M • Irreflexivität: x R y ⇒ x ≠ y für alle x , y ∈ M • Symmetrie: x R y ⇒ y R x für alle x , y ∈ M . • Antisymmetrie: x R y ∧ y R x ⇒ x = y für alle x , y ∈ M . • Transitivität: x R y ∧ y R z ⇒ x R z für alle x , y, z ∈ M . Definition: Eine Relation R auf M heißt eine Äquivalenzrelation auf M, wenn sie reflexiv, symmetrisch und transitiv ist. Definition: Eine Relation R auf M heißt eine Ordungsrelation auf M, wenn sie reflexiv, antisymmetrisch und transitiv ist. In diesem Fall nimmt man für R oft das Symbol ≤ und (M, ≤ ) wird dann auch eine geordnete Menge genannt. Ist R speziell eine Äquivalenzrelation, so kann man für jedes a ∈ M die Teilmenge [a ]R := {x ∈ M x R a} 6 1. Graphen betrachten, welche auch Äquivalenzklasse von a genannt wird. Ist R vom Kontext her klar vorgegeben, so wird der Index R auch oft weggelassen, d.h. man schreibt nur [a] oder manchmal auch a für die Äquivalenzklasse von a. Ist R eine Äquivalenzrelation auf M, so bildet die Menge M / R := {[a ]R a ∈ M } aller Äquivalenzklassen eine sog. Partition oder Klasseneinteilung von M, d.h. es gelten folgende 3 Eigenschaften: 1. [a ]R ≠ ∅ für alle a ∈ M (es ist ja stets a ∈ [a ]R !) 2. [a ]R ∩ [b]R ≠ ∅ ⇒ [a ]R = [b]R für alle a,b ∈ M . 3. U [a ] R = M. a∈M Wegen 2. liegt also dann jedes a ∈ M in höchstens einer Äquivalenzklasse und wegen 3. in mindestens einer Äquivalenzklasse, insgesamt gesehen daher in genau einer Äquivalenzklasse bez. R. Umgekehrt kann man jeder Partition von M, d.h. jeder Menge P= {M i i ∈ I } von nichtleeren Teilmengen von M, welche paarweise elementfremd sind und deren Vereinigung M ist, eine Äquivalenzrelation R P auf M zuordnen, welche definiert ist durch x R P y :⇔ ∃i ∈ I : x, y ∈ M i und diese Zuordnung P a R P ist eine Bijektion zwischen den Partitionen und den Äquivalenzrelationen auf M. Beispiele: 1. Auf jeder Menge M gibt es die beiden sog. trivialen Äquivalenzrelationen, nämlich die identische Relation ι M := {(a, a) a ∈ M } , wobei man statt a ι M b meist a=b schreibt, und die Allrelation α M = M x M, bei der also a α M b ∀a , b ∈ M gilt. Wenn M vom Zusammenhang her klar ist, schreibt man für sie auch kürzer ι bzw. α . Die zugeordneten Partitionen sind dabei Pι = {{a} a ∈ M} bzw. Pα = {M} . 2. Für jede Teilmenge A der Menge R der reellen Zahlen ist ferner ≤ (hier in seiner ursprünglichen Bedeutung!) eine Ordnungsrelation, welche mit der gew. Addition + verträglich ist. Ist A ⊆ R 0+ , d.h. enthält es keine negativen Zahlen, so gilt auch die Verträglichkeit mit der gew. Multiplikation. Diese Ordnungsrelation hat überdies die spezielle Eigenschaft, dass für beliebige a , b ∈ A stets a ≤ b oder b ≤ a zutrifft. Eine Ordnungsrelation mit dieser Eigenschaft nennt man auch total oder linear. 3. Ist M eine beliebige Menge und P(M) die Menge aller Teilmengen von M, welche auch Potenzmenge von M genannt wird, so ist auf P(M) durch A ⊆ B eine Ordnungsrelation ⊆ gegeben, die sog. mengentheoretische Inklusion. 4. Ein gerichteter Graph G ist ein Paar (V,E), wobei V eine beliebige Menge und E eine Relation auf V ist. 7 1. Graphen 5. Ein gewöhnlicher oder ungerichteter Graph ist ein Digraph (V,E) eine besonders wichtige Teilklasse, für welchen die Relation E irreflexiv und symmetrisch ist. (Manche Autoren fordern auch bereits für einen gerichteten Graphen die Irreflexivität von E, d.h. sie schließen Schlingen aus.) 1.4 Einige Algorithmen der Graphentheorie 1) Algorithmus für Minimalgerüst In vielen Anwendungen ist nun z.B. für einen zusammenhängenden ungerichteten Graphen mit einer Bewertung ein Minimalgerüst gesucht, d.h. ein Gerüst, für welches die Summe aller Bewertungen seiner Kanten minimal ist. (In obigem Beispiel eines Straßennetzes sollten z.B. nach der „Stilllegung” von möglichst vielen Straßen doch alle Knoten verbunden bleiben und die Summe der Distanzen insgesamt ein Minimum sein.) Der nachfolgende Algorithmus von Kruskal ist vom Typ her ein sog. Greedy-Algorithmus. Damit ist gemeint, dass in den einzelnen Schritten des Algorithmus immer gerade das gemacht wird, was im Moment das Beste zu sein scheint („den besten Happen zuerst”), um zu einer insgesamt optimalen Lösung zu gelangen. Algorithmus von Kruskal: Sei G=(V,E) ein zusammenhängender Graph mit einer Bewertung w. Auf nachfolgende Weise erhält man dann für ihn ein Minimalgerüst: 1. Sortiere zunächst die Kantenmenge E = {e1 , e 2 ,..., e m } so um, dass danach gilt w (e1 ) ≤ w (e 2 ) ≤ ... ≤ w (e m ) und setze zu Beginn B ← ∅ , M ← {{v} v ∈ V } , k ← 1. Die Elemente von M werden dabei im folgenden als „Komponenten” angesprochen. (Tatsächlich repräsentieren sie die jeweiligen Zusammenhangskomponenten beim sukzessiven Aufbau des Minimalgerüsts B.) 2. Füge die Kante e k zu B dazu , d.h. B:= B ∪ {e k } , falls die Endknoten von e k in verschiedenen Komponenten K 1 , K 2 von M liegen und führe in diesem Fall die Ersetzung M ← ( M \ { K 1 , K 2 }) ∪ {K 1 ∪ K 2 } durch, d.h. die beiden Komponenten K1 und K 2 werden zu einer „verschmolzen”. 3. Ist M = 1 , so stoppe das Verfahren mit der Ausgabe des Minimalgerüsts B. Ansonsten setze k ← k+1 und fahre bei 2. fort.