Graphen und Netzwerke Vorlesung, Wintersemester

Werbung
Graphen und Netzwerke
Vorlesung, Wintersemester 2004
Johannes Waldmann, HTWK Leipzig
25. Januar 2005
Überblick
Motivation
• Graphen sind (neben Zahlen und Mengen) ganz
grundlegende mathematische Strukturen.
• viele Anwendungs-Probleme (der Informatik) lassen sich
auf Graphen-Probleme zurückführen,
typischerweise sind das Optimierungs-Aufgaben
(Ressourcen sind geeignet zu verteilen und
auszunutzen):
– konfliktfrei Ressourcen zuordnen (färben)
– kürzeste (billigste) Wege auf Landkarte finden
– maximalen Fluß finden (in Netzwerk mit Kapazitäten)
Inhalt
• Graphen
• Färbungen
• Wege (kürzeste, längste)
• Flüsse
benutzte Hilfsmittel:
• mathematische Notation (Mengen, Relationen)
• elementare Algorithmen
• Komplexitäts-Theorie (Klassen P und NP)
Organisation
• Vorlesung: montags 17:15–18:45, G126
• Seminar: donnerstags 11:15–12:45 Li110
Leistungsnachweise:
• Prüfungszulassung:
– kleinere Aufgaben im Seminar
– Online-Aufgaben
• Prüfung: Klausur
Literatur
• online:
– J. Waldmann: Vorlesung Graphentheorie (Univ. Leipzig,
2003) http://www.imn.htwk-leipzig.de/
˜waldmann/edu/ancient/ss03/graphen/
• Bücher
– Andreas Brandstädt: Graphen und Algorithmen,
Teuber, Stuttgart, 1994 http://www.informatik.
uni-rostock.de/˜ab/ab.html
– Reinhard Diestel: Graphentheorie, Springer, Berlin,
2002, http://www.math.uni-hamburg.de/home/
diestel/books/graph.theory/
• Software: http://www.graphviz.org/
GraphViz, die Dot-Notation
http://www.graphviz.org
(frei — entwickelt bei AT&T Research)
graph
{
;
;
}
Petersen
1 -- 2; 2 -- 3; 3 -- 4; 4 -6 -- 8; 8 -- 10; 10 -- 7; 7 -1 -- 6; 2 -- 7; 3 -- 8; 4 --
dot
-Tps petersen.dot | gv neato -Tps petersen.dot | gv twopi -Tps petersen.dot | gv -
5;
9;
9;
5 -- 1
9 -- 6
5 -- 10
Definitionen, Bezeichnungen
Graphen
M
k
:= {M 0 | M 0 ⊆ M ∧ |M 0| = k}.
M beachte Analogie zur Binomialkoeffizienten: k =
Bezeichnung:
|M |
k
• Ein Graph G = (V, E) ist ein geordnetes Paar von
– Knotenmenge V (vertex set)
– und Kantenmenge E (edge set).
• Eine Kante ist eine Zweiermenge von Knoten: E ⊆
V
2
Beispiel: G = ({1, 2, 3}, {{1, 2}, {1, 3}, {2, 3}}).
Vereinfachte Notation (Kante ohne Mengen-Klammern):
G = ({1, 2, 3}, {12, 13, 23}).
.
.
Das o. g. Modell heißt ungerichteter, einfacher Graph.
Es gibt Varianten (betrachten wir später):
• gerichtete Kanten,
• Schlingen,
• Mehrfachkanten
Beispiel: Automaten-Graphen
Beispiele
• vollständiger binärer Baum:
Σ = {0, 1}, V = Σ≤k , E = {{w, wa} | w ∈ Σ<k , a ∈ Σ}.
• Hyperwürfel:
V = Σk , E = {xy | dist(x, y) = 1}
wobei dist(x, y) = |{i | 0 ≤ i < k : xi 6= yi}|
(Anzahl unterschiedlicher Bits)
• Petersen-Graph:
M
M = {1, 2, 3, 4, 5}, V = 2 , E = {xy | x ∩ y = ∅}
M V
(
beachte: E ⊆ 2 = 22 )
Aufgaben: beweise direkt aus der Definition:
• Hyperwürfel enthält keinen ungeraden Ck
• Petersen-Graph enthält kein K3
Standard-Bezeichungen
• Pfad mit n Knoten (und n − 1 Kanten): Pn
• Kreis mit n Knoten (und n Kanten): Cn
• Clique (vollständiger Graph) mit n Knoten: Kn
• unanbhängiger Graph mit n Knoten: ({1, 2, . . . , n}, ∅)
(Bezeichung In nicht allgemein üblich)
• Haus, Stier, Fisch, 3-Sonne, . . .
Graphen-Operationen
• Komplement: G := (V (G),
V (G)
2
\ E(G))
• disjunkte Summe:
G + H = (V (G) ∪ V (H), E(G) ∪ E(H)),
falls V (G) ∩ V (H) = ∅
• Produkt: G ∗ H = (V (G) ∪ V (H), E(G) ∪ E(H) ∪ {xy |
x ∈ V (G), y ∈ V (H)}),
falls V (G) ∩ V (H) = ∅
Beispiele:
• Rad Wn = K1 ∗ Cn,
• vollständiger bipartiter Graph Ka,b := Ea ∗ Eb
Isomorphien
Def: Abbildung h : V (G) → V (H) heißt Isomorphie
zwischen Graphen G und H, falls
• h ist bijektiv (umkehrbar eindeutig)
• ∀x, y ∈ V (G) : xy ∈ E(G) ⇐⇒ h(x)h(y) ∈ E(H)
Def: Graph G ist isomorph zu Graph H, Schreibweise
G∼
= H, falls Isomorphie h zwischen G und H existiert.
Wir schreiben oft = statt ∼
=.
Bemerkung: Graph-Isomorphie ist offensichtlich in NP (ein
behauptetes h läßt sich schnell testen), aber es ist unklar,
ob es in co-NP ist. (gibt es einen einfachen Beweis für
Nicht-Isomorphie?)
Selbskomplementäre Graphen
G heißt selbstkomplementär, falls G ∼
= G.
Der folgende Graph auf 4k Knoten ist
selbst-komplementär:
• V = {a, b, c, d} × {1, 2, . . . , k}
• E enthält:
– alle Kanten innerhalb {b} × {1, 2, . . . , k} — kurz: (b, ∗)
– alle Kanten innerhalb (c, ∗)
– alle Kanten (a, ∗) − (b, ∗) − (c, ∗) − (d, ∗)
Beweis: die Isomorphie f : G → G ist f : (a, x) 7→
(c, x), (b, x) 7→ (a, x), (c, x) 7→ (d, x), (d, x) 7→ (b, x).
Aufgabe: konstruiere (mit Beweis) selbstkomplementäre
Graphen mit 4k + 1 Knoten!
Aufgaben zum Petersen-Graph
Aus Douglas B. West: Introduction to Graph Theory,
Prentice Hall, 1996, 2001
Satz: der Petersen-Graph besitzt die folgende Eigenschaft:
für alle nicht benachbarten Knoten x, y gilt: die
gemeinsame Nachbarschaft von x und y besteht aus
genau einem Knoten.
Gibt es weitere Graphen mit dieser Eigenschaft, die keine
vollständigen Graphen sind?
(Ja, Beispiel C5. Größere? — Für Kn ist die Aussage trivial
wahr, da es dort gar keine nicht benachbarte x, y gibt.)
Zeige: der Petersen-Graph enthält keinen C7.
Graphen-Parameter, Färbungen
Teilgraphen
• Def: G ist Teilgraph von H, Schreibweise G ⊆ H,
falls V (G) ⊆ V (H) und E(G) ⊆ E(H)
• Def: für Graphen H und Menge M ⊆ V (H)
ist H|M der durch
M induzierte Teilgraph
(M, E(H) ∩ M2 ).
• Def: G ist eingebetteter Teilgraph von H,
Schreibweise G ⊆I H, falls H|V (G) = G.
Einfache Graphen-Parameter
Def: Grad eines Knotens ist Anzahl seiner Nachbarn
degV (x) = |{y | xy ∈ E(G)}|
• Minimalgrad δ(G), Maximalgrad ∆(G)
Bemerkung: wenn δ(G) = ∆(G) = k, dann heißt G
k-regulär.
• Cliquenzahl ω(G) = max{n | Kn ⊆I G}
• Unabhängigkeitszahl α(G) = max{n | In ⊆I G}
• Taillenweite girth(G) = min{n | n ≥ 3 ∧ Cn ⊆I G}
Aufgaben: bestimme diese Parameter für Petersen-Graph,
für Folge der Hyperwürfel
Knoten-Färbungen
verbal:
• Eine k-Knoten-Färbung eines Graphen ordnet jedem
Knoten genau eine der Farben {1, 2, . . . , k} zu.
• Eine k-Färbung heißt konfliktfrei, wenn jede Kante
verschiedenfarbige Knoten verbindet.
• Die chromatische Zahl χ(G) ist das kleinste k, für das G
eine konfliktfreie k-Färbung besitzt.
formal:
• Farben Fk = {1, 2, . . . , k}, eine k-Färbung c : V (G) → Fk
• ∀xy ∈ E : c(x) 6= c(y)
• χ(G) = min{k | ∃konfliktfreie k-Färbung c für G}
Parameter-Abhängigkeiten
wir kennen α, δ, ∆, χ, girth, ω. untersuche
• Abhängigkeiten
Beispiel: ∀G : ω(G) ≤ ∆(G) + 1
• und Unabhängikeiten
Beispiel: ∀n : ∃G : ∆(G) ≥ n ∧ ω(G) = 2
Aufgabe: Finde solche Beispiele, z. B. mit χ, girth.
Aufgabe: mit n = |V (G)|, zeige
√
2 n ≤ χ(G) + χ(G) ≤ n + 1.
Finde Graphen G, die beweisen, daß die Schranken nicht
verbessert werden können. (D. h. für jedes n zwei
Beispiele.)
Greedy-Algorithmen
ein Such-Algorithmus heißt greedy (gierig), falls er in
jedem Knoten des Suchbaums die lokal beste
Entscheidung trifft und nie ändert.
(backtracking ohne back : der Suchbaum ist nur ein Pfad.)
Greedy-Algorithmen sind schnell, aber nicht immer
optimal.
Beispiel: Münzsysteme: benutze zur Herausgabe eines
Betrages immer zunächst das größte passende Geldstück.
Ist dieser Algorithmus für das Euro-System optimal (d. h.
benutzt immer die geringste mögliche Anzahl von
Münzen)?
Für welches System nicht (Beispiele)?
Greedy-Algorithmus zur Graphenfärbung
while
x
M
x
}
(nicht alle Knoten gefärbt) {
= irgendein nicht gefärbter Knoten;
= Menge der Farben der Nachbarn von x;
erhält kleinste Farbe, die nicht in M
• Algorithmus findet immer eine zulässige Färbung
• verbraucht ≤ ∆(G) + 1 Farben
Aufgabe:
Finde Beispiele (d. h. Graph mit Knotenreihenfolge), für die
der Algorithmus keine optimale Färbung findet. Wie groß
kann die Abweichung (= Anzahl der unnötig benutzten
Farben) werden?
Eine Schranke für die chromatische Zahl
Satz: χ(G) ≤ ∆(G) + 1.
Beweis: benutze Färbung durch Greedy-Algorithmus.
Aufgabe: für welche Graphen gilt Gleichheit?
Darstellung von Graphen
• laut Definition: Paar aus Menge von Knoten, Menge von
Kanten
• verschiedene mögliche Repräsentationen:
– Inzidenz-Matrix M : V 2 → {0, 1}
– Adjazenzlisten: [(x1, [x2, x3]), (x2, [x1, x4]), . . . ]
Liste von Paaren aus jeweils einem Knoten und Liste
aller seiner Nachbarn
Zugriff in Liste über binäre Suche (logarithmische
Zusatzkosten)
Aufgabe (RTFC): wie werden Graphen intern in GraphViz
repräsentiert?
Planare Graphen
Definitionen
Eine Zeichnung eines Graphen G ist eine Zuordnung
• p : V (G) → Punkte der Ebene
• s : E(G) → Kurvenstücke (Streckenzüge)
mit s(xy) verbindet p(x) mit p(y)
Ein Graph G heißt planar (plättbar), wenn er eine
kreuzungsfreie Zeichnung besitzt.
Bemerkung: wenn G eine kreuzungsfreie Zeichnung
besitzt, dann sogar eine, bei der die Kurven Strecken sind
(“ohne Knicke”)
Kreuzungszahl
Definition: die Kreuzungszahl (crossing number) von G ist
die kleinstmögliche Anzahl von “Kreuzungen” in einer
Zeichnung von G.
(G planar ⇐⇒ Kreuzungszahl von G ist 0)
Aufgaben: Bestimme Kreuzungszahlen von
K4, K5, K6, K7, . . . , K3,3, . . .
Der Eulersche Polyedersatz
planare Graphen kann man statt in die Ebene auch auf
eine Kugel zeichnen, dann sind es Polyeder-Netze.
Satz (Euler): Für jeden kreuzungsfreie Zeichnung eines
zusammenhängenden planaren Graphen gilt:
Anzahl der Ecken + Anzahl der Flächen − Anzahl der
Kanten = 2.
Beweis: duch Induktion nach Anzahl der Flächen.
Folgerungen
• K5 ist nicht planar
• Aufgabe: zeige ähnlich: K3,3, Petersen–Graph sind nicht
planar.
Hinweis: benutze Taillenweite
• Jeder planare Graph enthält wenigstens einen Knoten
vom Grad ≤ 5. (also: G planar ⇒ δ(G) ≤ 5)
Bemerkung: gibt es G planar, regulär, Grad 5?
Färbungen von planaren Graphen
• Satz: G planar ⇒ χ(G) ≤ 6.
Beweis: δ(G) ≤ 5
• Satz (Heawood, 1890): G planar ⇒ χ(G) ≤ 5.
Beweis: benutzt Kempe-Ketten (1879).
• Satz (Appel, Haken 1976): G planar ⇒ χ(G) ≤ 4.
Beweis: sehr umfangreich, Fallunterscheidung mit
Computer-Unterstützung.
Wege, Zusammenhang, Bäume
Wege
Def. ein Weg in einem Graphen G
• ist eine Folge von (abwechselnd) Knoten und Kanten
[v0, e0, v1, e1, . . . , ek−1, vk ],
• so daß für alle 0 ≤ i < k gilt: ei = {vi, vi+1} ∈ E(G)
• und [v0, v1, . . . , vk1 ] sind paarweise verschieden sowie
[v1, v2, . . . , vk ] sind paarweise verschieden
• Die einzige zugelassene Knoten-Wiederholung ist
v0 = vk , ein solcher Weg heißt Kreis.
• Die Länge des Weges ist k (= die Anzahl der Kanten,
nicht Knoten) — Vorsicht: Länge von P4 ist 3.
Wege — Aufgaben
(aus Bollobas: Modern Graph Theory, Kapitel 1)
Beweis oder Gegenbeispiel:
für n ≥ 2:
• Kn ist kantendisjunkte Vereinigung von Pfaden mit
paarweise verschiedener Länge
• Kn ist kantendisjunkte Vereinigung von
P2, P3, C3, C4, C5, . . . , Cn−1
Zusammenhang, Komponenten
Def. Relation ∼G durch
x ∼G y ⇐⇒ ∃Weg von x nach y in G.
Satz: ∼G ist Äquivalenzrelation.
(reflexiv, symmetrisch, transitiv)
Def: die Äquivalenzklassen heißen
Zusammenhangskomponenten.
Def: wenn ∼G nur eine Äquivalenzklasse erzeugt, dann
heißt G zusammenhängend.
Aufgabe: für jeden Graphen G gilt: G ist
zusammenhängend oder G ist zusammenhängend.
Mehrfacher Zusammenhang
Def: ein Graph G heißt k-fach knoten-zusammenhängend,
falls
∀M ⊆ V (G) : |M | < k ⇒ G \ M ist zusammenhängend.
Festlegung: Kn+1 ist n-fach knoten-zshgd (aber nicht
(n + 1)-fach).
Def: ein Graph G heißt k-fach kanten-zusammenhängend,
falls
∀M ⊆ E(G) : |M | < k ⇒ G \ M ist zusammenhängend.
Es gilt: G 1-fach knoten-zsgh ⇐⇒ G 1-fach kanten-zshg
⇐⇒ G zshg.
Bemerkung: für k ≥ 2 sind die Begriffe k-fach knoten-zshg
und k-fach kanten-zshg nicht äquivalent.
Satz: Wenn G k-fach knoten-zshgd, dann ist G k-fach
kanten-zshg.
Abstand, Durchmesser, Radius
• Abstand von x und y in G: distG(x, y)
= min{length(p) | p ist Weg in G von x nach y}
• Durchmesser von G:
diam(G) = maxx∈V (G) maxy∈V (G) distG(x, y)
• Radius von G:
rad(G) = minx∈V (G) maxy∈V (G) distG(x, y)
Aufgabe: Zeige rad(G) ≤ diam(G) ≤ 2 rad(G)
und finde Beispiele dafür, daß die Schranken nicht
verbessert werden können.
Bäume
Botanik
Definitionen
• Ein Graph ohne Kreis heißt kreisfrei (azyklisch).
• Ein kreisfreier Graph heißt Wald.
• Ein zusammenhängender Wald heißt Baum.
Bemerkung: in der Definition gibt es keine Wurzel.
• Ein Knoten mit Grad 1 heißt Blatt.
Bäume
Satz: die folgenden Bedingungen sind äquivalent:
• G ist ein Baum
(d. h. kreisfrei und zusammenhängend)
• G ist minimal zusammenhängend
(∀e ∈ E(G) : G \ e ist nicht zshgd)
• G ist maximal kreisfrei
(Aufgabe: formuliere exakt)
Gradsequenzen
Satz: Für alle Folgen von positiven Zahlen [d1, d2, . . . , dn]
gilt:
• es gibt einen Baum mit Knotengraden d1, d2, . . .
• d1 + d2 + . . . + dn = 2n − 2
Aufgabe: konstruktiver Beweis, d. h. Algorithmus, der den
Baum konstruiert
(. . . nebst Korrektheitsbeweis).
Graceful Labelings
Definitionen:
• Für Graphen G = (V, E): eine Abbildung
f : V → {0, 1 . . . , |E|} heißt graceful, wenn
{|f (x) − f (y)| : xy ∈ E} = {1, 2, . . . , |E| − 1}
• Ein Graph G heißt graceful, wenn er (wenigstens) ein
graceful labelling besitzt.
Vermutung: jeder Baum ist graceful.
. . . ist seit 40 Jahren offen (man glaubt es kaum)
Graphen und Spiele: Havannah
Havannah = ein Brettspiel für zwei Personen,
erfunden ca. 1980 von Christian Freeling.
Spieler setzen abwechselnd je einen Stein eigener Farbe
auf einen freien Punkt des hexagonalen Spielfeldes.
Spielziel:
• einen Kreis (geschlossener Weg) mit Inhalt herstellen
• oder zwei Ecken verbinden
• oder drei Kanten verbinden
Offizielle Webseite: http://www.mindsports.net/
Arena/Havannah/Rules.html.
Online spielen hier:
http://141.57.11.163/havannah/online/
Havannah—Theorie
Es geht also um (sichere) Verbindungen.
Man wird deswegen Graph-Algorithmen benötigen für
• kürzeste Wege
• (mehrfacher) Zusammenhang
• maximale Flüsse
Der Erfinder ist der Meinung, daß man Havannah nicht
”
programmieren kann,“ und hat einen Preis von 1000 EUR
ausgesetzt für ein Programm, das ihn in den nächsten 7
Jahren auch nur einmal (in einer Serie von 10 Spielen)
schlägt.
Havannah—Challenge
Holt Euch dieses Geld!
Beschäftigung mit Havannah ist als Diplomthema möglich
(die Arbeit kann dann aber nicht nur aus Programmieren
bestehen, sondern soll den Hintergrund in
Graphen/Algorithmen darstellen).
Hinweis: für Sommersemester 05 ist Oberseminar zu
Spieltheorie/Programmierung/Künstliche Intelligenz in
Vorbereitung (Prof. Schönherr, Waldmann)
Tiefensuche (rekursiv)
• Eingabe: ein gerichteter Graph G = (V, E)
• Ausgabe: eine Knotenreihenfolge b : V → N
for ( Knoten x in V ) { besucht[x] = false;
int counter = 0;
while ( exists x : not besucht[x] ) { dfs (x
dfs (x) {
// zu x existiert Weg aus Baumkanten
besucht[x] = true; b[x] = ++counter;
for ( y in Nachbarn von x ) {
if ( not besucht[y] ) {
dfs (y); // xy heißt Baum-Kante
} } }
Tiefensuche (iterativ)
dfs (x) {
push (NULL, x);
// evtl. Vorgänger und Knoten
while ( stack nicht leer ) {
(x’, x) := pop ();
if (not besucht [x]) {
besucht[x] = true; b[x] = ++counter;
// (x’, x) heißt Baumkante
for ( y in Nachbarn von x ) {
push (xy);
} } } }
Tiefensuche (II)
Die Baum-Kanten bilden einen gerichteten Wald B auf der
Knotenmenge V (G).
Die anderen Kanten xy ∈ E(G) heißen
• Rückwärtskante, falls y →∗B x
• Vorwärtskante, falls x →∗B y
• Querkante, sonst.
Tiefensuche auf ungerichteten Graphen
Satz: Bezüglich eines Tiefensuchbaums auf einem
ungerichteten Graphen gibt es keine Querkanten.
Kreise finden
Def: Ein gerichteter kreisfreier Graph heißt DAG (directed
acyclic graph).
Satz: Ein gerichteter Graph ist genau dann ein DAG, wenn
die Tiefensuche keine Rückwärtskante erzeugt.
Implementierung: wie Tiefensuche, mit zusätzlichem Feld
verlassen
Zweifach zusammenhängende Komponenten
Def: x ∈ V (G) ist Artikulationspunkt, falls K(G) > K(G \ v)
(wobei K(G) = Anzahl der Zusammenhangskomponenten
von G).
Def: M ⊆ V (G) ist 2-fache Zusammenhangs-Komponente
(Block), falls M maximal 2-fach zusammenhängend ist:
1. G|M ist 2-fach zusammenhängend
2. für jede echte Obermenge M 0 ⊃ M gilt: G|M 0 ist nicht
2-fach zusammenhängend
Literatur: Brandstädt: Graphen und Algorithmen
Zweifach zusammenhängende Komponenten
(II)
Bestimmung der Artikulationspunkte durch Tiefensuche.
Sei (V, B) ein DFS-Baum für G = (V, E) und t : V → N die
dazu gehörende Knotenreihenfolge.
Def: L(v) := min{t(u) | v →∗B w →0,1
E\B u}
Satz: u ist Artikulationspunkt ⇐⇒
• u ist Wurzel von B und outdegB (u) > 1
• oder u ist nicht Wurzel von B und ∃uv ∈ E : L(v) ≥ t(u).
Aufgabe: ist hier L(v) > t(u) möglich?
Gerüste (spanning trees)
Def: T ist Gerüst von G, falls:
• T ist Baum
• V (T ) = V (G) T spannt g auf “
”
• E(T ) ⊆ E(G)
Shannon Switching Game
(erfunden/untersucht von Claude Shannon, auch
vermarktet als Bridge-It“)
”
• Spielfeld/-situation: ein Graph G mit zwei markierten
Punkten N, S, Kanten sind anfangs alle weiß.
• Spieler: Cutter (beginnt) und Connector
• Spielzüge:
– Cutter löscht eine weiße Kante
– Connector färbt eine weiße Kante rot
• Spielziel:
– Connector gewinnt, sobald es einen roten Weg
zwischen N und S gibt.
– Cutter gewinnt, sobald N und S nicht
zusammenhängen.
Shannons Heuristik: Widerstandsnetzwerk
• N = +5 V, S = 0 V
• weiße Kante = 1Ω, rote Kante = 0Ω
• wähle immer eine weiße Kante, durch die der meiste
Strom fließt.
Begründung: viel Strom → Kante ist wichtig (liegt auf
vielen Wegen)
Lehmanns exakte Lösung
benutzt Gerüste von Graphen!
Minimale Gerüste
MST (minimum spanning tree, Minimalgerüst):
• Eingabe: zusammenhängender ungerichteter Graph G,
Kantengewichtsfunktion w : E(G) → Q
• Ausgabe: eine Gerüst T von G mit minimalem Gewicht
w(T ) = Σ{w(e) | e ∈ E(T )}.
Anwendungen bei Planung von (Versorgungs-)Netzen:
• G sind gewünschte Verbindungen,
• T sind die tatsächlich herzustellenden,
• w(e) sind die Herstellungskosten (nicht: die
Nutzungskosten).
MST-Algorithmus von Jarnik, Prim, Dijkstra
• zu jedem Zeitpunkt sind Knoten in U ⊆ V schon
behandelt (es ist ein MST für U bekannt)
• für die Knoten aus V \ U verwaltet man eine geeignete
Kostenschätzung.
• man fügt einen geeigneten Knoten zu U hinzu (durch
eine geeignete Kante zwischen U und V \ U .
• das erfordert eine Anpassung der geschätzten Kosten.
Vergleiche mit Algorithms von Dijkstra für kürzeste Wege.
MST: Prim, Korrektheit
beruht auf Lemma:
• Wenn U ⊆ V und e0 eine Kante zwischen U und V \ U
mit minimalem Gewicht,
• dann existiert ein Minimalgerüst T für G mit e0 ∈ E(T ).
Beweis: Sei T 0 ein Minimalgerüst für G, das e0 nicht
enthält. Konstruiere daraus ein Gerüst T für G mit
e0 ∈ E(T ) und w(T ) ≤ w(T 0).
MST: Prim: Datenstrukturen
Die Kostenschätzungen für V \ U müssen verwaltet
werden. Rechenoperationen sind:
• initialisieren (alles mit +∞)
• Knoten mit geringsten Kosten finden und entfernen
• Kosten ändern (hier: verringern)
Das ist die Schnittstelle für den abstrakten Datentyp
Vorrangwarteschlange (priority queue).
Mögliche Implementierungen:
• ungeordnete Liste
• geordnete Liste
• binärer Heap (wie in Heapsort)
• Binomialheap → Fibonacci-Heap
Binomial-Heaps: Definition
Ein Binomial-Baum Bn hat eine Wurzel mit Kindern
Bn−1, Bn−2, . . . , B1, B0.
Wieviele Knoten hat Bn?
Wieviele Knoten hat Bn in Schicht k?
Ein Binomial-Heap ist eine Menge von paarweise
verschieden großen, heap-geordneten Binomial-Bäumen.
(heap-geordnet: in jedem Teilbaum enthält die Wurzel
einen minimalen Schlüssel).
Wieviele Bäume enthält ein Binomial-Heap für n Schlüssel
höchstens?
Binomial-Heaps: Operationen
• Minimum finden: . . .
• Schlüssel verringern: . . .
• Minimum löschen: . . .
• zwei Binomial-Heaps vereinigen
Verbesserung: Fibonacci-Heaps: noch geringere
(amortisierte) Kosten
Matchings und Faktoren
Matchings
Def: Für Graph G = (V, E): unabhängige Menge M ⊆ E
heißt Matching (Paarung).
Def: Knoten x ∈ V heißt gesättigt bzgl. M , falls
∃y ∈ V : xy ∈ M .
Def: Matching M von G heißt maximal, falls für jedes
Matching M 0 von G gilt: |M | ≥ |M 0|.
Def: Matching M von G heißt perfekt, falls es V sättigt.
Satz von Berge
Def: Weg p heißt M -alternierend, wenn er abwechselnd
Kanten aus M und E \ M enthält.
Def: alternierender M -Weg heißt erweiternde, falls er zwei
nicht gesättigte Knoten verbindet.
Satz (Claude Berge): für jedes Matching M in G sind
äquivalent:
• M ist maximal
• es gibt keinen erweiternden M -Weg
Satz von Hall
Def: Graph G = (V, E) heißt bipartit (paar), falls existieren
X, Y mit X ∩ Y = ∅, X ∪ Y = V , E ⊆ X × Y ∪ Y × X.
Bezeichnung: G = (X, Y, E).
Def: Für S ⊆ V , setze G(S) = {y | ∃x ∈ S, y ∈ V : xy ∈ E}.
Satz (Hall): Für bipartite Graphen G = (X, Y, E) sind
äquivalent:
• G besitzt Matching, das X sättigt
• ∀S ⊆ X : |S| ≤ |G(S)|
Aufgabe: beweise (durch Beispiele), daß die
Voraussetzung G bipartit“ nötig ist.
”
Vertex Cover, Domination
Def: Menge M ⊆ V heißt Knotenüberdeckung (vertex
cover) von G = (V, E), falls ∀xy ∈ E : x ∈ M ∨ y ∈ M .
Vorsicht: Es werden Kanten überdeckt (durch Knoten).
Nicht verwechseln mit:
Def: Menge M ⊆ V heißt dominierende Menge von G, falls
M ∪ G(M ) = V .
Aufgabe: Finde G, bei denen Größe eines kleinsten vertex
cover 6= Größe einer kleinsten dominierenden Menge.
Satz von König
Satz (König 1931): Für bipartite Graphen stimmen überein:
• Größe eines kleinsten vertex cover
• Größe eines maximalen Matching
Flüsse
(siehe A. Brandstädt: Graphen und Algorithmen, Kapitel 6)
Definitionen: Netzwerke
N = (G, q, s, c) heißt Netzwerk, wenn
• G ist gerichteter Graph
• q, s ∈ V (G), q 6= s (Quelle, Senke)
• c : E(G) → R≥0 Kantengewichte (Kapazitäten)
Schreibe
• InG(y) := {x | (x → y) ∈ E(G)},
• OutG(x) := {y | (x → y) ∈ E(G)}.
Definitionen: Flüsse
Für f : E(G) → R≥0 und x ∈ V (G) schreibe
P
+
• f (y) = {f (xy) | x ∈ In(y)},
P
−
• f (x) = {f (xy) | y ∈ Out(y)},
• f (x) = f +(x) − f −(x).
f : E(G) → R≥0 heißt zulässiger Fluß, wenn
• ∀e ∈ E(G) : 0 ≤ f (e) ≤ c(e)
• ∀x ∈ V (G) \ {q, s} : f (x) = 0.
Das Maximalfluß-Problem
Def: Gesamtfluß f (N ) := f (s)
f : E(G) → R≥0 heißt Maximalfluß, wenn
f (N ) = max{f 0(N ) | f 0 ist zulässiger Fluß für N }.
Aufgabenstellung:
• gegeben N ,
• gesucht ein Maximalfluß f für N .
Schnitte
Für S ⊆ V (G), q ∈ S, s ∈
/ S, definiere S = V (G) \ S.
• (S, S) = E(G) ∩ S × S,
• (S, S) = E(G) ∩ S × S,
• für Fluß f :
P
P
f (S) = {f (e) | e ∈ (S, S)} − {f (e) | e ∈ (S, S)}
Erinnerung: f (N ) war definiert als f (V (G) \ {s}, {s}).
Satz (die Größe eines Flusses ist an jedem Schnitt gleich):
für jeden Schnitt S von N gilt: f (S) = f (N )
Kapazitäten von Schnitten und Flüssen
P
für Kapazitäten c: c(S) = {c(e) | e ∈ (S, S)}.
Lemma; für jeden Fluß f und jeden Schnitt S gilt:
f (N ) ≤ c(S).
Folgerung: max{f (N ) | f ist Fluß für N } ≤ min{c(S) |
S ist Schnitt für N }
Satz (Max-Flow-Min-Cut): Hier gilt Gleichheit.
Flußvergrößernde Wege
Betrachte Knotenfolgen P = (q = x0, x1, . . . , xn = s),
so daß für jedes i:
• xixi+1 ∈ E(G) (Vorwärtskante)
• oder xi+1xi ∈ E(G) (Rückwärtskante)
Für Netzwerk N , Knotenfolge P wie oben, Fluß f :
• für Vorwärtskante xy: setze ∆(xy) = c(xy) − f (xy)
• für Rückwärtskante xy: setze ∆(xy) = f (xy)
Setze ∆(P ) = min{∆(xy) | xy ∈ P }.
P heißt vergrößernder Weg, falls ∆(P ) > 0.
Def: f |P ist die Funktion e 7→
• wenn e Vorwärtskante in P , dann f (e) + ∆(P ),
• wenn e Rückwärtskante in P , dann f (e) − ∆(P ),
• wenn e nicht in P , dann f (e).
Satz: Wenn f Fluß für N und P vergrößernder Weg,
dann ist auch f |P Fluß für N , und
f |P (N ) = f (N ) + ∆(P ).
Maximalflüsse
Satz: die Aussagen sind äquivalent:
• f ist Maximalfluß für N
• es gibt keinen vergrößernden Weg P für N und f .
Beweis: →“ ist klar. Interessant ist ←“.
”
”
Betrachte S := Menge aller Knoten x, die von q aus über
einen Weg aus nützlichen Vorwärts- und Rückwärtskanten
erreichbar sind. (e ist nützlich, wenn ∆f (e) > 0.)
Zeige: S definiert Schnitt und dann c(S) = f (N ).
Bemerkung: falls man Rückwärtskanten nicht gestattet, gilt
der Satz nicht ( →“ ja, aber ←“ nicht)
”
”
Algorithmus von Ford und Fulkerson
Eingabe: Netzwerk N , Ausgabe: ein Fluß f für N .
• f0 = (e 7→ 0).
• Solange fi einen vergrößernden Weg P gestattet, setze
fi+1 = fi |P .
• sonst gibt fi aus
Satz: In Netzwerken mit ganzzahligen Kapazitäten ist der
maximale Fluß ganzzahlig und wird nach endlich vielen
Schritten durch diesen Algorithmus gefunden.
Bemerkungen:
• Algorithmus terminiert, aber rechnet evtl. lange
• für irrationale Kapazitäten ist noch nicht einmal
Termination garantiert!
Verbesserungen
festlegen, welcher vergrößernde Weg benutzt wird!
• Edmonds/Karp: mit BFS einen kürzesten suchen
• Dinitz: Schichten-Netzwerk benutzen (alle kürzesten
gleichzeitig)
Komplexität
Motivation
Wenn man ein (Graphen-)Problem durch einen effizienten
Algorithmus lösen kann, dann ist alles gut. Wenn man aber
trotz größter Mühe keinen effizienten Algorithmus findet,
dann möchte man doch wissen, warum.
Dazu braucht man eine sinnvolle Definition für den Begriff
schwieriges Problem“sowie zum Vergleichen der
”
Schwierigkeit von Problemen.
Wenn man dann zeigen kann, daß ein Problem in diesem
Sinne schwer ist, hat die Suche nach einem effizienten
Algorithmus keinen Zweck.
Man kann stattdessen suchen nach effizienten
Algorithmen für
• Näherungslösungen,
• exakte Lösungen für gewisse Teilmengen der möglichen
Eingaben.
Turingmaschinen
betrachten nichtdeterministische Turingmaschinen mit
• einem Eingabeband (read only, von links nach rechts)
• einem Arbeitsband (read/write, beliebig)
eine Teilmenge der Zustandsmenge ist als akzeptierend
festgelegt.
Eine solche Maschine akzeptiert eine Eingabe, falls es
ihrem Berechnunsbaum einen Pfad von der Wurzel
(Startkonfiguration) zu einem akzeptierenden Blatt gibt.
Die Menge (= Sprache) aller akzeptierten Wörter der
Maschine M heißt L(M )
Beschränkte Maschinen
Für Funktionen t, s : N → N:
Die Maschine M ist t-zeitbeschränkt (bzw.
s-platzbeschränkt),
falls jede akzeptierende Rechnung für eine Eingabe der
Länge n
aus höchstens t(n) Schritten besteht
(bzw. nie mehr als s(n) Zellen des Arbeitsbandes benutzt).
Komplexitätsklassen
Für eine Menge von Funktionen T :
DTIME(T ) bzw. NTIME(T ) ist die Klasse aller Sprachen
L, für die es eine Funktion t ∈ T und eine
t-zeitbeschränkte deterministische bzw.
nichtdeterministische Maschine M gibt mit, die L
akzeptiert.
entsprechend DSPACE(s) bzw. NSPACE(s) für
Platz-Schranken
Beispiele: für Const = Menge der konstanten Funktionen:
DSPACE(Const): deterministische Maschinen mit
endlichem Speicher = endliche Automaten.
Bemerkung: es gilt DSPACE(Const) = NSPACE(Const).
Wie heißt dieser Satz im Grundstudium?
die Klassen P und NP
Für Pol = Menge der Polynome:
• P = DTIME(Pol)
Sprachen (Probleme) mit effizienten Algorithmen
• NP = NTIME(Pol)
enthält schwierige Sprachen (Probleme)
Es gibt noch schwere Probleme ( oberhalb von NP“)
”
Das Programm einer nichtdeterministischen Maschine
kann man sich so vorstellen: 1. raten, 2. verifizieren. Für
NP-Maschinen enthlten 1. und 2. nur polynomiell viele
Schritte. . .
für ein vorher feststehendes Polynom (insbesondere darf
es nicht von der Eingabe abhängen).
Es gilt DTIME(f ) ⊆ NTIME(f ) ⊆ NSPACE(f )
(in f (|w|) Zeit kann auch nur f (|w|) Platz verbraucht
werden)
Reduktion, Vollständigkeit
Für Sprachen A und B:
A ≤P B, falls es eine P -berechenbare Funktion f gibt. so
daß ∀w : w ∈ A ⇐⇒ f (w) ∈ B.
Satz: ≤P ist transitiv und reflexiv.
Satz: aus A ≤P B und B ∈ NP folgt A ∈ NP.
B heißt NP-vollständig, falls
• B ∈ NP und
• ∀A ∈ NP : A ≤P B
Die Klasse der NP-vollständigen Sprachen heißt NPC.
Beispiele für NPC
Es gibt NP-vollständige Probleme:
• das Wortproblem für NP-Maschinen
• SAT (Erfüllbarkeit aussagenlogischer Formeln)
• 3SAT (. . . in konjunktiver Normalform mit je 3 Literalen
pro Klausel)
• Vertex Cover, . . .
Beweis: das erste folgt (fast direkt) aus Definition, die
anderen durch Reduktionen, denn:
Satz: wenn A ∈ NPC und A ≤P B, dann B ∈ NPC.
Vertex Cover etc.
Def: M ⊆ V ist Knotenüberdeckung für G = (V, E), wenn
∀xy ∈ E : x ∈ M ∨ y ∈ M .
Def:
VC = {(G, k) | G besitzt Knotenüberdeckung der Größe k}
Satz: VC ∈ NPC.
Beweis: 1. VC ∈ NP (M raten und verifizieren) 2.
3SAT ≤P VC durch folgende Übersetzungsfunktion
f : 3-KNF-Formel → Graph × Zahl
• für jede Variable v zwei Knoten v, v 0, durch Kante
verbunden
• für jede Klausel k drei Knoten k1, k2, k3, auf einem C3,
• für jedes positive Vorkommen einer Variablen v in einer
Klausul-Position ki eine Kante vki, für jedes negative
Vorkommen eine Kante v 0ki.
• die Zahl k = Anzahl der Variablen von F +2 Anzahl der
Klauseln von F .
Behauptung: f ist in P-Zeit berechenbar und für jede
Formel F : F ∈ 3SAT ⇐⇒ f (F ) ∈ VC
Zu zeigen sind beide Richtungen:
• aus erfüllender Belegung F konstruiere
Knotenüberdeckung für f (F )
• aus Knotenüberdeckung für f (F ) konstruiere erfüllende
Belegung für F .
VC für Graphen von Maixmalgrad 3 auch noch
NP-vollständig.
IS = {(G, k) | G besitzt unabh. Menge der Größe k}
CLIQUE = {(G, k) | G besitzt Clique der Größe k}
Aufgaben:
• VC ≤P IS, VC ≤P CLIQUE
• Komplexität dieser Probleme für a) planare Graphen, b)
bipartite Graphen, c) Bäume
3-Färbbarkeit
3COL = {G | G besitzt 3-Färbung}.
Satz: 3COL ∈ NPC.
Beweis: 1. 3COL ∈ NP (Färbung raten und verifizieren) 2.
3SAT ≤P 3COL durch folgende Übersetzung . . .
Chordale Graphen
(Motivation: schwerer Graphenprobleme sind für
eingeschränkte Mengen von Graphen evtl. einfacher)
Def: G heißt chordal, falls für kein k ≥ 4 : Ck ist induzierter
Teilgraph von G
d. h. jeder Kreis (≥ 4) besitzt eine Sehne (= chord)
Separatoren
Def: Für G = (V, E), a, b ∈ V : SV (G) heißt
(a, b)−Separator, falls a, b in verschiedenen Komponenten
von G \ S.
Satz: G ist chordal ⇐⇒ jeder minimale (a, b)-Separator
induziert eine Clique in G.
Simpliziale Knoten
Def: v ∈ V (G) heißt simplizial, falls die Nachbarn von v in
G eine Clique (= Simplex) induzieren.
Satz: G chordal ⇒ enthält einen simplizialen Knoten.
es gilt sogar: ist G keine Clique, dann enthält G zwei nicht
benachbarte simpliziale Knoten.
Perfect elimination schemes
Def: Anordnung [v1, v2, . . . , vn] von V (G) heißt
Abpflück-Ordnung (perfect elimination scheme, PES), falls
für alle i: vi ist simplizial in G{vi, . . . , vn}.
Satz: G chordal ⇐⇒ G besitzt PES.
sogar Satz: solches PES kann mit beliebigem simplizialen
Knoten beginnen.
Dieses PES definiert auf G eine Baumstruktur, diese kann
man algorithmisch ausnutzen.
Z. B. kann man ω(G) und χ(G) für chordale G leicht
bestimmen
(viel leichter als für allgemeine Graphen)
Perfektion
Satz: G chordal ⇒ χ(G) = ω(G).
Def: G heißt perfekt, falls für alle induzierten Teilgraphen
H ⊆I G gilt: χ(H) = ω(H)
Satz: (weak) perfekt graph theorem (Berge 1960 —
Lovasz, 1971) G perfekt ⇐⇒ G perfekt
Satz: (strong) perfect graph theorem (— Robertson,
Seymour, 2003) G perfekt ⇐⇒ G enthält keinen
induzierten C5, C7, C9, . . . , C5, C7, C9, . . ..
partielle k-Bäume
Def: ein Graph heißt k-Baum, wenn er ein PES [x1, . . . , xn]
besitzt, bei dem alle Cliquen die Größe k haben:
∀1 ≤ i < n − k : xi hat genau k Nachbarn in
G[xi, xi+1, . . . , xn] (und diese bilden eine Clique).
Satz: Bäume sind 1-Bäume.
Def: ein Graph G = (V, E) heißt partieller k-Baum, falls es
einen k-Baum G0 = (V 0, E 0) gibt mit V = V 0 und E ⊆ E 0.
Beispiel: Kreise sind partielle 2-Bäume.
Algorithmen für k-Bäume
grundsätzliche Idee:
• das Eliminationsschema für den k-Baum G0 definiert eine
Baumstruktur
• benutze teile und herrsche in diesem Baum!
Die Kosten für das herrschen sind abhängig von k
(eventuell sogar exponentiell)
⇒ besonders nützlich für Graphen mit kleinem k.
Baumweite
Def: die Baumweite (tree width):
tw(G) := min{k | G ist partieller k-Baum}
leider . . . TW = {(G, k) | tw(G) ≤ k} ∈ NPC,
aber . . . für jedes feste k : TWk = {G | tw(G) ≤ k} ∈ P
(sogar Linearzeit, aber mit abenteuerlichen Faktoren)
Die Algorithmen zur nachträglichen Feststellung der
Baumweite bzw. eines Eliminationsschemas sind
unpraktisch . . . aber oft gar nicht nötig: in vielen
Anwendungen kann man ein Eliminationsschema schon
von vornherein in der Eingabe des Algorithmus
voraussetzen, z. B. für Graphen, die durch die Art ihrer
Erzeugung (also genetisch) kleine Baumweite haben.
Reihen-/Parallel-Graphen
(wie Reihen- und Parallelschaltungen in der Elektrotechnik)
Def: SP ist Menge von markierte Graphen (s, G, t) mit
V 3 s 6= t ∈ V .
• wenn G nur die Kante s − t ist, dann (s, G, t) ∈ SP
• SP ist die kleinste Menge, die abgeschlossen ist unter
den Operationen:
– (Reihenschaltung) (s1, G1, t1) · (s2, G2, t2) = (s1, G0, t2)
mit G0 = G1 ∪ G2 mit t1 = s2
– (Parallelschaltung) (s1, G1, t1) + (s2, G2, t2) = (s1, G0, t1)
mit G0 = G1 ∪ G2 mit s1 = s2 und t1 = t2
Satz: (s, G, t) ∈ SP ⇒ tw(G) ≤ 2.
Independent Set für G mit beschr. Baumweite
gegeben G mit tw(G) = k und entspr. PES für G0 ⊇ G.
v ∈ G angehängt an die k-Clique K.
s(τ, K) := maximale Größe einer unabh. Menge in
Vorgängern von K ∪τ für τ ⊆ K.
man kann alle Zahlen s(τ, K) entlang des PES
ausrechnen.
(wie geht das, wieviele sind es, wie lange dauert es?)
Algorithischer Nutzen der Baumweite
Viele NP-vollst. Graphenprobleme sind für Graphen mit
beschränkter Baumweite in Polynomialzeit lösbar.
Herunterladen