Graphentheorie

Werbung
Graphentheorie
Graph
• Paar (V,E)
• V: nichtleere Menge von Knoten (vertex)
• E: Menge von Kanten (edges): Relation (Verbindung) zwischen den Knoten
gerichteter Graph (DiGraph (directed graph)
•
ungerichteter Graph:
•
•
E: Teilmenge E ⊆ V × V
e = (a,b) ist eine Kante für a,b ∈ V
E ist damit eine Relation
•
man nennt diese Relation E Adjazenz: x,y ∈ V heißen benachbart, wenn sie in Relation E stehen
E : Menge von zweielementigen Teilmengen von V
e = {a,b} ist eine Kante für a,b ∈ V
E ist symmetrische, irreflexive Relation (keine
Schlingen)
•
Darstellungsmöglichkeiten (wie bei allen endlichen Relationen):
- 0/1-Matrix: Adjazenzmatrix
-
V
V
0/1
E
V
0/1
1: (x,y) ∈ E
0: (x,y) ∉ E
0/1-Matrix: Inzidenzmatrix
1: Knoten x ist an Kante e beteiligt
0: Knoten x ist nicht an Kante e beteiligt
geht so nur bei ungerichteten Graphen,
sonst müsste man noch –1 einführen:
-1 : Startknoten
1: Endknoten
-
Bewertungsmatrix
V
V
x ∈ 0..∞
x : 0 oder ∞ (je nach Anwendung):
(v1,v2) ist keine Kante
sonst stellt x die Bewertung der Kante dar
x = ϕ ( (v1, v2) )
nicht zugelassen: mehrere gleiche Kanten (Multigraphen)
endlicher Graph:
• wenn V endlich ist ( ⇒ E ist ebenfalls endlich, denn E kann ja maximal V × V sein), also
|E| ≤ |V| ⋅ |V|
bewerteter Graph:
• Tripel (V,E, ϕ )
• Graph G = (V,E)
• Abbildung ϕ : E 3≥0 ∪ {∞}
Kostenfunktione, die jeder Kante einen Wert / ihre Kosten zuordnet
Spezielle ungerichtete Graphen:
•
•
vollständiger Graph Kn mit n Knoten: jeder Knoten ist mit jedem anderen verbunden
vollständiger bipartiter Graph Km, n: mit zwei Klassen von Knoten (Knotenmenge ist in 2 Klassen geteilt)
die eine Klasse hat m Knoten, die andere n Knoten
innerhalb der Klassen dürfen keine Kanten auftreten (immer nur 2 Elemente von verschiedenen Klassen
dürfen verbunden werden)
jeder Knoten der einen Klasse ist mit jedem Knoten der anderen Klasse verbunden
Anwendung bipartiter Graphen: Petri-Netze: Stellen (Bedingungen) und Transitionen (Ereignisse)
Da ein Graph eine Menge V mit einer Relation E ist eine einfache algebraische Struktur:
man kann algebraisches Routineprogramm darauf anwenden:
Unterstrukturen
Untergraph:
• Sei G =(V,E) ein Graph
⇒ G‘ = (V‘, E‘) heißt Untergraph von G, wenn gilt
V‘ ⊆ V ∧ E‘ ⊆ E
• G‘ heißt induzierter Untergraph von G, wenn
E‘ nur die Kanten von G hat, die beide Knoten in E‘ haben
⇒ ist in G durch V‘ eindeutig bestimmt (also durch V‘ induziert)
Also: nimm eine Teilmenge V‘ von V und alle Kanten mit rein, die in dieser Teilknotenmenge in G schon
da waren
Isomorphie
•
•
2 Graphen G = (V,E) und G‘=(V‘, E‘) heißen isomorph
⇔
∃ bijektive Abbildung f: V V‘,
derart, daß Nachbarschaftsverhätlnisse, die in V bestehen in V‘ erhalten
bleiben
also
∀ x, y ∈ V gilt: (x,y) ∈ E ⇔ ( f(x), f(y) ) ∈ E‘
Isomorphie überträgt alle Eigenschaften von Graphen:
- Knotenanzahl |V|
- Kantenanzahl |E|
- lokale Kantenanzahl:
outdegree (= Anzahl ausgehender Kanten aus einem Knoten)
indegree (= Anzahl eingehender Kanten in einen Knoten)
⇒ nennt man auch
Valenz / Grad eines Knotens:
p(x)
:=
Anzahl der Ein- und Ausgehenden Knoten von/zu x
p(x) = 0
⇒
isolierter Knoten (keine Kante führt hin oder weg)
p(x) = k ∀ x ∈ V:
Graph ist univalent/regulär (k-valent/k-regulär)
(alle Knoten haben gleiche Grad)
p-(x) : indeg
indeg/outdeg macht nur bei gerichteten Graphen Sinn
p+(x) : outdeg
p(x) = p-(x) + p+(x)
⇒
|E| =
∑x∈V p+(x)
=
∑x∈V p-(x)
=
(weil jede Kante einen Start- und einen Endknoten hat)
½⋅ ∑x∈V p(x)
Wegbegriffe:
(sinnvoll aus Sicht der Anwendungen von Graphen)
Kantenfolge von Knoten x0 bis zum Knoten xn
• Sequenz von Kanten aus E: e1=(x0, x1), e2=(x1,x2), ..., en= (xn-1, xn)
• d.h. für zwei in der Sequenz aufeinanderfolgende Kanten: Zielknoten der ersten = Startknoten der zweiten
Kante
Linie:
• Kantenfolge aus lauter verschiedenen Kanten
(ein Knoten darf ruhig öfter benutzt werden)
• wenn x0 = xn ⇒ geschlossene Linie / Zyklus
Weg:
• Kantenfolge bei der alle Knoten paarweise verschieden
(außer evtl. x0 = xn, dann ⇒ geschlossener Weg / Kreis)
bei Digraphen:
gerichteter Weg:
• positive gerichtet: in Durchlaufrichtung
• negativ gerichtet: entgegen der Druchlaufrichtung
Wegprobleme
Wegproblem I: Existenz eines Weges zwischen 2 Knoten
• gegeben: 2 Knoten eines Graphen
• Frage: existiert ein Weg zwischen Ihnen
a Z b :⇔ ∃ Weg von a nach b
ist Äquivalenzrelation auf V
- refelxiv:
es existiert immer ein Weg von a nach a : a Z a
- symmetrisch:
a Z b ⇒ b Z a gilt in ungerichteten Graphen, in gerichteten auch unter Mißachtung
der Kantenrichtung
- transitiv:
klar
eine Ä-Relation induziert immer Ä-Klassen: hier: Zusammenhangskomponenten
also:
Zusammenhangskomponente:
• eine Zusammenhangskomponente ist der durch eine Ä-Klasse nach der oben definierten Ä-Relation
aufgespannte Teilgraph von G
• ist ganzer Graph G eine Zusammenhangskomponente ⇒ G ist zusammenhängend
d.h. ∃ ein Weg zwischen je 2 Knoten in G
bei gerichtetem DiGraph: starke Zusammenhangskomponenten
• zu jedem Knotenpaar (a,b) gibt es einen positiv GERICHTETEN Weg von a nach b
(und dann natürlich auch von b nach a, da es ja für jedes Knotenpaar gelten soll)
• d.h. es gibt immer Hin- und Rückweg
Wegproblem II: Eulerscher Zyklus (Königsberger Brückenproblem)
• Finde einen Zyklus, der jede Kante genau 1x enthält
• Eulerzyklus = Linie in einem Graphen, die jede Kante von G genau 1x enthält
• Lösung:
- G enthält einen eulerschen Zyklus ⇔ G ist zusammenhängend und enthält keine Knoten ungeraden
Grades
- d.h. wenn p(x) = 2⋅ k für k ∈ ∠
Beweis:
„⇒“ G enthält Eulerzyklus !⇒ G ist a) zusammenhängend b) besitzt keinen Knoten ungeraden Grades
a) Zusammenhang von G sofort klar
b) Berechnung des Grades eines Knotens durch sukzessive Hinzunahme von Kanten beim Durchlauf des
Eulerzyklus (der enthält ja alle Kanten):
Jeder Durchlauf durch Knoten x bei Durchlauf des Eulerschen Zyklus leistet zu p(x) eine Addition von 2
(ich komme hinein zu x +1,
ich gehe wieder weg von x +1)
„⇐“
nimm Tuckers Algo:
• 2 Phasen
1. Z-Phase: Zerlegungsphase
• suche Knoten mit p(x) = 2k
,k > 1 (also p(x) = 4,6,8, ...)
• zerlege sie in k Knoten und gib jedem dieser Knoten jeweils 2 Kanten
⇒ jeder neue Knoten hat Grad 2
dabei merken, welche Knoten so einmal zusammengehörten (durch Relation / Ä-Klasse: alle die in
eine Ä-Klasse, die mal zusammengehört haben)
• das ergibt einen Graph G‘=(V‘, E‘), dessen Zusammenhangskomponenten immer Kreise bilden
2.
A-Phase: Aufbauphase
• Nimm Kreis C (eine Zusammenhangskomponente aus G‘)
a) Wenn alle Kanten in diesem Kreis C sind ⇒ das ist Eulerzyklus
b) Wenn nicht
⇒ ∃ Knoten x auf diesem Kreis C, in dessen Ä-Klasse ein Knoten x‘ ist, der nicht auf C liegt
vereinige x und x‘ wieder zu einem Knoten ( ergibt wieder Zyklus)
mache dies solange, bis alle Kanten zu C gehören
bei Digraphen: gerichteter Eulerzyklus:
wenn gilt indeg = outdeg, G ist zusammenhängend ⇒ G ist stark zusammenhängend
beim Algo: darauf achten, daß bei Zerlegung eines Knotens er 1 reinlaufende und 1 rauslaufende Kante
erhält
•
Wegproblem III: Hamiltonscher Weg / Kreis:
•
•
•
Hamiltonscher Kreis: ∃ eine geschlossene Kantenfolge, die jeden Knoten genau 1x enthält
ein Graph heißt hamiltonsch, wenn er einen hamitlonschen Kreis enthält
hierzu existieren keine Kriterien, die gleichzeitig hinreichend und notwendig sind
hinreichendes Kriterium für das Vorliegen eines Hamiltonschen Kreises: Satz von Ore
• Sei G=(V,E) ein ungerichteter Graph
|V| = n > 2
Wenn für alle nichtbenachbarten (nicht-adjazente) Knoten x, y gilt: p(x) + p(y) ≥ n
⇒ dann ist G hamiltonsch
Beweis:
• Kn ist vollständiger Graph mit n Knoten
• fasse G als Untergraph des Kn auf (der Kn enthält alle Knoten von G, aber mehr Kanten)
• der Kn hat einen Hamiltonkreis wähle einen, der möglichst viele Kanten in E (von G) hat
z.Zg.: dann ist dieser Kreis ein Hamiltonkreis auf G
Beweis durch Widerspruch:
• Angenommen:
eine der Kanten des H-Kreises gehört nicht zu E
•
Nummeriere Kanten von G durch, entsprechend ihrer Reihenfolge der Durchlaufung des gewählten
Kreises C
so, daß x1 und xn nicht benachbart sind in G, also keine Kante zwischen ihnen existiert
• p(x1) + p(xn) ≥ n gilt in G, d.h es kommen mehr Kanten in x1 und xn rein, als Knoten da sind
⇒ (x1, ..., xk+1) und (xk, xn) gehören zu E
(k ∈ {2,...,n-1)
⇒ x1, x2, ..., xk, xn, xn-1, ..., xk+1 ist Hamiltonkreis in Kn der eine Kante mehr als C in E hat
Widerspruch zur Wahl von C.
Wegproblem IV: Traveling Salesman Problem
• TSP: NP-vollständiges Problem
• TSP: verwandt mit Hamilton, aber andere Frage:
Hamilton: Frage nach Existenz einer Rundreise
TSP: Frage nach der Optimalität einer Rundreise
Wegproblem V: Finde ein minimales Gerüst
Beispiel: billigste / kürzeste Telefonleitungen zwischen Orten
Baum:
• ein Graph G, der zusammenhängend ist und keine Kreise enthält
• es gilt |E| = |V| -1 (Anzahl Kanten = Anzahl Knoten –1)
• zwischen 2 Knoten in einem Baum gibt es einen eindeutigen Weg
Wald:
• Graph, dessen Zusammenhangskomponenten Bäume sind
Gerüst eines zusammenhängenden Graphen:
• Untergraph von G, der ein Baum (zusammenhängend + keine Kreise) ist und alle Knoten von G enthält
Minimalgerüst eines bewerteten Graphen:
• Gesamtbewertung ( = ∑ der Einzelbewertungen aller Kanten im Gerüst) minimal unter allen Gerüsten
Es gibt 2 Arten von Algorithmen:
a) aufbauende: nimm Kanten herein, so daß Graph immer noch ohne Kreise ist, bis alle Knoten verbunden
b) abbauende: entferne Kanten, so daß Restgraph immer noch zusammenhängend ist
zu a) Aufbauende Verfahren:
1. Kruskal
• sortiere die Kanten nach ihrem Gewicht aufsteigend
• nimm billigste Kante, so daß noch keine Kreise entstehen mit den bereits gewählten kannten
2.
•
•
Prim
starte mit beliebigem Knoten a und setze A := {a}
nimm billigste Kante, die A und V\A verbindet ⇒ erweitere A dann entsprechend
•
bei Prim ist der Graph, der aufgebaut wird, während des gesamten Algos zusammenhängend
⇒ dies sind beides Greedy-Algorithmen, die allgemein auf Matroiden definiert sind
Matroid:
• Paar (S, U)
• S : endliche Menge
• U ⊆ ℘ (S) eine Menge von Teilmengen von S,
derart, daß folgende Axiome gelten:
(M1) ∅ ∈ U
(⇒ U ≠ ∅)
(M2) B ∈ U ∧ A ⊆ B ⇒ a ∈ U
alle Teilmengen eines Elementes aus U sind auch in U
(M3) A, B ∈ U ∧ |B| = |A| +1 ⇒ ∃ b ∈ B \ A mit A ∪ {b} ∈ U
(wenn A um 1 kleiner als B, dann ist A mit einem El aus b dazu wieder in U)
• die Mengen aus U heißen unabhängige Mengen des Matroids
• die maximalen Mengen in U heißen Basen des Matroids
• das Axiom (M3) ist eine Variante der sog. Austauschbedingung
(aus M3 folgt, daß in U je 2 Basen die gleiche Mächtigkeit haben)
Klassen von Matroiden:
•
•
Sei (V,E) ein zusammenhängender, endlicher Graph
Sei ⊂ ℘(E) die Menge aller Kantenmengen W ⊆ E, die keine Kreise enthalten (d.h.
⇒ dann ist ( E, ) ein Matroid
⇒ die Basen von (E, ) sind die Gerüste von (V,E)
ein Wald)
Sei K ein beliebiger Körper
V ein endlich dimensionaler Vektorraum
Sei S ⊆ V eine Teilmenge, die ganz V erzeugt: Lin S = V (S ist Erzeugendensystem)
Setze U = { A ⊆ S | A linear unabhängig }
⇒ dann erfüllt (S, U) die Axiome (M1), (M2), (M3), ist also ein Matroid, wenn S endlich ist
Damit verallgemeinert sich der Kruskalalgorithmus wie folgt:
Greedy-Algorithmus
• Sei (S, U) ein Matroid
ϕ : S 3>0 irgendeine Funktion, genannt Gewichtsfunktion
⇒ dann liefert der folgende Algorithmus immer eine Basis B ∈ U von minimalem Gesamtgewicht
ϕ(B) := ∑b ∈ B ϕ(B)
1.
2.
Wähle ein b1 ∈ S0 mit minimalem Gewicht:
ϕ (b1) ≤ ϕ(b)
∀ b ∈ S0
hierbei ist S0 := { x ∈ S | {x} ∈ U }
Bei schon gefundenen Elementen b1, ..., bk wähle bk+1 so, daß {b1, ..., bk+1} ∈ U und ϕ(bk+1) minimal
unter allen solchen Elementen b ∈ S
•
•
•
•
•
Wegproblem VI: Minimalweg von a nach b (kürzeste Verbindung zwischen 2 Knoten)
gegeben: bewerteter Graph (V,E, ϕ)
[x0, ..., xn] sei Kantenfolge in G
lϕ ([x0, ..., xn]) := ∑i=1...n ϕ ( {xi-1, xi} ) = ϕ-Länge
dϕ (x,y) = min { lϕ ([x, ..., y]) } , wenn Weg zwischen x, y existiert
(= Minimum über alle Wege von x nach y)
⇒ dϕ ist Metrik ( Dreiecksungleichung)
Algorithmus von Dijkstra für bewerteten, zusammenhängenden Graphen:
liefert von Ausgangsknoten a aus die Minimalabstände aller anderen Knoten y zu diesem Startknoten
( f(x) := d(a, x) schreibe das in jeden Knoten rein, oder in eine Tabelle)
Schritte:
1. Starte mit f(a) = 0, setze X:={a}
2. f sei schon bestimmt auf X ⊆ V, a ∈ X
suche Kante heraus, die
a) X und V\X verbindet
b) f(x) + ϕ((x,z)) ist minimal für x∈ X, z ∉ X
3. ersetze X durch X ∪ {z}, setze f(z) := f(x) + ϕ ( (x,z) )
(also minimale Kante von a nach z)
schreibe dabei in jeden Knoten / in Tabelle, auf welchem Weg du von a zu diesem Knoten gekommen bist
⇒ dann hat man kürzesten Weg von a zu jedem erreichbaren Knoten
Oft ist es ein Problem, eine absolut optimale Lösung zu finden (zu zeitaufwendig: NP-vollständige Probleme)
⇒ finde Näherungslösung und versuche diese zu verbessern
Bsp.: TSP
1. nimm Kruskal
liefert minimales Gerüst
interpretiere es als Rundreise:
durchlaufe jede Kante 2x (hin und zurück)
2. ⇒ damit habe ich Abschätzung für Kosten einer optimalen Rundreise:
Sei H ein Minimalgerüst, dann gilt schon mal
ϕ (H) ≤ ϕ (Rundreiseopt) ≤ 2⋅ ϕ(H)
3. optimiere: nimm Kanten, die nicht zu H (minimalGerüst) gehören hinzu, um Knoten zu überbrücken, die
beim zyklischen Durchlauf des Minimalgerüsts 2x besucht werden.
Herunterladen