Skript zur Vorlesung Graphenalgorithmen Version 1.1.0 Juniorprofessor Dr. rer. nat. Robert Elsässer, mit Überarbeitungen von Dr. rer. nat. Henning Meyerhenke Universität Paderborn Fakultät für Elektrotechnik, Informatik und Mathematik Institut für Informatik D-33102 Paderborn Skript (Version 1.0) verfasst von Florentin Neumann Inhaltsverzeichnis Vorwort 3 1 Einleitung und Motivation 4 2 Kürzeste Pfade, All Pairs Shortest Paths (APSP) 6 2.1 Der Floyd-Warshall-Algorithmus . . . . . . . . . . . . . . . . . . 8 2.2 Matrix-Multiplikation . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2.1 Voraussetzungen . . . . . . . . . . . . . . . . . . . . . . 8 2.2.2 Distanz- und Wegeberechnungen mit dem Algorithmus von Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.3 Approximationsalgorithmen für APSP . . . . . . . . . . 23 3 Matchings in bipartiten Graphen 31 3.1 Grundlagen und Strukturaussagen . . . . . . . . . . . . . . . . . 31 3.2 Berechnung von größtmöglichen Matchings . . . . . . . . . . . . 36 3.3 Matchings mit maximalem Gewicht . . . . . . . . . . . . . . . . 38 3.3.1 Korrektheit . . . . . . . . . . . . . . . . . . . . . . . . . 38 4 Matchings in allgemeinen Graphen 42 4.1 Der Algorithmus von Edmonds . . . . . . . . . . . . . . . . . . 42 4.2 Approximationsalgorithmen für MWM . . . . . . . . . . . . . . 42 4.3 Die Theoreme von Tutte und Petersen . . . . . . . . . . . . . . 44 5 Netzwerkalgorithmen 48 5.1 Der Hypercube . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.2 Gitter und Torus . . . . . . . . . . . . . . . . . . . . . . . . . . 53 5.3 Lastbalancierung . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6 Bisektionsweite und Partitionierung 6.1 59 Untere Schranken für die Bisektionsweite . . . . . . . . . . . . . 59 6.1.1 Verfahren von Leighton . . . . . . . . . . . . . . . . . . . 60 6.1.2 Spektrale untere Schranke . . . . . . . . . . . . . . . . . 62 1 Literaturverzeichnis 65 2 Vorwort Dieses Skript basiert auf der Vorlesung Graphenalgorithmen, die ich im WS 2010/11 an der Universität Paderborn für Master-Studierende gelesen habe. Die ursprüngliche Version wurde zwei Jahre zuvor von Florentin Neumann anhand meiner Vorlesung erstellt und ein Jahr später von Henning Meyerhenke überarbeitet. Die Inhalte dieses Skriptes wurden aus den im Literaturverzeichnis angegebenen Quellen entnommen. Inhaltlich habe ich die Vorlesung gegenüber dem Vorjahr leicht verändert, was auch zu Löschungen und Hinzufügungen im Skript geführt hat. Leider konnte ich noch nicht alle Lücken füllen, habe aber an solchen Stellen weitestgehend Literaturverweise eingefügt. Des weiteren sind sicherlich noch nicht alle enthaltenen Fehler korrigiert, ich bin daher im Namen aller am Skript Beteiligten um entsprechende Hinweise dankbar. Bitte bedenken Sie bei der Prüfungsvorbereitung, dass die gesamte Veranstaltung geprüft wird, dazu gehören zum Beispiel auch die Übungszettel. Ein Studium des Skripts kann den Besuch der Vorlesung und der Übung nicht ersetzen! Paderborn, 8. Juli 2011 Robert Elsässer 3 Kapitel 1 Einleitung und Motivation In dieser Vorlesung werden Sie eine Reihe von Algorithmen kennenlernen, die auf Graphen operieren. Ein Graph modelliert allgemein gesprochen eine Menge von Entitäten (dargestellt als Knoten) und die Beziehungen der Entitäten (dargestellt durch Kanten). Definition 1. Ein Algorithmus ist eine eindeutige Beschreibung eines Verfahrens zur Lösung einer bestimmten Klasse von Problemen. Genauer gesagt ist ein Algorithmus eine Menge von Regeln für ein Verfahren, um aus gewissen Eingabegrößen bestimmte Ausgabegrößen herzuleiten. Dabei muss dass Verfahren in einem endlichen Text beschreibbar sein. Jeder Schritt dieses Verfahrens muss auch tatsächlich ausführbar sein und darüber hinaus muss der Ablauf des Verfahrens zu jedem Zeitpunkt eindeutig definiert sein. Hier einige typische Beispielprobleme, in denen Graphenalgorithmen eine wichtige Rolle spielen: • Wie findet ein Navigationssystem gute Verbindungen zwischen zwei Orten? • Wie werden im Internet Informationen geroutet? • Wie berechnet ein Unternehmen eine möglichst gute Aufteilung seiner Ressourcen, um seinen Gewinn zu maximieren? • Wie werden etwa in Google Informationen schnell gefunden? Um über die Qualität eines Algorithmus urteilen zu können, bedarf es bestimmter Kriterien, um entsprechende Urteile treffen zu können. (i) Algorithmen müssen korrekt sein. D.h. zu jedem Algorithmus gehört ein Korrektheitsbeweis, der in allgemeiner Form die Korrektheit der Berechnung der Ausgabegröße zu einer gegebenen Eingabegröße zeigt. (ii) Algorithmen sollen zeit4 und speichereffizient sein. Hierzu bedarf es Analysemethoden für den Zeit- und Speicherbedarf eines Algorithmus. Diese Analyse basiert in der klassischen Algorithmik nicht auf empirischen Untersuchungen, sondern auf mathematischen Analysen. Wir nutzen hierfür Pseudocode und Basisoperationen. Zum Entwurf eines Algorithmus gehören grundsätzlich drei Dinge: 1. Die Beschreibung des Algorithmus selbst in Pseudocode. 2. Ein vollständiger Korrektheitsbeweis. 3. Die Analyse des Zeit- und Speicherbedarfs des Algorithmus. 5 Kapitel 2 Kürzeste Pfade, All Pairs Shortest Paths (APSP) Zu Beginn dieses Kapitels betrachten wir das Problem kürzester Wege in gerichteten Graphen mit Kantengewichten. In einem unidirektionalen, zusammenhängenden Graphen G = (V, E) mit V = {1, . . . , n} und |E| = m als Eingabegrößen soll als Ausgabegröße für jedes Paar von Knoten u, v ∈ V die Distanz von u nach v sowie ein kürzester Weg zwischen den beiden Knoten im Graphen G berechnet werden. Definition 2. Sei ein gerichteter und gewichteter Graph G = (V, E) mit der Gewichtsfunktion w : E → R gegeben. Das Gewicht eines Weges P = hv0 , v1 , . . . , vk i ist die Summe der Gewichte seiner Kanten: w(P ) = k X w(vi−1 , vi ). i=1 Definition 3. Das Gewicht eines kürzesten Weges P in einem gerichteten und gewichteten Graphen G = (V, E) zwischen den Knoten u, v ∈ V ist definiert als: min{w(P ) : v ist von u über P erreichbar}, δ(u, v) = ∞, falls v von u nicht erreichbar ist. Ein kürzester Weg zwischen u, v ∈ V ist dann ein Weg P mit w(P ) = δ(u, v). 6 Abbildung 2.1: Unidirektionaler, gewichteter Graph G = (V, E) Die Eingabe wird als Gewichtsmatrix W = (wij ) dargestellt, die den Graphen repräsentiert. Die Matrix-Einträge wij 0 wij = Gewicht der ger. Kante (i, j) ∞ sind wie folgt definiert: , wenn i = j , wenn i 6= j und (i, j) ∈ E , wenn i 6= j und (i, j) ∈ /E Aus dieser Definition folgt für den Graphen G aus Abbildung 2.1 die Gewichtsmatrix wij , abgebildet in Tabelle 2.1: Tabelle 2.1: Gewichtsmatrix W zum Graphen G aus Abbildung 2.1 a b c d e a 0 2 ∞ 5 ∞ ∞ b ∞ 0 4 ∞ ∞ ∞ c ∞ ∞ 0 1 ∞ 7 d ∞ -4 6 0 5 ∞ e ∞ ∞ 8 ∞ 0 -1 f ∞ ∞ ∞ ∞ ∞ 0 7 f 2.1 Der Floyd-Warshall-Algorithmus Algorithm 1 Floyd-Warshall - APSP 1: procedure Floyd-Warshall(G = (V, E)) 2: D(0) ← W 3: for k ← 1 to n do for i ← 1 to n do 4: 5: for j ← 1 to n do 6: dij ← min(dij (k) (k−1) , dik (k−1) + dkj ) end for 7: end for 8: end for 9: return Dn 10: 11: (k−1) end procedure Der Floyd-Warshall-Algorithmus basiert auf der Idee, das Problem schritt- weise zu vergrößern. In Iteration k werden alle Wege berücksichtigt, die über Knoten aus der Menge {1, . . . , k} verlaufen (direkte Kanten des Graphen eingeschlossen). Nach Ende der äußersten Schleife hat k den Wert n überschritten, so dass alle möglichen Wege berücksichtigt worden sind. Lemma 4. Sei G ein Graph ohne negative Zyklen und sei j von i aus erreichbar. Dann gibt es einen kürzesten i − j-Weg, der keinen Knoten doppelt benutzt. Satz 5. Sei G = (V, E) ein Graph mit nicht-negativen Zyklen. Dann berechnet der Algorithmus von Floyd-Warshall die Entfernung zwischen jedem Knotenpaar in O(|V |3 ) Schritten. Die Beweise von Lemma 4 und Satz 5 werdem dem Leser anhand der obigen Erläuterungen als Übung empfohlen. 2.2 2.2.1 Matrix-Multiplikation Voraussetzungen Wir betrachten ungerichtete Graphen G = (V, E) mit der Knotenmenge V = {1, ..., n}. Ein Graph G = (V, E) ist gegeben durch seine Adjazenzmatrix A. Betrachte hierzu den Graphen aus Abbildung 2.2 und die zugehörige Adjazenzmatrix. 8 Abbildung 2.2: Ungerichteter Graph G = (V, E) und die zugehörige Adjazenzmatrix A Definition 6. Es sei G = (V, E) ein Graph, W = (wij ) eine Gewichtsmatrix, (k) d.h. wij ist das Gewicht der Kante von i nach j. Definiere δij als Gewicht des bzgl. des Gewichts kürzesten Weges von i nach j mit höchstens k Kanten. Bemerkung 7. Es sei G = (V, E) ein Graph und W eine Gewichtsmatrix für G. Dann gilt: 0 ,i = j (0) δij = ∞ , i 6= j und (n−1) Außerdem ist δ(i, j) = δij (m) δij (m−1) = min {δik 1≤k≤n + wkj } für m ≥ 1. . Im Folgenden betrachten wir das Problem der Matrixmultiplikation. Es seien D, W ∈ Rn×n quadratische Matrizen. Dann berechnet sich der Eintrag (i, j) des Produkts von D und W als Skalarprodukt der i-ten Zeile von D und der j-ten Spalte von W : (D · W )ij = n X Dik · Wkj (2.1) k=1 Wir wollen uns nun zu Nutzen machen, dass die Berechnungsvorschrift zur Matrixmultiplikation sehr ähnlich zu der rekursiven Formel in Bemerkung 7 ist. Denn ersetzt man im rechten Teil der Formel (2.1) · durch + und das durch Σ gegebene + durch min, gilt für D, W ∈ (R ∪ {∞})n×n : (D ∗ W )ij = min {Dik + Wkj } 1≤k≤n Diese Beobachtung setzen wir nun ein, um mit Hilfe eines modifizierten Algorithmus zur Matrixmultiplikation die Distanzen aller paarweise kürzesten Wege (n−1) zu berechnen. Die wichtige Idee dabei ist, D(n−1) = (δij ) durch fortgesetzte Matrixmultiplikation zu berechnen: D(1) = W, D(2) = W 2 = W ∗ W, D(4) = W 4 = W 2 ∗ W 2 , ... 9 D(2dlog n−1e) = D2dlog n−1e = D2dlog n−1e−1 ∗ D2dlog n−1e−1 Algorithmus mmAPD zeigt nun, wie man durch fortgesetzte Aufrufe an eine Subroutine zur modifizierten Matrixmultiplikation die Distanzen der paarweise kürzesten Wege berechnen kann. Momentan liegt die beste bekannte Laufzeit Algorithm 2 MatrixMultiply 1: procedure MatrixMultiply(weight matrix A, B) 2: 3: for i = 1; i ≤ n; i + + do for j = 1; j ≤ n; j + + do 4: Cij = ∞ 5: for k = 1; k ≤ n; k + + do Cij = min{Cij , Aik + Bkj } 6: end for 7: 8: 9: end for end for 10: return C 11: end procedure Algorithm 3 mmAPD 1: procedure mmAPD(weight matrix W ) 2: D(1) = W 3: m=1 4: while m < n − 1 do 5: D(2m) = MatrixMultiply(D(m) , D(m) ) 6: m = 2m 7: end while 8: return D(m) 9: end procedure eines Algorithmus für Matrixmultiplikation bei O(n2.376 ). Eine bessere untere Schranke als Ω(n2 ) ist nicht bekannt, so dass hier eine noch nicht geschlossene Lücke zwischen unterer und oberer Laufzeitschranke klafft. Die obere Laufzeitschranke kann auf die Multiplikation von Boolschen Matrizen angewandt werden, wie wir in Kürze sehen werden. Bedauerlicherweise folgt aus dieser Beobachtung aber auch eine Laufzeit für das APD Problem, die größer als O(n2 ) ist (jedenfalls solange man über keinen Algorithmus mit quadratischer Zeitkomplexität zur Matrixmultiplikation verfügt). Die Laufzeit des Algorithmus mmAPD ist O(mm(n) · log n), wobei mm(n) die Zeit ist, um zwei n × n Matrizen miteinander zu multiplizieren. Es 10 gibt allerdings einen Nachteil, denn es gibt keine implizite Darstellung der kürzesten Wege, denn dazu wären alle Matrizen D1 , . . . , Dm notwendig und die Laufzeit würde auf O(mm(n) · n) ansteigen. 2.2.2 Distanz- und Wegeberechnungen mit dem Algorithmus von Seidel Wir betrachten nun die Probleme Distanz- und Wegeberechnungen in ungerichteten und ungewichteten Graphen. • Problem APD: Gegeben: Ungerichteter, ungewichteter Graph G = (V, E). Gesucht: Matrix D = (δij ), wobei δij die Distanz von i nach j in G ist. • Problem APSP : Gegeben: Ungerichteter, ungewichteter Graph G = (V, E). Gesucht: Matrix D = (δij ) wie bei APD und eine implizite Darstellung der kürzesten Wege. Wir werden für beide Probleme Lösungen erarbeiten und sehen, dass das APD-Problem in Zeit O(mm(n)·log n) für ungewichtete, ungerichtete Graphen lösbar ist und das APSP -Problem in erwarteter Zeit O(mm(n) · log2 n) für dieselbe Graphklasse durch einen randomisierten Algorithmus lösbar ist. Lemma 8. Es sei G(V, E) ein ungerichteter, ungewichteter Graph mit Adjazenzmatrix A. Ist Z = A2 , so ist Zij > 0 genau dann, wenn es einen Weg der Länge 2 von i nach j gibt. Zij gibt die Anzahl der verschiedenen Wege der Länge 2 von i nach j an. Proof. „⇒“ Sei P = hi, k0 , ji ein Weg von i nach j in G. Dann ist P {i, k0 }, {k0 , j} ∈ E, also Ai,k0 = Ak0 ,j = 1. Es folgt Zij = nk=1 Ai,k Ak,j ≥ Ai,k0 Ak0 ,j = 1. „⇐“ Sei Zij > 0. Dann existiert k0 ∈ {1, ..., n} mit Ai,k0 Ak0 ,j = 1. Dann ist {i, k0 }, {k0 , j} ∈ E und P = hi, k0 , ji Weg von i nach j in G. Um zu zeigen, dass Zij die Anzahl der verschiedenen Wege der Länge 2 von i nach j angibt, betrachten wir die Berechnung von Zij : Zij = n X k=1 Aik · Akj = X k∈Γ(i)∩Γ(j) 11 1 = |Γ(i) ∩ Γ(j)|. Damit können wir durch eine einfache Matrixmultiplikation eine Matrix Z berechnen, die es erlaubt, schnell einen Graphen G0 zu berechnen, in dem zwei Knoten i und j genau dann miteinander verbunden sind, wenn δ(i, j) ≤ 2 in G ist: 2 Z = A 1, falls i 6= j und (A = 1 oder Z > 0) 0 ij ij Aij = 0, sonst 0 0 G = der durch A induzierte Graph Lemma 9. Es sei G(V, E) ein ungerichteter, ungewichteter Graph mit Adja0 0 zenzmatrix A. Ist A derart, dass Aij = 1 genau dann gilt, wenn i 6= j und 0 0 (Aij = 1 oder Zij > 0), und ist D die Distanzmatrix des durch A gegebenen 0 Graphen G , so gilt: 0 • a) Dij = 2Dij , wenn Dij gerade ist und 0 • b) Dij = 2Dij − 1, wenn Dij ungerade ist. Proof. • Fall a) Dij = 2k ist gerade. ⇒ ∃ kürzester Weg P = hi = i0 , i1 , ..., i2k−1 , i2k = ji von i nach j in G. 0 0 ⇒ P = hi = i0 , i2 , ..., i2k−2 , i2k = ji ist Weg von i nach j in G . 0 ⇒ Dij ≤ k 0 Wäre Dij = l < k, so existierte ein Weg Q von i nach j in G der Länge 0 ≤ 2l (Widerspruch, da Dij = 2k). Daraus folgt Dij = k. 0 Also Dij = 2k = 2Dij . • Fall b) Dij = 2k + 1 ungerade. ⇒ ∃ kürzester Weg P = hi = i0 , i1 , ..., i2k , i2k+1 = ji von i nach j in G. 0 0 ⇒ P = hi = i0 , i2 , ..., i2k , i2k+1 = ji ist Weg von i nach j in G . 0 ⇒ Dij ≤ k + 1 0 Wäre Dij = l ≤ k, so existierte ein Weg Q von i nach j in G der Länge 0 ≤ 2k (Widerspruch, da Dij = 2k + 1). Daraus folgt Dij = k + 1. 0 Also Dij = 2k + 1 = 2Dij − 1. Die Idee für einen Algorithmus beläuft sich auf drei hauptsächliche Schritte: 0 0 1. Berechne die Distanzen D für G (rekursiv). 12 2. Berechne die Parität der Distanzen in G. 3. Dann liefert Lemma 9 eine Berechnungsvorschrift für die Distanzen D in G. Lemma 10. Betrachte ein beliebiges Paar disjunkter Knoten i, j ∈ V des Graphen G. • a) Für alle Nachbarn k ∈ Γ(i) gilt Dij − 1 ≤ Dkj ≤ Dij + 1. • b) Es existiert ein Nachbar k ∈ Γ(i) mit Dkj = Dij − 1. Proof. Sei P = hi = i1 , i2 , ..., ip+1 = ji kürzester Weg von i nach j in G, also Dij = p. • a) Sei k ∈ Γ(i), d. h. {i, k} ∈ E. 1. k = i2 ⇒ P1 = hk = i2 , ..., ip+1 = ji ist Weg von k nach j ⇒ Dkj ≤ p + 1 2. k 6= i2 ⇒ P2 = hk = i0 , i1 , ..., ip+1 = ji ist Weg von k nach j ⇒ Dkj ≤ p + 1 In jedem Fall: Dkj ≤ p + 1 = Dij + 1 3. Annahme: Dkj = q < Dij − 1. Dann existiert P3 = hk = k1 , k2 , ..., kq+1 = ji von k nach j ⇒ P4 = hi = k0 , k1 , k2 , ..., kq+1 = ji ist ein Weg der Länge q + 1 < Dij von i nach j (Widerspruch zur Definition von Dij ). • b) Folgt aus a), 1.) und 3.). Lemma 11. Betrachte ein beliebiges Paar disjunkter Knoten i, j ∈ V des Graphen G. 0 0 • a) Ist Dij gerade, so ist Dkj ≥ Dij für alle Nachbarn k ∈ Γ(i). 0 0 • b) Ist Dij ungerade, so ist Dkj ≤ Dij für alle Nachbarn k ∈ Γ(i). Außer0 0 dem existiert ein k ∈ Γ(i) derart, dass Dkj < Dij . Proof. • Fall a) Dij = 2l ist gerade. ⇒ ∀ Nachbarn k ∈ Γ(i): Dkj ≥ 2l − 1 |{z} Lemma 10 0 Dann ist Dij = l nach Lemma 9 a). 0 Weiter folgt aus Lemma 9 a,b), dass Dkj ≥ Dkj /2 ≥ l − 0 0 0 Dkj ist ganzzahlig ⇒ Dkj ≥ l = Dij 13 1 2 • Fall b) Dij = 2l − 1 ist ungerade. ⇒ ∀ Nachbarn k ∈ Γ(i): Dkj ≤ 2l |{z} Lemma 10 0 Dann ist Dij = l nach Lemma 9 b). 0 Weiter folgt aus Lemma 9 a,b), dass Dkj ≤ (Dkj + 1)/2 ≤ l + 0 0 1 2 0 Dkj ist ganzzahlig ⇒ Dkj ≤ l = Dij Weiter gilt, dass ein k ∈ Γ(i) mit Dkj = Dij − 1 = 2l − 2 existiert, also 0 0 gilt Dkj = l − 1 < l = Dij nach Lemma 9 a). Lemma 12. Betrachte ein beliebiges Paar disjunkter Knoten i, j ∈ V des Graphen G. • a) Dij ist gerade genau dann, wenn P • b) Dij ist ungerade genau dann, wenn 0 0 k∈Γ(i) P Dkj ≥ Dij · deg (i). 0 k∈Γ(i) 0 Dkj < Dij · deg (i). Proof. • Fall a) Dij ist gerade P P 0 0 0 ⇒ D ≥ kj k∈Γ(i) k∈Γ(i) Dij = deg(i)Dij . |{z} Lemma 11 a) • Fall b) Dij ist ungerade P P 0 0 0 ⇒ D ≤ kj k∈Γ(i) Dij − 1 = deg(i)Dij − 1. k∈Γ(i) |{z} Lemma 11 b) Die jeweilige Rückrichtung ergibt sich durch die Betrachtung der beiden komplementären Fälle. Eine alternative Herleitung, wie man die Parität der Dij bestimmen kann, ist in den zusätzlichen Materialien zur Vorlesung enthalten. Wir betrachten nun den Algorithmus APD, der die Distanzen Dij für alle Knotenpaare (i, j) für einen gegebenen ungerichteten Graphen G berechnet. Der Graph wird durch seine Adjazenzmatrix A repräsentiert. Satz 13. Der Algorithmus APD berechnet die Distanzmatrix D eines nKnoten Graphen G in Zeit O(mm(n) · log n) mit Hilfe der ganzzahligen Matrixmultiplikation, wobei die Einträge der Matrix nicht größer als O(n2 ) sind. 0 0 Proof. Sei δ der Durchmesser von G. Dann hat G Durchmesser δ = dδ/2e. Sei T (n, δ) die Zeit, die APD auf Graphen mit n Knoten und Durchmesser δ benötigt. Ist δ = 1, so ist G vollständig. Ist δ = 2, so ist T (n, δ) = mm(n) + O(n2 ). Wegen δ < n, mm(n) = Ω(n2 ) und Rekursionstiefe log n folgt die 0 Laufzeit O(mm(n) log n). Wegen Dij < n und somit Dij < n sind die Einträge von S durch n2 nach oben beschränkt. 14 Algorithm 4 APD 1: procedure APD(Adjazenzmatrix A) 2: Z = A2 3: berechne A mit . Aij = 1 ⇔ es ex. Weg der Länge 1 od. 2 v. i nach j 0 0 Aij = 1 gdw. i 6= j und (Aij = 1 oder Zij > 0) 4: 5: 0 0 if Aij = 1 ∀i 6= j then 0 return D = 2A − A 6: 7: end if 8: D = APD(A ) 9: 0 S =A·D . Rekursionsabbruch 0 . Rekursion P 0 . Sij = k∈Γ(i) Dkj 0 0 2D0 , falls Sij ≥ Dij Zii ij 10: return D mit Dij = 2D0 − 1, falls S < D0 Z ij ij ij ii 11: end procedure . Zii = deg(i) Das Zeugenproblem für Boolsche Matrizen Wir erweitern den Algorithmus APD nun so, dass nicht nur die Distanzen Dij , sondern auch für jedes Knotenpaar (i, j) ein kürzester Weg berechnet wird. Dabei soll die Laufzeit des neuen Algorithmus subkubisch sein. Das Problem ist dabei, dass es Graphen G = (V, E) von der Gestalt gibt, dass Ω(n2 ) Knotenpaare Distanz Ω(n) haben. Beispiel 14. G = (V, E) ist eine „Linie“: V = {1, ..., n}, E = {(i, i + 1)|1 ≤ i < n}. Setze δ = n 2 = Ω(n), dann haben n−δ X k= k=1 (n − δ + 1)(n − δ) n2 > = Ω(n2 ) 2 8 Knotenpaare mindestens den Abstand δ zueinander. Explizites Speichern der kürzesten Wege würde daher Platzbedarf Ω(n3 ), also auch Zeitaufwand Ω(n3 ), bedeuten. Daher werden die kürzesten Wege nur implizit gespeichert, indem zu jedem Knotenpaar (i, j) der Nachfolger Sij von i auf einem kürzesten Weg nach j gespeichert wird. S = (Sij ) hat O(n2 ) Einträge und ein kürzester Weg von i nach j kann in Zeit proportional zu seiner Länge bestimmt werden: SPN(S, i, j) x0 = i; k = 0; repeat xk+1 = Sxk ,j ; k + +; until (xk = j); return hx0 , ...xk i 15 Notation 15. Wir bezeichnen im Folgenden: • die boolsche1 Matrixmultiplikation mit ∧ als Multiplikation und ∨ als Addition durch „∗“ und • die ganzzahlige Matrixmultiplikation mit „·“. Definition 16. Es seien A, B ∈ {0, 1}n×n boolsche Matrizen, P = A ∗ B ∈ {0, 1}n×n das boolsche Produkt von A und B. Ein Zeuge für Pij ist ein Index k ∈ {1, ..., n} derart, dass Aik = 1 = Bkj . Bemerkung 17. a) Pij = 1 ⇔ es gibt einen Zeugen k für Pij . b) Ist C = A · B, so ist Cij die Anzahl der Zeugen für Pij . c) Ist A Adjazenzmatrix eines Graphen G(V, E), P = A ∗ A und C = AA, so ist Pij = 1 genau dann, wenn ein Weg der Länge 2 zwischen i und j existiert. Cij ist die Anzahl dieser Wege (vgl. Lemma 8). d) Für P = A ∗ A ist ein Zeuge k für Pij = 1 Zwischenknoten auf einem Weg der Länge 2 von i nach j. e) Für jedes Pij bzgl. P = A ∗ B kann es bis zu n Zeugen geben. Zeugen sind interessant, wenn man den APD-Algorithmus so erweitern will, dass er kürzeste Wege berechnet. Da Zeugen Zwischenknoten auf Wegen der Länge 2 darstellen, helfen sie bei der Konstruktion einer Nachfolgermatrix. Wie genau dies funktioniert, wird nachfolgend erläutert. Definition 18. Es seien A, B ∈ {0, 1}n×n boolsche Matrizen, P = A ∗ B ∈ {0, 1}n×n . Eine Zeugenmatrix ( Bpwm = Boolean Product Witness Matrix) für P ist eine Matrix W ∈ {0, ..., n}n×n mit 0, wenn P = 0 ij Wij = k, k ist Zeuge für P = 1 ij Problem Bpwm: • gegeben: boolsche Matrizen A und B. • gesucht: eine Zeugenmatrix W für P = A ∗ B. 1 Da diese Bezeichnung auf George Boole (1815-1864) zurückgeht, findet man auch häufig die Schreibweise boolesche Matrixmultiplikation. 16 Ein trivialer Algorithmus für Bpwm, der für alle (i, j) ∈ {1, ..., n}2 alle k ∈ {1, ..., n} testet, hat Zeitaufwand O(n3 ). Da wir einen niedrigeren Aufwand anstreben, vereinfachen wir zunächst das Problem Bpwm: Problem UniqueBpwm: • gegeben: boolsche Matrizen A und B, so dass jeder Eintrag in P = A∗B einen eindeutigen Zeugen hat. • gesucht: die Zeugenmatrix W für P = A ∗ B. Lemma 19. Es seien A, B ∈ {0, 1}n×n boolsche Matrizen und die Matrizen  und W gegeben durch Âik = kAik und W = ÂB. Dann gilt: a) Wij ist Zeuge für Pij , wenn Pij einen eindeutigen Zeugen hat. b) Hat jeder Eintrag von Pij einen eindeutigen Zeugen, so ist W die Lösung von UniqueBpwm. Proof. Es ist Wij = n X Âik Bkj = n X k · Aik Bkj k=1 k, falls genau ein Aik Bkj = 1 = 0, falls Aik Bkj = 0 ∀k > k, falls A B = 1 und A B = 1 für ein l 6= k. ik kj il lj k=1 Beispiel 20. 1 1 0 1 0 0 1 1 0 A = 1 0 0 , B = 1 1 0 , P = 1 0 0 . 0 0 0 0 0 0 0 0 0 1 2 0 3 2 0  = 1 0 0 und W = 1 0 0 . 0 0 0 0 0 0 Die grünen und blauen Einträge von W sind schon korrekte Einträge für eine Zeugenmatrix, der rote jedoch nicht. Folgerung 21. Das Problem UniqueBpwm kann durch eine ganzzahlige Matrixmultiplikation, also in Zeit O(mm(n)), gelöst werden. 17 Problematisch ist nun, dass wir eine Zeugenmatrix W für P = A ∗ A mit einer Adjazenzmatrix A berechnen wollen. Dabei ist natürlich nicht garantiert, dass die Zeugen immer eindeutig sind. Die Idee zur Lösung des Problems lässt sich so beschreiben: • Randomisierung liefert den gleichen Effekt wie eindeutige Zeugen für genügend viele Einträge Pij , denn bei einer zufälligen Auswahl von Kandidatenmengen trifft man wahrscheinlich auf eine Menge mit genau einem Zeugen. • Die wenigen verbleibenden Einträge werden dann mit dem trivialen Algorithmus berechnet. Nicht eindeutige Zeugen Wir betrachten boolsche Matrizen A, B ∈ {0, 1}n×n , P = A ∗ B, C = AB und einen festen Eintrag Pij von P . Es sei w = Cij die Anzahl der Zeugen für Pij (OE w ≥ 2, denn nach den Vorbetrachtungen ist es einfach, einen eindeutigen Zeugen zu finden). Außerdem sei r ∈ N mit n 2 ≤ wr ≤ n. Ziel ist es, eine Menge R ⊂ {1, ..., n} mit |R| zu finden, die den eindeutigen Zeugen k für Pij enthält. Lemma 22. Es sei n ∈ N, w ∈ {1, ..., n}, r ∈ N mit n 2 ≤ wr ≤ n. Eine Urne enthalte n Bälle, von denen w weiß und n − w schwarz sind. Zieht man zufällig r Bälle aus der Urne, ohne diese zwischendurch zurückzulegen, so ist: Pr[genau ein weißer Ball wurde gezogen] ≥ 1 2e Proof. Durch elementare Rechenoperationen kann die gesuchte Wahrscheinlichkeit wie folgt beschränkt werden: ¡w¢¡n−w¢ r! (n − w)! (n − r)! 1 ¡nr−1 ¢ = w (r − 1)! n! (n − w − r + 1)! r Ãw−1 ! Ãw−2 ! Y 1 Y = wr (n − r − j) n−i i=0 j=0 Ãw−2 ! wr Y n − r − j = n j=0 n − 1 − j Ãw−2 ! Y wr n − r − j − (w − j − 1) ≥ siehe * n j=0 n − 1 − j − (w − j − 1) Ãw−2 ! wr Y n − w − (r − 1) = n j=0 n−w 18 µ ¶w−1 wr r−1 = 1− n n−w µ ¶w−1 1 1 ≥ 1− siehe ** 2 w * Gilt faktorweise: a = n − r − j, b = n − 1 − j, c = w − j − 1. Dann ist a(b − c) ≥ b(a − c) ⇔ ac ≤ bc ⇔ a ≤ b. ** r−1 n−w ≤ 1 w ⇔ (r − 1)w ≤ n − w ⇔ rw ≤ n. Die letzte Ungleichung folgt von den Beobachtungen, dass wr/n ≥ 1/2 und (r − 1)/(n − w) ≤ 1/w, was aus der Annahme, dass n/2 ≤ wr ≤ n, folgt. Beispiel 23. n = 8, w = 3, n − w = 5. Einzig mögliche Wahl für r mit n 2 ≤ wr ≤ n ist r = 2: • 3 Möglichkeiten, genau 2 weiße Bälle zu ziehen • 10 Möglichkeiten, genau 2 schwarze Bälle zu ziehen • 15 Möglichkeiten, genau 1 weißen und 1 schwarzen Ball zu ziehen • 28 Möglichkeiten insgesamt Damit ist Pr[genau ein weißer Ball wurde gezogen] = 28−13 28 = 15 28 > 1 2 > 1 2e ≈ 0.184. Sei jetzt R ⊂ {1, ..., n} derart, dass R einen eindeutigen Zeugen für Pij enthält. R sei gegeben durch einen Vektor R ∈ {0, 1}n mit Rk = 1 genau dann, wenn k ∈ R. Definiere: • eine Matrix AR ∈ Nn×n durch AR 0 ik = kRk Aik und R • eine Matrix B R ∈ Nn×n durch Bkj = Rk Bkj 0 Weiterhin sind die Matrizen  mit Âik = kAik sowie B und W =  · B so wie bereits weiter oben verwendet. AR ist die Matrix, die aus  entsteht, indem jede Spalte von Â, die zu einem Element k ∈ / R gehört, durch eine Nullspalte ersetzt wird und jede andere Spalte k mit k multipliziert wird. B R ist die Matrix, die aus B entsteht, indem jede Zeile von B, die zu einem Element k∈ / R gehört, durch eine Nullzeile ersetzt wird. Lemma 24. Es seien A, B ∈ {0, 1}n×n boolsche Matrizen, AR und B R wie oben, W = AR · B R . Wenn Pij einen eindeutigen Zeugen in R hat, so ist Wij Zeuge für Pij . 19 Pn Pn R R Proof. Wij = (AR · B R )ij = k=1 k · Rk · Aik · Rk Bkj = k=1 Aik Bkj = P k∈R k · Aik · Bkj . Wenn R nur einen einzigen Zeugen enthält, folgt aus der Zeugeneigenschaft: Wij = k·Aik ·Bkj = k, wobei k der eindeutige Zeuge ist. Die weiteren Ideen, die zum fertigen Algorithmus führen, lassen sich so umschreiben: • W = AR B R liefert Zeugen für alle Einträge in P = A ∗ B, die einen eindeutigen Zeugen in R haben. • Nach Lemma 22 ist die Wahrscheinlichkeit dafür, dass eine zufällig gewählte Menge R der Größe |R| = r einen eindeutigen Zeugen für einen Eintrag von P mit w Zeugen enthält, größer oder gleich der Konstanten 1 , 2e wenn n 2 ≤ wr ≤ n ist. • Wir wählen O(log n) Mengen R zufällig aus. Damit wird es sehr unwahrscheinlich, dass für einen Eintrag von P kein Zeuge identifiziert wird. • Zeugen für die Einträge, für die kein Zeuge identifiziert wird, werden mit dem trivialen Algorithmus berechnet. • Da nicht alle Einträge von P die gleiche Anzahl Zeugen haben, müssen Mengen R mit verschiedenen Kardinalitäten r benutzt werden. Es reicht jedoch, für r die Zweierpotenzen zwischen 1 und n zu benutzen, da nur die Bedingung n 2 ≤ wr ≤ n erfüllt sein muss. Satz 25. Algorithmus Bpwm ist ein Las-Vegas-Algorithmus für Problem Bpwm mit erwarteter Laufzeit O(mm(n) log2 n). Proof. Die Initialisierung benötigt O(mm(n)) Zeit. Der Algorithmus durchläuft die innere Schleife O(log2 n)-mal und führt jedes Mal eine ganzzahlige Matrixmultiplikation von n × n Matrizen durch. Die anderen Operationen in der Schleife sind weniger zeitaufwändig. Die Laufzeit O(mm(n) log2 n) folgt, wenn nicht zu oft der triviale Algorithmus aufgerufen werden muss. • Beh.: Ist Pij = 1, so wird im randomisierten Teil des Algorithmus ein Zeuge mit Wahrscheinlichkeit ≥ 1 − 1 n gefunden. • Bew.: Sei w die Anzahl der Zeugen für Pij . Die äußere Schleife wird mindestens einmal mit einem Wert r mit n 2 ≤ wr ≤ n durchlaufen. In diesem Durchlauf ist die Wahrscheinlichkeit, dass R keinen eindeutigen Zeugen für Pij enthält, höchstens 1 − 1 2e nach Lemma 22. Damit ist die Wahrscheinlichkeit, dass kein Zeuge für Pij identifiziert wird höchstens (1 − 1 3.77 log n ) 2e ≤ n1 . 20 Algorithm 5 Bpwm 1: procedure Bpwm(Boolsche Matrizen A, B ∈ {0, 1}n×n ) 2: W = −AB . Wij < 0 ⇔ Zeuge für Pij muss noch gefunden werden 3: for t = 0, ..., blog nc do . teste alle Zweierpot. r = 2t zwischen 1 und n 4: r = 2t 5: Repeat d3.77 log ne times . für O(log n) Runden 6: Wähle R ⊆ {1, ..., n} mit |R| = r 7: berechne AR und B R 8: Z = AR B R 9: for all (i, j) do . teste, ob neuer Zeuge für Pij gefunden wurde if Wij < 0 und Zij ist Zeuge für Pij then 10: Wij = Zij 11: end if 12: 13: . vgl. Lemma 22 end for 14: 15: end for 16: for all (i, j) do 17: 18: 19: 20: 21: if Wij < 0 then . kein Zeuge für Pij gefunden berechne Wij mit dem trivialen Algorithmus end if end for end procedure 21 Damit ist die erwartete Anzahl der nicht gefundenen Zeugen begrenzt durch n – anstelle der ursprünglichen n2 . Somit benötigen alle Aufrufe des trivialen Algorithmus zusammen Zeit O(n2 ). Randomisierter Algorithmus Wir schließen das Thema in diesem Abschnitt mit der Beschreibung des randomisierten Algorithmus ab, der anhand einer Zeugenmatrix eine Nachfolgermatrix berechnet. Zuvor muss noch festgelegt werden, wie genau diese Nachfolgermatrix berechnet wird. Definition 26. Es sei G(V, E) ein Graph mit n Knoten. Eine Nachfolgermatrix S für G ist eine n × n-Matrix, so dass für alle i 6= j Sij ein Nachfolger von i ist, der auf einem kürzesten Weg von i nach j liegt. Weiter ist Sii = 0. Sei nun A die Adjazenzmatrix eines Graphen G(V, E), D die Distanzmatrix von G. Seien i, j ∈ {1, ..., n}, i 6= j beliebig mit Dij = d. Sij = k ist genau dann d möglich, wenn Dik = 1 und Dkj = d − 1. Sei B d ∈ {0, 1}n×n mit Bkj = 1 genau dann, wenn Dkj = d − 1 (B d kann aus D in Zeit O(n2 ) berechnet werden). Lemma 27. Es sei A Adjazenzmatrix eines Graphen G(V, E) und B d ∈ {0, 1}n×n wie oben definiert. Der Aufruf Bpwm(A, B d ) liefert für alle i, j mit Dij = d Einträge Sij einer Nachfolgermatrix S für G. Der Beweis von Lemma 27 ist dem Leser zur Übung empfohlen. Das Problem ist, dass es n mögliche Werte für d gibt. Damit wäre die Laufzeit eines Algorithmus mindestens Ω(nmm(n)) und somit superkubisch. Aber es reichen drei Berechnungen von Zeugenmatrizen aus, denn: • Für alle i, j und alle Nachfolger k von i gilt Dij − 1 ≤ Dkj ≤ Dij + 1. • Jeder Nachfolger k von i mit Dkj = Dij − 1 ist ein möglicher Eintrag für Sij . • Also: Jedes k mit Aik = 1 und Dkj ≡ Dij − 1 (mod 3) ist ein möglicher Eintrag für Sij . (s) • Für s = 0, 1, 2 definiere D(s) durch Dkj = 1 genau dann, wenn Dkj +1 ≡ s (mod 3). • Eine Nachfolgermatrix S von A kann dann aus den Zeugenmatrizen für A ∗ D(s) , s = 0, 1, 2 berechnet werden. Satz 28. Der Algorithmus Apsp berechnet eine Nachfolgermatrix eines Graphen G mit n Knoten in erwarteter Zeit O(mm(n) log2 n). 22 Algorithm 6 Apsp 1: procedure Apsp(Adjazenzmatrix A für G(V, E)) 2: berechne D = Apd(A) 3: for s = 0, 1, 2 do . D ist Distanzmatrix (s) berechne D(s) ∈ {0, 1}n×n derart, dass Dkj = 1 gdw. Dkj + 1 ≡ s 4: (mod 3) berechne eine Zeugenmatrix W (s) = Bpwm(A, D(s) ) 5: 6: end for 7: berechne Nachfolgematrix S mit Sij = Wij 8: (Dij (mod 3)) end procedure 2.2.3 Approximationsalgorithmen für APSP Wir betrachten zunächst das APD Problem auf gerichteten und ungewichteten Graphen. Es sei A die Adjazenzmatrix eines solchen Graphen G = (V, E). Kürzeste Wege in diesem Graphen haben somit Längen zwischen 1 und n − 1. Definition 29. Bezeichne Π ein Optimierungsproblem. Ein Algorithmus A heißt α-Approximationsalgorithmus, wenn Alg zu jeder Instanz I von Π eine zulässige, aber nicht notwendigerweise optimale Lösung berechnet, so dass RAlg (I) ≤ α wobei • RAlg (I) := Alg(I) , OPT(I) falls Π Minimierungsproblem • RAlg (I) := OPT(I) , Alg(I) falls Π Maximierungsproblem Hier bezeichnet Alg(I) den Wert der Lösung, die Alg für I berechnet und OPT(I) ist der Wert einer optimalen Lösung für I. (Beispiel: Rucksackproblem) Zur exakten Berechnung von APD: • Wir betrachten gerichtete und ungewichtete Graphen • Sei A die Adjazenzmatrix mit hinzugefügten Kanten (u, u) für alle Knoten u • Berechne Ak für alle k = 1, ..., n − 1 mittels Boolscher Matrixmultiplikation • Wenn Ak [u, v] = 1 und Ak−1 [u, v] = 0, dann gilt δ(u, v) = k. Das Problem hierbei ist, dass zu viele Matrixmultiplikationen durchgeführt werden müssen. Zur Approximation von APD: 23 • Wir betrachten gerichtete und ungewichtete Graphen • Sei A die Adjazenzmatrix mit hinzugefügten Kanten (u, u) für alle Knoten u • Berechne Ak für alle k = 1, ..., n − 1 mittels Boolscher Matrixmultiplikation • Wenn Ak [u, v] = 1 und Ak−1 [u, v] = 0, dann gilt δ(u, v) = k. Das Problem hierbei ist, dass zu viele Matrixmultiplikationen durchgeführt werden müssen. Zur Approximation von APD: • Wir betrachten gerichtete und ungewichtete Graphen • Sei A die Adjazenzmatrix mit hinzugefügten Kanten (u, u) für alle Knoten u ¨ § • Sei tk = (1 + ²)k für alle k, so dass tk ≤ n. • Berechne Matrizen Xk = Atk für k = 1, ..., O(log n/²) mittels Boolscher Matrixmultiplikation • Wenn Xk [u, v] = 1 und Xk−1 [u, v] = 0, dann wird δ(u, v) über tk abgeschätzt. § ¨ tk = (1 + ²)k , so dass tk ≤ n, um Atk zu berechnen benötigt man log tk Multiplikationen (A, A2 , A4 , ..., Atk ). Atk wird für alle k = 1, ..., Θ(log n/²) berechnet. k = Θ(log n/²) entspricht tk = n, denn: 1 (1 + ²)k = n ⇔ k · ln(1 + ²) = ln n. Für kleine ² gilt (1 + ²) ² ≈ e. D.h. k · ln(1 + ²) = ln n ⇔ k · ² ≈ ln n ⇔ k ≈ ln n . ² Zur Laufzeit: Die Gesamtlaufzeit für die Berechnung aller Atk für k = 1, ..., Θ(log n/²) ist Θ( log n | {z } Berechnung einesAtk · log n/² | {z } ). # Matrizen, die berechnet werden Zur Approximationsqualität/Korrektheit: Der Algorithmus gibt immer Distanzen aus, die größer oder gleich den tatsächlichen sind. Dabei werden die tatsächlichen Werte um höchstens einen Faktor 1 + ² überschätzt. Falls Xk [u, v] = 1 und Xk−1 [u, v] = 0 dann gilt: 24 δ(u, v) ≤ tk , aber δ(u, v) > tk−1 ⇒ (1 + ²)k−1 < δ(u, v) ≤ (1 + ²)k ⇒ δ(u, v) wird bis auf einen Faktor von (1 + ²) korrekt berechnet. Distanzprodukte: Wir betrachten zwei Matrizen A, B mit Einträgen aus {0, ..., M, ∞}. Das Distanzprodukt A zwischen und B ist eine Matrix P mit P [i, j] = mink A[i, k] + B[k, j]. Dieses Distanzprodukt kann in Zeit O(n3 ) berechnet werden. Wir werden außerdem zeigen, dass das Distanzprodukt für zwei Matrizen mit gegebenem maximalem Gewicht M in Zeit O(M · mm(n)) berechnet werden kann. Sei M · mm(n) kleiner als n3 (sonst verwende den trivialen Algorithmus). Idee zum Algorithmus Dist-Prod(A, B): 0 • Setze A [u, v] = (n + 1)M −A[u,v] wenn A[u, v] ≤ M , sonst 0. 0 • Setze B [u, v] = (n + 1)M −B[u,v] wenn B[u, v] ≤ M , sonst 0. 0 0 0 • Berechne das Produkt P = A · B . ¥ ¦ 0 0 • Setze P [u, v] = 2M − logn+1 P [u, v] , wenn P [u, v] > 0, sonst auf ∞. Zu zeigen: min{A[u, w] + B[w, j]} = P [u, v] w j k 0 = 2M − logn+1 P [u, v] Nun, 0 P [u, v] = X = X 0 0 A [u, w] · B [w, v] w 0 (n + 1)2M −A[u,w]−B[w,v] 0 Sei A[u, w ] + B[w , v] = minw {A[u, w] + B[w, v]} 0 0 ⇔ 2M − A[u, w ] − B[w , v] = max{2M − A[u, w] − B[w, v]} w Dann gilt: 0 X (n + 1)2M −A[u,w]−B[w,v] X 0 0 0 0 = (n + 1)2M −A[u,w ]−B[w ,v] · (n + 1)A[u,w ]+B[w ,v]−A[u,w]+B[w,v] P [u, v] = w 25 0 0 Da A[u, w ] + B[w , v] = minw {A[u, w] + B[w, v]}, gilt 0 0 A[u, w ] + B[w , v] − A[u, w] − B[w, v] ≤ 0, für alle w: ⇒ X 0 0 (n + 1)A[u,w ]+B[w ,v]−A[u,w]−B[w,v] ≤ n $w ⇒ % X logn+1 (n + 1)2M −A[u,w]−B[w,v] w ¥ ¦ 0 0 = 2M − A[u, w ] − B[w , v] + logn+1 n 0 0 = 2M − A[u, w ] + B[w , v] j k 0 0 0 ⇒ 2M − logn+1 P [u, v] = A[u, w ] + B[w , v] Zur Laufzeit Dist-Prod(A, B): • Es wird eine (Integer-)Matrixmultiplikation verwendet. • Es werden große Zahlen erzeugt: Die Einträge in der Matrix haben Θ(M log n) Bits. • Trivialer Multiplikationsalgorithmus benötigt Zeit Θ(M 2 log2 n). • Schönhage-Strassen Multiplikation in Zeit O(M log n log log n). • Gesamtzeit: O(mm(n) · M log2 n log log n) Approximation von Dist-Prod(A, B): • Skalierung der Gewichte • Kantengewichte des Graphen im Intervall {0, 1, ..., M } • Gewichte werden auf die Menge {0, 1, ..., R} skaliert • Man wendet Dist-Prod auf die skalierten Werte an Idee zum Algorithmus scale(A, Q, R): • Eingabe: Matrix A mit Einträgen aus der Menge der natürlichen Zahlen und die Zahlen Q und R(R ≤ Q) 0 • A [u, v] = dA[u, v] · R/Qe, wenn A[u, v] ≤ Q 0 • A [u, v] = ∞, wenn A[u, v] > Q 0 • Ausgabe: A (Laufzeit: O(n2 log Q) 26 Idee zum Algorithmus Approx-Dist-Prod(A, B, M, R): • Eingabe: Matrizen A, B, Schranke M und Parameter R(R ≤ M ) • Setze Matrix C überall auf ∞ • Durchlaufe alle r von blog Rc bis dlog M e – scale(A, 2r , R) – scale(B, 2r , R) 0 0 0 – C =Dist-Prod(A , B ) r 0 – C[u, v] = min{C[u, v], 2R C [u, v]} • Ausgabe C Wir zeigen: 4 )P [u, v] R 0 0 0 Wir wissen, dass C =Dist-Prod(A , B ) und daher: P [u, v] ≤ C[u, v] ≤ (1 + 0 0 0 C [u, v] = min{A [u, w] + B [w, v])} w » ¼ R A [u, w] = A[u, w] r oder ∞ 2 » ¼ R 0 B [w, v] = B[w, v] r oder ∞ 2 0 ⇒ es gibt ein r und w, sodass: » ¼ » ¼ 2r R R C[u, v] = ( A[u, w] r + B[w, v] r ) R 2 2 r 2 R (A[u, w] + B[w, v]) ≥ R 2r 0 0 ≥ minw0 {A[u, w ] + B[w , v]} = P [u, v] Nun zeigen wir: 4 ) R Wir nehmen o.B.d.A. an, dass A[u, w] ≤ B[w, v] für einen Zeugen w mit C[u, v] ≤ P [u, v](1 + P [u, v] = A[u, w] + B[w, v]. Sei 2s−1 < B[w, v] ≤ 2s mit s ≤ log M . Wir nehmen weiterhin an, dass log R, log M natürliche Zahlen sind. Falls s ≤ log R, dann gilt: 0 A [u, w] = A[u, w] 0 B [w, v] = B[w, v] 0 ⇒ C [u, v] = P [u, v] und 27 0 C[u, v] = C [u, v] Falls s > log R, dann betrachte man die Iteration, in der r = s. scale(A, 2r , R) und scale(B, 2r , R) berechnen die Matrizen ¼ » R R 0 A [u, w] = A[u, w r ] ≤ A[u, w] · r + 1 2 2 0 ⇒ A [u, w] · 2r 2r ≤ A[u, w] + R R Analog gilt: 0 B [w, v] ≤ B[w, v] · 0 und B [w, v] · ⇒ C[u, v] ≤ ≤ = ≤ = R +1 2r 2r 2r ≤ B[w, v] + R R 2r 0 0 [A [u, w] + B [w, v]] R 2r+1 A[u, w] + B[w, v] + R 2s−1 P [u, v] + 4 · R A[u, w] + B[w, v] P [u, v] + 4 R 4 P [u, v](1 + ) R Zur Laufzeit, Korrektheit von Approx-Dist-Prod(A, B, M, R): Es wird Zeit O(mm(n) · R log2 n log log n) für Dist-Prod per Iteration benötigt. Insgesamt gibt es O(log n) Iterationen, somit bleibt ein Rest von O(n2 log M ). Insgesamt ist die Laufzeit also: O(mm(n) log M · R log2 n log log n). Falls M und R Potenzen von 2 sind, A, B ∈ {0, ..., M, ∞}n×n , P Distanzprodukt von A und B und C Ausgabe von Approx-Dist-Prod, dann gilt: P [u, v] ≤ C[u, v] ≤ (1 + R4 )P [u, v]. Wir betrachten dabei R = O(log n). Invariante: Vor dem l-ten Schleifendurchlauf gilt: ∀u, v ∈ V Falls es einen Weg von u nach v der Länge ≤ 2l−1 gibt (Länge = Anzahl der Zwischenkanten), dann approximiert D[u, v] die Distanz δ(u, v) bis auf einen Faktor von (1 + 4 l−1 ) . R Wir zeigen, dass die Invariante gilt für alle l = 1, ..., log n + 1. Proof. Induktionsbeweis I.A. l = 1 Die Invariante gilt, da D = A. D.h. für jeden Weg der Länge 1 von u nach v: D[u, v] = A[u, v]. D[u, v] = δ(u, v) in dem Fall, dass alle Kantengewichte > 0 sind. I.V. Annahme: Die Invariante gilt vor dem l-ten Schleifendurchlauf. 28 I.S. l → l + 1 # Kanten auf dem kürzesten Weg von u nach v ist ≤ 2l . 1. Fall: # dieser Kanten ist ≤ 2l−1 , die Invariante gilt, wegen der I.V. 2. Fall: # dieser Kanten ist > 2l−1 . ∃w ∈ V , so dass # Kanten auf dem kürzesten Weg von u nach w ≤ 2l−1 und # Kanten auf dem kürzesten Weg von w nach v ≤ 2l−1 . Dann gilt: 4 ) (Wegen der Qualität von Approx-Dist-Prod.) R 4 4 4 0 ⇒ D [u, v] ≤ (δ(u, w) · (1 + )l−1 + δ(w, v)(1 + )l−1 ) · (1 + ) wegen der I.V. R R R 4 l ≤ δ(u, v)(1 + ) R 0 D [u, v] ≤ (D[u, w] + D[w, v])(1 + Nach Terminierung gilt D[u, v] ≤ δ(u, v) · (1 + R4 )log n . Für R = 4 log n ln(1+²) gilt: ln(1 + ²) log n ) log n log n ln(1 + ²) ln(1+²) ·ln(1+²) ≤ δ(u, v) · (1 + ) log n D[u, v] ≤ δ(u, v) · (1 + Für k → ∞ gilt: (1 + k1 )k = e. Daher gilt: D[u, v] ≤ δ(u, v) · eln(1+²) = δ(u, v)(1 + ²) Approximation der Distanzen • Effizienter Algorithmus für die Approximation des Distanzproduktes • Berechne An für das Distanzprodukt • Wiederholtes Quadrieren O(log n) Multiplikationen • Bei jeder Multiplikation: Approximationsqualität 1 log n Idee zum Algorithmus Approx-Dist(A, ²): • Eingabe: Matrix A ∈ {0, ..., M, ∞}n×n (keine Nulleinträge außerhalb der Diagonale) • Approximationsparameter ² • Setze R = 4 log n ln(1+²) 29 • Erhöhe R zur nächsten Zweierpotenz • Setze D = A • Weiderhole log n mal: 0 – D =Approx-Dist(D, D, M n, R) 0 – D[u, v] = min{D[u, v], D [u, v]} • Ausgabe D 30 Kapitel 3 Matchings in bipartiten Graphen 3.1 Grundlagen und Strukturaussagen Ein häufiges Problem in der Informatik ist es, eine Menge V2 von Bewerbern an eine höchstens gleich große Menge V1 von Jobs zuzuweisen. Die Struktur und Lösungsverfahren dieses Problems, das leicht abgewandelt in vielen Anwendungen auftritt, werden in diesem Kapitel behandelt. Definition 30. • Ein Graph G heißt bipartit genau dann, wenn seine Knotenmenge in zwei disjunkte Teilmengen zerlegt werden kann, in denen keine internen Kanten existieren: G = (V1 ∪ V2 , E) bipartit ⇔ V1 ∩ V2 = ∅ und E ⊆ V1 × V2 . • Ein Matching M ist eine Kantenmenge in G, bei der keine zwei Kanten einen Knoten gemeinsam haben. • Ein Matching M heißt nicht erweiterbar (engl.: maximal matching) genau dann, wenn jede Kante zu mindestens einer Kante aus M inzident ist: ∀(u, v) ∈ E ∃w ∈ V derart, dass (u, w) ∈ M oder (v, w) ∈ M . • Ein Matching M heißt größtmöglich oder maximal (engl.: maximum matching) genau dann, wenn |M | maximal unter allen Matchings in G. • Ein Knoten u heißt saturiert (von M ) genau dann, wenn es einen Knoten v gibt, so dass (u, v) ∈ M . • M ist perfektes Matching: M saturiert alle Knoten in G. 31 Abbildung 3.1: Von links nach rechts: Leeres Matching, nicht erweiterbares Matching sowie ein Matching, das größtmöglich und perfekt ist. Abbildung 3.2: Zwei Beispiele von nicht erweiterbaren, aber nicht größtmöglichen Matchings. Abbildung 3.1 illustriert die verschiedenen Arten von Matchings. Nicht erweiterbare Matchings müssen nicht zwangsläufig größtmöglich sein, wie Abbildung 3.2 zeigt. Umgekehrt ist ein größtmögliches Matching natürlich nicht erweiterbar. Bemerkung 31. Das Ersetzen der Matching-Kanten in Abbildung 3.2 (rechts) durch Kanten, die nicht zum Matching gehören, (und umgekehrt natürlich) erzeugt ein größeres Matching. Diese Beobachtung kann als mögliche Strategie zur Vergrößerung von Matchings dienen. In der Folge versuchen wir, die oben formulierte Strategie zu formalisieren. Definition 32. Sei M ein Matching in G = (V1 ∪ V2 , E). Ein M alternierender Pfad ist ein Pfad P = (u1 , v1 , u2 , v2 , ..., uk , vk ) oder P = (u1 , v1 , u2 , v2 , ..., uk , vk , uk+1 ) mit (ui , vi ) ∈ M für alle i oder (vi , ui+1 ) ∈ M für alle i. Ein M -alternierender Pfad mit unsaturierten Endknoten heißt M augmentierender Pfad. Der Name alternierend rührt natürlich daher, dass in einem M alternierenden Pfad beim Ablaufen der Kanten sich solche abwechseln, die zu M gehören und solche, die nicht zu M gehören. Dies ergibt sich direkt aus den obigen Definitionen. Bemerkung 33. Hat man einen M -augmentierender Pfad P , ersetzt man die Kanten aus P ∩ M durch die Kanten aus P \M und erhält ein Matching 32 mit einer Kante mehr. Daraus folgt sofort, dass kein M -augmentierender Pfad exisitieren kann, wenn M nicht erweiterbar ist. Um die Folgerung in Bemerkung 33 auch für die zweite logische Richtung beweisen zu können, definieren wir zunächst die symmetrische Differenz zweier Graphen bzw. Mengen. Definition 34. Seien G = (V, EG ) und H = (V, EH ) zwei Graphen mit derselben Knotenmenge V . Die symmetrische Differenz G∆H ist ein Graph mit der Knotenmenge V und der Kantenmenge E = {e|e ∈ EG XOR e ∈ EH }. 0 Satz 35. Seien M und M zwei Matchings in G = (V1 ∪ V2 , E). Jede Zusam0 menhangskomponente von M ∆M ist entweder ein Pfad oder ein Kreis gerader Länge. 0 0 0 Proof. Seien M und M Matchings und sei F = M ∆M . Da M und M Matchings sind, hat jeder Knoten höchstens eine inzidente Kante aus M bzw. 0 M . Daraus folgt, dass F höchstens zwei Kanten an jedem Knoten hat. Da ∆(F ) ≤ 2 gilt (∆(F ) bezeichnet den maximalen Knotengrad von F ), ist jede Zusammenhangskomponente von F entweder ein Pfad oder ein Kreis. Außerdem alterniert jeder Pfad bzw. Kreis in F zwischen den Kanten von M − M 0 0 und den Kanten von M − M . Somit hat jeder Kreis gerade Länge, mit gleicher 0 Anzahl Kanten von M und von M . Satz 36. Ein Matching M ist ein größtmögliches Matching in einem Graphen G = (V1 ∪V2 , E) genau dann, wenn G keinen M -augmentierenden Pfad enthält. Proof. Wir zeigen die Kontraposition aller Richtungen. G hat ein größeres Matching als M dann und nur dann, wenn G einen M -augmentierenden Pfad besitzt. Wir haben bereits gesehen, dass ein M -augmentierender Pfad dazu benutzt werden kann, ein größeres Matching als M zu produzieren. 0 Umgekehrt sei M ein größeres Matching als M in G. Wir konstruieren 0 einen M -augmentierenden Pfad. Sei F = M ∆M , nach Lemma 35 besteht F aus Pfaden und geraden Kreisen. Diese Kreise haben die gleiche Anzahl Kanten 0 0 von M und M . Da |M | > |M |, muss F eine Zusammenhangskomponente mit 0 mehr Kanten aus M als aus M haben. Solch eine Komponente kann nur ein 0 Pfad sein, der mit einer Kante aus M beginnt und endet, somit ist dieser Pfad aber ein M -augmentierender Pfad in G. Satz 37. (Halls Theorem) Sei G = (V1 ∪V2 , E) ein bipartiter Graph. Bezeichne N (S) die Menge von Knoten, die einen Nachbarn in S haben. In G gibt es ein Matching M , das jeden Knoten von V1 saturiert, genau dann, wenn |N (S)| ≥ |S| für alle S ⊆ V1 . 33 Proof. Notwendigkeit (⇒): Die |S| Knoten, die zu S gematcht wurden, müssen in N (S) liegen. Hinlänglichkeit (⇐): Um zu zeigen, dass Halls Bedingung ∀S ⊆ V1 , |N (S)| ≥ |S| hinreichend ist, zeigen wir die Kontrapsoition. Wenn M ein größtmögliches Matching in G ist und M saturiert nicht die Knotenmenge V1 , dann erhalten wir eine Menge S ⊆ V1 , so dass |N (S)| < S: Sei u ∈ V1 ein Knoten, der in M nicht saturiert ist. Unter allen Knoten, die von u aus durch M -alternierende Pfade des Graphen G erreichbar sind, bestehe S aus derartigen Knoten der Menge V1 und T aus solchen der Menge V2 (siehe hierzu Abbildung 3.3). Beachte, dass u ∈ S. Wir behaupten, dass Abbildung 3.3: Beispiel zu Halls Theorem, Satz 37. M die Knoten aus T mit denen aus S − {u} matcht. Der M -alternierende Pfad erreicht V2 über Kanten, die nicht in M sind und kehrt zurück zu V1 über Kanten, die in M liegen. Also wird jeder Knoten der Menge S − {u} über eine Kante aus M von einem Knoten in T erreicht. Da es keinen M augmentierenden Pfad gibt, ist jeder Knoten aus T saturiert. Somit wird ein M -alternierender Pfad, der y ∈ T erreicht, über M zu einem Knoten aus S erweitert. Insofern ergeben diese Kanten aus M eine Bijektion von T nach S − {u} und wir wissen, dass |T | = |S − {u}| gilt. Das Matching zwischen T und S − {u} ergibt außerdem T ⊆ N (S). Tatsächlich gilt T = N (S). Angenommen y ∈ V2 − T hat einen Nachbarn v ∈ S. Die Kante (v, y) kann nicht in M liegen, da u unsaturiert ist und und der Rest der Menge S ist zu T zugehörig über das Matching M . Deshalb ergibt das Hinzufügen der Kante (v, y) zu einem M -alternierenden Pfad, der v erreicht, einen M -alternierenden Pfad nach y. Dies widerspricht aber der Annahme, dass y∈ / T und somit kann eine Kante (v, y) auch nicht existieren. Mit T = N (s) haben wir gezeigt, dass |N (S)| = |T | = |S| − 1 < |S| für diese Wahl von S. Dies schließt den Beweis der Kontraposition ab. Bemerkung 38. Falls ein bipartiter Graph G = (V 1 ∪ V 2, E) kein Matching hat, das V1 saturiert, lässt sich dies mit Halls Theorem leicht nachweisen. 34 Dazu zeigt man einfach die Existenz einer Teilmenge von V1 mit zu wenigen Nachbarn in V2 . Ein klassisches Anwendungsbeispiel ist die Besetzung von |X| Jobs durch Bewerber aus einer Menge Y . Falls |Y | > |X|, erhält natürlich nicht jeder Bewerber einen Job. Es kann aber eben auch passieren, dass nicht jeder Job besetzt werden kann, weil X nicht saturierbar ist. Satz 39. Für k > 0 hat jeder k-reguläre bipartite Graph ein perfektes Matching. Proof. Sei G = (V1 ∪ V2 , E) ein k-regulärer, bipartiter Graph. Zählt man die Kanten nach Endpunkten in V1 und nach Endpunkten in V2 , sieht man, dass k|V1 | = k|V2 |, also |V1 | = |V2 |. Somit reicht es aus, Halls Bedingung zu überprüfen. Ein Matching, das V1 saturiert, wird auch V2 saturieren und wird zudem auch ein perfektes Matching sein. Sei S ⊆ V1 . Sei weiterhin m die Anzahl der Kanten von S nach N (S). Da G ein k-regulärer Graph ist, gilt m = k|S|. Diese m Kanten sind inzident zu N (S) und somit ist m ≤ k|N (S)|. Daher gilt k|S| ≤ k|N (S)|. Daraus ergibt sich, dass |N (S)| ≥ |S|, wenn k > 0. Mit der beliebigen Wahl von S ⊆ X haben wir die Gültigkeit von Halls Bedingung erfolgreich nachgewiesen. Definition 40. Eine Knotenüberdeckung eines Graphen G = (V, E) ist eine Menge Q ⊆ V derart, dass jede Kante aus E inzident zu mindestens einem Knoten aus Q ist. Eine minimale Knotenüberdeckung von G ist eine Knotenüberdeckung mit minimaler Anzahl von Knoten unter allen Knotenüberdeckungen von G. Satz 41. (Satz von König und Egerváry) Sei G = (V1 ∪ V2 , E) ein bipartiter Graph. Ferner sei M ein größtmögliches Matching und Q eine minimale Knotenüberdeckung in G. Dann gilt: |Q| = |M |. Proof. Sei G = (V1 ∪ V2 , E) ein bipartiter Graph. Es ist leicht einzusehen, dass immer |Q| ≥ |M | gelten muss. Andernfalls gäbe es eine Kante in M , die von Q nicht überdeckt wäre, weil ein Knoten in Q nur höchstens eine Kante aus M überdecken kann. Gegeben sei daher nun eine minimale Knotenüberdeckung Q von G. Dann können wir ein Matching der Größe |Q| konstruieren, um zu zeigen, dass die Gleichheit immer erreicht werden kann. Wir partitionieren Q durch R = Q∩V1 0 und T = Q∩V2 . Seien H und H die Teilgraphen von G, die durch R ∪(V2 −T ) 35 und T ∪(V1 −R) induziert werden. Wir wenden Halls Theorem an, um zu zeigen, 0 dass H ein Matching hat, das R in V2 − T saturiert und dass H ein Matching 0 hat, das T saturiert. Weil H und H disjunkt sind, bilden die beiden Matchings zusammen ein Matching der Größe |Q| in G. Da R ∪ T eine Knotenüberdeckung ist, hat G keine Kante zwischen V2 − T und V1 − R (andernfalls wären diese Kanten nicht überdeckt). Für jedes S ⊆ R betrachten wir NH (S), welches in V2 − T enthalten ist. Gälte |NH (S)| < |S|, dann könnten wir S durch NH (S) in Q ersetzen, um eine kleinere Knotenüberdeckung zu erhalten, da NH (S) alle Kanten überdeckt, die zu S inzident sind und die nicht von T überdeckt werden. Die Minimalität von Q ergibt somit Halls Bedingung für H und daher hat 0 H ein Matching, das R saturiert. Wendet man dasselbe Argument auf H an, ergibt sich das Matching, das T saturiert. Betrachte hierzu auch Abbildung 3.4. Abbildung 3.4: Beispiel zu Satz 41 3.2 Berechnung von größtmöglichen Matchings Satz 42. Sei G = (V1 ∪ V2 , E) ein bipartiter Graph und sei M ein Matching in G. Falls es einen M -augmentierenden Pfad gibt, der ein Matching M1 mit |M1 | > |M | erzeugt, und es einen Knoten v als Endknoten eines M1 augmentierenden Pfades gibt, dann gibt es auch einen M -augmentierenden Pfad mit v als Endknoten. Proof. Zum Zwecke des Widerspruchs nehmen wir an, dass G einen augmentierenden Pfad bezüglich M1 enthält, der v als Endknoten hat, aber G keinen augmentierenden Pfad bezüglich M hat, der v als Endknoten enthält. Sei P = hv = u1 , u2 , ..., un i ein augmentierender Pfad bezüglich M1 und wir nehmen zusätzlich an, dass wir M1 durch das Erweitern von M entlang 36 des augmentierenden Pfades Q = hv1 , v2 , ..., vk i bezüglich M erhalten. Dann ist P aufgrund der Annahme kein augmentierender Pfad bezüglich M . Somit enthält P eine Kante, die zu M1 gehört, aber nicht zu M . Sei nun i der kleinste ganzzahlige Wert derart, dass (u2i , u2i+1 ) ∈ M1 − M . Die Kante (u2i , u2i+1 ) liegt sowohl auf P als auch auf Q (siehe Abbildung 3.5), weil M1 durch die Erweiterung von Q entstanden ist. Der Knoten u2i ist ein saturierter Knoten 0 bezüglich M , denn andernfalls wäre P = hv = u1 , u2 , ..., u2i i ein augmentierender Pfad bezüglich M , der v als Endknoten hat. Aus diesen Gründen ist (u2i , u2i+1 ) ∈ E(Q) − M und u2i inzident mit der Kante e aus Q, die zu M gehört. Sei u2i = vj mit 1 < j < k. Da (u2i , u2i+1 ) ∈ E(Q) − M , muss e = (vj−1 , vj ) gelten. 0 Der Pfad Q = hv1 , v2 , ..., vj−1 , vj i ist ein alternierender Pfad bezüglich M , 0 der genau einen unsaturierten Knoten enthält, nämlich v1 . Die Kanten aus Q , die noch nicht im Matching bezüglich M enthalten sind, werden dem Matching hinzugefügt (bezüglich M1 ), wenn wir M entlang Q erweitern. Es folgt aus der 0 0 Konstruktion, dass Q und P nur den Knoten vj = u2i gemeinsam haben. Allerdings ist hv = u1 , u2 , ..., u2i , vj−1 , vj−2 , ..., v1 i ein augmentierender Pfad bezüglich M (betrachte hierzu auch Abbildung 3.5). Aber dies widerspricht der Annahme. Abbildung 3.5: Ein augmentierender Pfad, der im Satz 42 konstruiert wurde 37 Folgerung 43. Sei M ein Matching in einem bipartiten Graphen G. Ferner sei M = M1 , M2 , ..., Mk eine Sequenz von Matchings, wobei Mi+1 aus Mi durch einen Mi -augmentierenden Pfad erzeugt wird, für alle i = 1, ..., k − 1. Sollte für einen Knoten v kein M -augmentierender Pfad existieren, dann gibt es auch keinen Mi -augmentierenden Pfad mit v als Endknoten (i = 1, ..., k − 1). Wir betrachten nun den Algorithmus MaximumMatching, der ein größtmögliches Matching M für einen bipartiten Graphen G = (V1 ∪ V2 , E), mit p = |V1 | ≤ |V2 | = q, berechnet. Die Algorithmus-Idee kann wie folgt zusammengefasst werden: • Sei M initiales Matching. Falls M kein größtmögliches Matching ist, dann gibt es eine Sequenz M = M1 , ..., Mk , so dass – Mk größtmögliches Matching – Mi+1 wird aus Mi mit Hilfe eines Mi -augmentierenden Pfades erzeugt • Wir wählen einen Knoten v, der bzgl. M unsaturiert ist, und bestimmen, ob es einen M -augmentierenden Pfad gibt, in dem V der Endknoten ist • Falls ein solcher Pfad gefunden wird, wird M zu M 0 erweitert; wir erhalten dadurch ein größeres Matching • Falls v kein Endpunkt von irgendeinem M -augmentierenden Pfad ist, dann hat v in einem größtmöglichen Matching Mk , das durch Erweitern des Matchings M entsteht, gemäß Folgerung 43 keinen Matchingpartner Weitere Erklärungen und Hinweise finden Sie in den Vorlesungsfolien bzw. im Buch [2]. 3.3 Matchings mit maximalem Gewicht In diesem Abschnitt werden wir den sogenannten ungarischen Algorithmus kennenlernen, der in vollständigen gewichteten bipartiten Graphen ein Matching maximalen Gewichts findet. Details bisher nur auf den Folien oder in den Büchern [1] und [2]. 3.3.1 Korrektheit Satz 44. Sei G = (V1 ∪ V2 , E) ein vollständiger gewichteter bipartiter Graph. Dann findet der Algorithmus MaximumWeightMatching (auch Algorith38 Algorithm 7 MaximumMatching 1: procedure MaximumMatching(Bipartiter Graph G = (V1 ∪ V2 , E), Initiales Matching M1 ) 2: i = 1, M = M1 3: if i ≥ p then return M 4: end if 5: if vi ∈ M then goto line 3 6: else{v = vi , Q = {v}} . M größtmögliches Matching forall v ∈ V1 ∪ V2 , v 6= vi {T REE(vj ) = F ALSE}; T REE(vi ) = 7: T RU E; 8: if Q = ∅ then {i = i + 1, goto line 3} 9: else extract a vertex x from Q 10: Let N (x) = {y1 , ..., yj }. Set j = 1 11: if j ≤ k then y = yj 12: else goto line 8 13: end if 14: end if 15: if T REE(y) = T RU E then {j = j + 1, goto line 11} 16: end if 17: if (y, z) ∈ M then {T REE(y) = T RU E, T REE(z) = T RU E, P AREN T (y) = P AREN T (z) = y, Q = Q ∪ {z}, j = j + 1, goto line 11} 18: end if 19: Use P AREN T to determine M -augmenting path P from v to y 20: end if 21: Augment M along P to obtain new matching M 22: M = M , i = i + 1, goto line 3 23: 0 end procedure 39 0 Algorithm 8 MaximumWeightMatching 1: procedure MaximumWeightMatching(Vollst. bipartiter Graph G = (V1 ∪ V2 , E), Gewichtsfkt. w) 2: forall v ∈ V1 sei l(v) = maxu∈V2 w(v, u); 3: forall u ∈ V2 sei l(u) = 0; 4: Sei Hl der von l definierte Graph mit Kantenmenge El ; 5: M = MaximumMatching(Hl , ∅); 6: if M saturiert jeden Knoten von V1 then return M ; 7: else 8: Sei x der erste unsaturierte Knoten in V1 ; 9: Konstruiere einen alternierenden Baum T mit Wurzel x bzgl. M ; 10: if ∃ M -augmentierender Pfad P then 11: Erweitere M ; 12: goto line 6; 13: else 14: ml = min{l(v) + l(u) − w(u, v) | v ∈ V1 ∩ T, u ∈ V2 \ T }; 15: l(v) = l(v) − ml für v ∈ V1 ∩ T , l(u) = l(u) + ml für u ∈ V2 ∩ T ; 16: Konstruiere Hl ; 17: goto line 9; 18: 19: 20: end if end if end procedure 40 mus von Kuhn und Munkres oder ungarischer Algorithmus genannt) ein Matching mit maximalem Gewicht in G. Proof. Der Algorithmus beginnt mit einer zulässigen Knotenmarkierung. Er kann nur terminieren, wenn der Spanngraph Hl ein perfektes Matching hat. Diese Eigenschaft garantiert uns, dass die Knotenmarkierung und das Matching das gleiche Gewicht haben. Nehmen wir an, l sei die aktuelle zulässige Knotenmarkierung und der zugehörige Spanngraph Hl enthalte kein perfektes Matching. Sei l0 die daraufhin erstellte neue Knotenmarkierung. Da ml das Minimum einer nicht-leeren endlichen Menge von positiven Zahlen ist, gilt ml > 0. Wir weisen zunächst nach, dass l0 eine zulässige Knotenmarkierung ist. Die Veränderung der Markierungen auf Knoten der Mengen V1 ∩ V (T ) und V2 ∩ V (T ) ergibt l0 (v) + l0 (u) = l(v) + l(u) für Kanten zwischen V1 ∩ V (T ) und V2 ∩ V (T ). Daher bleiben die Kanten in Hl0 erhalten. Falls v ∈ V1 ∩ V (T ) und u ∈ V2 \V (T ), gilt l0 (v) + l0 (u) = l(v) + l(u) − ml , was wegen der Wahl von ml mindestens so groß ist wie wu,v . Der Algorithmus terminiert nur, wenn der Spanngraph Hl ein perfektes Matching enthält, so dass es genügt zu zeigen, dass die Terminierung tatsächlich eintritt. Nehmen wir an, die Kantengewichte wu,v seien rational. Wenn wir die Gewichte mit ihrem Hauptnenner multiplizieren, erhalten wir ein äquivalentes Problem mit ganzzahligen Gewichten. Wir können daher nun auch annehmen, dass die Markierungen in l ganzzahlig sind. Daher ist jeder Überschusswert ml auch ganzzahlig und in jeder Iteration reduzieren wir die Kosten der Knotenmarkierung um einen positiven ganzzahligen Betrag. Da wir bei einem endlichen Wert starten und die Kosten nach unten beschränkt sind (nämlich durch die Kosten eines perfekten Matchings), terminiert der Algorithmus nach endlichen vielen Iterationen. Bemerkung 45. Der Beweis von Satz 44 kann so modifiziert werden, dass auch reellwertige Kantengewichte zugelassen werden können. 41 Kapitel 4 Matchings in allgemeinen Graphen Wir haben bis jetzt Matchings in bipartiten Graphen betrachtet. Es folgt nun ein Abschnitt, in dem wir uns mit allgemeinen Graphen befassen werden. 4.1 Der Algorithmus von Edmonds Der Algorithmus von Edmonds berechnet ein größtmögliches Matching in allgemeinen Graphen. Bisher ist seine Darstellung nur im Foliensatz verfügbar. 4.2 Approximationsalgorithmen für MWM In diesem Abschnitt werden zwei Approximationsalgorithmen für das Problem MaximumWeightedMatching in allgemeinen Graphen behandelt. Beide Algorithmen haben die Approximationsgüte 2, wie wir in den folgenden Resultaten beweisen werden. Die Darstellung der Algorithmen findet sich im Foliensatz. Satz 46. Sei G = (V, E) ein Graph mit nicht-negativen Kantengewichten und sei M ∗ ein Matching mit maximalem Gewicht in G. GreedyApproxMWM berechnet ein Matching M mit w(M ∗ ) ≤ 2w(M ) in Zeit O(m log m). Proof. Sei x das Gewicht der ersten Kante e = {u, v}, die durch den Algorithmus GreedyApproxMWM ausgewählt wird. Offensichtlich ist e eine Kante mit maximalem Gewicht in G. Wenn e und alle inzidenten Kanten gelöscht werden, werden dabei höchstens zwei Kanten des optimalen Matchings M ∗ entfernt. Die Summe der Gewichte dieser beiden Kanten beträgt höchstens 2x. Bei der Wahl der nächsten Kante e0 gilt entweder e0 ∈ M ∗ oder es gibt keine Kante mehr in M ∗ , die schwerer als e0 ist. Daher gilt jedes Mal, wenn ein oder zwei Kanten des optimalen Matchings aus E gelöscht werden, die nicht 42 in M aufgenommen worden sind, dass die gewählte Kante in M mindestens halb so schwer ist wie die beiden gelöschten Kanten aus M ∗ zusammen. Dieses Argument lässt sich für alle weiteren Iterationen von GreedyApproxMWM wiederholen. Da alle Kantengewichte nicht negativ sind, folgt die Behauptung zur Approximationsgüte. Die Laufzeit ergibt sich durch die initiale Sortierung der Kanten nach ihrem Gewicht, weil die Schleife jede Kante genau einmal betrachtet und daher nur lineare Laufzeit in |E| hat. Die folgenden Ergebnisse beruhen auf einer Arbeit von D. E. Drake und S. Hougardy [6]. Satz 47. Der Algorithmus PathGrowingMWM hat eine Laufzeit von O(|E|). Proof. Jeder Knoten des Graphen wird höchstens einmal in der while-Schleife in den Zeilen 4-10 bearbeitet, denn nach seiner Bearbeitung wird er in Zeile 8 aus G entfernt. Die schwerste Kante, die zu einem Knoten x inzident ist, zu finden und x aus G zu entfernen, lässt sich problemlos mit einem Aufwand durchführen, der proportional zum Grad von x ist. Indem man Pfade immer nur von Endknoten einer Kante startet, stellt man sicher, dass keine Knoten mit Grad 0 bearbeitet werden. Die Zahl der Knoten mit Grad mindestens 1 in G ist O(|E|). Daher ist die Gesamtlaufzeit des Algorithmus PathGrowingMWM beschränkt durch die Summe der Knotengrade der Knoten in V , was O(|E|) ergibt. Satz 48. Der Algorithmus PathGrowingMWM hat eine Approximationsgüte von 2, d. h. das von ihm gefundene Matching ist mindestens halb so schwer wie ein Matching mit maximalem Gewicht. Proof. Für die Analyse der Güte weisen wir jede Kante des Graphen G an einen Knoten von G folgendermaßen zu. Immer wenn ein Knoten x in Zeile 8 des Algorithmus entfernt wird, werden alle Kanten, die noch zu x inzident sind, zu x zugewiesen. Auf diese Weise wird jede Kante von G genau einem Knoten von G zugewiesen. Andererseits muss nicht jeder Knoten von G ihm zugewiesene Kanten haben. Wir betrachten nun ein MWM M von G. Da M keine zwei zueinander inzidente Kanten haben kann, werden alle Kanten von M an verschiedene Knoten von G zugewiesen. In jedem Schritt des Algorithmus wird die aktuell schwerste Kante, die zu x inzident ist, in Zeile 5 gewählt und zu M1 oder M2 hinzugefügt. Daher ist das Gewicht von M1 ∪ M2 mindestens so groß wie das 43 Gewicht von M . Da 1 1 max{w(M1 ), w(M2 )} ≥ w(M1 ∪ M2 ) ≥ w(M ), 2 2 liefert der Algorithmus PathGrowingMWM ein Matching, das mindestens halb so schwer ist wie das Optimum. 4.3 Die Theoreme von Tutte und Petersen Definition 49. Ein Faktor F eines Graphen G ist ein Spanngraph von G, d. h. F und G haben dieselbe Knotenmenge und E(F ) ⊆ E(G). Ein k-Faktor ist ein k-regulärer Spanngraph. Eine ungerade Komponente ( odd component) eines Graphen ist eine (Zusammenhangs)Komponente mit einer ungeraden Anzahl von Knoten. Die Anzahl ungerader Komponenten von H wird mit o(H) notiert. Bemerkung 50. Ein 1-Faktor und ein perfektes Matching sind fast dasselbe. Die genaue Unterscheidung ist, dass ein 1-Faktor ein 1-regulärer Spanngraph von G ist, während ein perfektes Matching die Menge von Kanten in einem solchen Spanngraph ist. Ein 3-regulärer Graph, für den es ein perfektes Matching gibt, kann in zwei Teilgraphen zerlegt werden, von denen einer ein 1-Faktor und einer ein 2-Faktor ist. Tutte hat eine notwendige und hinreichende Bedingung dafür gefunden, wann Graphen einen 1-Faktor haben. Wenn G einen 1-Faktor hat und wir betrachten die Teilmenge S ⊆ V (G), dann hat jede ungerade Komponente von G−S einen Knoten, der einen Matching-Partner außerhalb dieser Komponente hat und daher nur zu S gehören kann, da die Knoten von S disjunkt sein müssen, o(G − S) ≤ |S|. Betrachte hierzu auch Abbildung 4.1. Tuttes Bedingung: Abbildung 4.1: Tuttes Bedingung Für alle S ⊆ V (G), o(G − S) ≤ |S|. Tutte hat bewiesen, dass diese Bedingung nicht nur notwendig ist, sondern auch hinreichend. Es gibt viele Beweise, die 44 dies zeigen. Wir betrachten hier den Beweis von Lovász und benutzen Ideen der symmetrischen Differenz. Satz 51. Ein Graph G hat einen 1-Faktor dann und nur dann, wenn o(G − S) ≤ |S| für jede Teilmenge S ⊆ V (G). Proof. Notwendigkeit (⇒): Die ungeraden Komponenten von G − S müssen Knoten haben, die zu disjunkten Knoten von S gematcht sind. Hinlänglichkeit (⇐): Wenn wir eine Kante hinzufügen, die zwei Komponenten aus G − S verbindet, steigt die Anzahl der ungeraden Komponenten nicht (eine gerade und eine ungerade Komponete werden zu einer ungeraden Komponente, zwei Komponenten derselben Parität bilden eine gerade Komponente). Somit bleibt Tuttes Bedingung erhalten, wenn Kanten hinzugefügt 0 0 werden: wenn G = G + {e} und S ⊆ V (G), dann o(G − S) ≤ o(G − S) ≤ |S|. 0 Außerdem hat G keinen 1-Faktor, wenn G = G + {e} keinen 1-Faktor hat. Somit gilt der Satz von Tutte, falls es keinen simplen Graphen G derart gibt, dass G Tuttes Bedingung erfüllt, G keinen 1-Faktor hat und das Hinzufügen einer fehlenden Kante zu G einen Graphen mit 1-Faktor ergeben würde. Sei G ein solcher Graph. Wir führen den Beweis nun per Widerspruch, indem wir zeigen, dass G einen 1-Faktor besitzt. Sei U die Menge von Knoten in G, die Grad n(G) − 1 haben. 1. Fall: G − U besteht aus vollständigen disjunkten Graphen. In diesem Fall können die Knoten in jeder Komponente von G−U zu beliebigen Paaren zusammengefasst werden. Da o(G − U ) ≤ |U | und jeder Knoten aus U zu jedem Knoten aus G − U adjazent ist, können wir die übrig gebliebenen Knoten mit Knoten aus U “matchen”. Wenn wir Tuttes Bedingung auf S = ∅ anwenden, ergibt sich, dass n(G) gerade sein muss, denn ein Graph ungerader Größe enthielte eine ungerade Komponente und würde Tuttes Bedingung verletzen. Weiterhin liegen die Knoten, die übrig bleiben, in U und bilden eine Clique. Um den 1-Faktor zu erhalten, müssen wir nur noch zeigen, dass eine gerade Menge von Knoten in U übrig geblieben ist. Tatsächlich haben wir eine gerade Anzahl Knoten “gemtached” und da n(G) gerade ist, bleibt eine gerade Anzahl von Knoten in U übrig. Siehe auch Abbildung 4.2. 2. Fall: G − U ist keine disjunkte Vereinigung von Cliquen. In diesem Fall hat G − U zwei Knoten mit der Distanz 2, diese sind nichtadjazente Knoten x, z mit einem gemeinsamen Nachbarn y ∈ / U . Zusätzlich hat G − U einen anderen Knoten w, der nicht adjazent zu y ist, da y ∈ / U . Nach Konstruktion von G führt das Addieren einer Kante zu G zu einem 1-Faktor. Seien M1 und M2 1-Faktoren in G + {xz} bzw. G + {yw}. Es reicht aus zu 45 Abbildung 4.2: Skizze zum 1. Fall des Beweises zeigen, dass M1 ∆M2 einen 1-Faktor enthält, der xz und yw nicht enthält, denn dies ist der für den Widerspruch gewünschte 1-Faktor in G. Sei F = M1 ∆M2 . Da xz ∈ M1 − M2 und yw ∈ M2 − M1 , sind sowohl xz als auch yw in F enthalten. Da jeder Knoten aus G in M1 und M2 jeweils nur einen Grad von 1 hat, hat jeder Knoten aus G Grad 0 oder 2 in F . Somit sind die Komponenten aus F Zyklen gerader Länge bzw. isolierte Knoten. Sei C der Zyklus aus F , der xz enthält. Wenn C nicht auch yw enthält, dann besteht der gewünschte 1-Faktor aus den Kanten von M2 aus C und allen Kanten aus M1 , die nicht in C liegen. Wenn C sowohl yw als auch xz enthält, wie in Abbildung 4.3 dargestellt, benutzen wir entweder yx oder yz, um yw und xz zu vermeiden. In dem Teil in C, der mit y beginnt und über yw führt, benutzen wir Kanten aus M1 , um die Nutzung von yw zu vermeiden. Wenn wir {x, z} erreichen, benutzen wir zy, falls wir z erreichen, andernfalls benutzen wir xy. Für den Rest von C benutzen wir Kanten aus M2 . Wir haben einen 1-Faktor erzeugt, der nicht xz oder yw benutzt. Kombiniert mit M1 und M2 außerhalb von C, haben wir einen 1-Faktor in G erzeugt. Abbildung 4.3: Skizze zum 2. Fall des Beweises 46 Folgerung 52. (Petersen, 1891) Sei G = (V, E) ein 3-regulärer Graph, der keine Brückenkanten enthält. Dann hat G einen 1-Faktor. Proof. Siehe West [1, S. 139] Satz 53. (Satz von Petersen) Sei G = (V, E) ein regulärer Graph vom Grad 2d. Dann kann man G in d Graphen vom Grad 2 zerlegen, d. h. es existiert . . . eine d-teilige Kantenpartition E1 ∪ E2 ∪ . . . ∪ Ed = E mit der Eigenschaft, dass (V, Ei ) regulär vom Grad 2 für alle 1 ≤ i ≤ d ist. Proof. (für d = 2) Sei K ein Eulerkreis des 4-regulären Graphen G. K besteht aus |E| = 2 · |V | vielen Kanten. Da die Kantenanzahl gerade ist, können die Kanten von K abwechselnd rot und blau gefärbt werden. Eine gesuchte Kantenpartition für G ist dann E1 = {e ∈ E; e ist rote Kante} und E2 = {e ∈ E; e ist blaue Kante}, da jedem Knoten in K immer paarweise eine rote und eine blaue Kante zugeordnet wird. 47 Kapitel 5 Netzwerkalgorithmen Viele praxisrelevante Probleme sind so rechenaufwändig oder speicherintensiv, dass sie von sequentiellen Rechnern nicht in akzeptabler Zeit gelöst werden können. Viele dieser Probleme gelten in der Komplexitätstheorie sogar als effizient (da in Polynomialzeit lösbar). Beispielsweise können jedoch Instanzen der Größe 108 für einen sequentiellen Algorithmus mit quadratischer Zeit- oder Speicherkomplexität zu einem großen Problem werden. Parallelrechner bieten oft eine Möglichkeit, solche großen Instanzen in akzeptabler Zeit zu lösen. In einem Parallelrechner arbeiten mehrere Prozessoren gleichzeitig an der Lösung. Daher muss ein Mechanismus bereitgestellt werden, mit dessen Hilfe die Prozessoren untereinander kommunizieren können. Je nachdem, wie dieser Mechanismus realisiert ist, unterscheidet man zwischen Parallelrechnern, die über einen gemeinsamen Speicher und solchen, die über ein Verbindungsnetzwerk kommunizieren. Parallelrechner sind mittlerweile allgegenwärtig. Denn fast jeder heutzutage für den Desktop-Massenmarkt produzierte Chip beinhaltet mehrere Prozessorkerne, die über gemeinsamen Speicher kommunizieren. Aber für sehr große Instanzen muss man weiterhin eine sehr große Zahl von Parallelrechnern verwenden, die dann über ein Verbindungsnetzwerk kommunizieren. In diesem Kapitel wollen wir einige der bekanntesten und leistungsstärksten Prozessornetzwerke vorstellen. Prozessornetzwerke werden als ungerichtete Graphen dargestellt. Jedem Knoten des Graphen entspricht ein Prozessor mit seinem lokalen Speicher und jeder Kante ein Kommunikationskanal (Link). Im folgenden werden wir daher die Begriffe Prozessornetzwerk und Graph synonym verwenden. Möchte ein Prozessor Pi auf eine Variable zugreifen, die in dem lokalen Speicher eines nicht benachbarten Prozessors Pj abgelegt ist, so muss die Variable auf einem möglichst kurzen Weg zu Prozessor Pi geroutet werden. 48 Hieraus leiten sich eine Reihe von Eigenschaften ab, die ein gutes Prozessornetz charakterisieren: 1. kleiner Durchmesser Um Routing-Wege möglichst kurz zu halten, sollte das Prozessornetz einen kleinen Durchmesser besitzen. Es kann jedoch nicht einfach jeder Prozessor mit jedem anderen Prozessor verbunden werden, da sich ein derartig dichtes Netzwerk in der Praxis nicht realisieren läßt. 2. gute Simulationseigenschaften Ein Algorithmus, der effizient auf einem Rechnernetz G1 ausgeführt werden kann, sollte auch auf einem Netzwerk G2 schnell laufen. Dies gewährleistet die Portierbarkeit von Algorithmen. Dazu muss das Netzwerk G2 die Kommunikationsstruktur des Netzwerks G1 effizient simulieren können. 3. einfache Routing-Algorithmen Falls eine Nachricht von einem Prozessor Pi zu einem Prozessor Pj geroutet werden muss, so sollte jeder Prozessor auf dem Weg von Pi nach Pj möglichst in konstanter Zeit entscheiden, über welche Kante die Nachricht weitergeschickt wird. Dies verringert die Kosten eines nicht lokalen Speicherzugriffs. 4. keine Flaschenhälse In einem guten Netzwerk sollten nicht nur alle Routing-Wege kurz sein, sie sollten sich auch gleichmäßig über die Knoten und Kanten des Graphen verteilen. Dies ist beispielsweise in einem sternförmigen Netzwerk nicht der Fall. 5. hohe Fehlertoleranz Kommt ein Netzwerk in der Praxis zum Einsatz, so muss gewährleistet sein, dass auch nach Ausfall eines Prozessors oder eines Links auf dem restlichen Netzwerk weitergearbeitet werden kann. Der Graph sollte eine hohe Konektivität besitzen, so dass selbst bei einem Ausfall mehrerer Links das Netzwerk zusammenhängend bleibt. 5.1 Der Hypercube In den nachfolgenden Abschnitten werden wir die bekannten Netzwerktopologien Hypercube, Gitter und Torus kennenlernen. Zunächst benötigen wir jedoch noch einige graphentheoretische Definitionen: Definition 54. Sei G = (V, E) ein ungerichteter Graph und u, v ∈ V . Bezeichne dist(u, v) die Länge des kürzesten Weges von u nach v. Dann ist der 49 Durchmesser D(G) des Graphen G definiert als: D(G) = max{dist(u, v); u, v ∈ V } Definition 55. Seien G1 = (V1 , E1 ) und G2 = (V2 , E2 ) ungerichtete Graphen. G1 und G2 heißen isomorph, wenn es eine bijektive Abbildung ϕ : V1 → V2 gibt mit {u, v} ∈ E1 ⇔ {ϕ(u), ϕ(v)} ∈ E2 . In diesem Fall heißt ϕ Isomorphismus zwischen G1 und G2 . Gilt G1 = G2 , so heißt ϕ Automorphismus. Definition 56. Sei G = (V, E) ein ungerichteter Graph. G heißt knotensymmetrisch (engl.: vertex-transitive), wenn für alle u, v ∈ V ein Automorphismus ϕu,v existiert mit ϕu,v (u) = v. Aus der Definition des Automorphismus folgt sofort, dass jeder knotensymmetrische Graph regulär sein muss (d.h. alle Knoten besitzen gleichen Knotengrad). Definition 57. Sei G = (V, E) ein ungerichteter Graph. G heißt kantensymmetrisch, falls für je zwei Kanten {u, v}, {u0 , v 0 } ∈ E ein Automorphismus ϕ existiert mit ϕ(u) = u0 und ϕ(v) = v 0 . Der Hypercube gehört zu den leistungsstärksten Verbindungsnetzwerken, die bis heute bekannt sind. Viele andere Netzwerke können vom Hypercube effizient, d.h. mit konstantem Zeitverlust, simuliert werden. Der Hypercube stellt daher eine vielseitig einsetzbare parallele Maschine dar. In diesem Abschnitt wollen wir den Hypercube und seine wichtigsten Eigenschaften vorstellen. Definition 58. Der Hypercube der Dimension k wird mit Q(k) bezeichnet und ist wie folgt definiert: Q(k) = (Vk , Ek ) mit Vk = {0, 1}k Ek = {{u, v}; u, v ∈ {0, 1}k unterscheiden sich in genau einem Bit} Der Hypercube besitzt eine rekursive Struktur, d.h. der Hypercube der Dimension k, k ≥ 2, enthält 2 Kopien des Hypercube der Dimension k − 1. Satz 59. (Eigenschaften des Hypercube) Der Hypercube Q(k) der Dimension k besitzt die folgenden Eigenschaften: 1.) Q(k) besitzt 2k Knoten und k · 2k−1 Kanten. 2.) Q(k) ist regulär vom Grad k. 3.) Der Durchmesser des Q(k) ist k. 4.) Die Bisektionsweite des Q(k) ist 2k−1 . 50 Die ersten 3 Aussagen des Satzes sind klar. auf den Beweis der vierten Aussage wird an dieser Stelle verzichtet. Für den Hypercube kann ein einfacher Routing-Algorithmus angegeben werden. Seien dazu u, v ∈ {0, 1}k zwei beliebige Knoten des Q(k) mit u = (uk−1 . . . u0 ) und v = (vk−1 . . . v0 ). Desweiteren bezeichne u(i), 0 ≤ i < k, das Binärwort, das sich von u genau im i-ten Bit unterscheidet. Dann kann wie folgt eine Nachricht von u nach v geroutet werden: for i := 0 to k − 1 do begin if ui 6= vi then begin schicke Nachricht von Knoten u nach Knoten u(i); u := u(i); end; end; Die Anzahl der Kanten, die der Routing-Algorithmus durchläuft, entspricht der Anzahl der Bits, in denen sich die Binärdarstellungen der Knoten u und v unterscheiden. Damit findet der Routing-Algorithmus immer den kürzesten Weg zwischen u und v. Der Algorithmus ist also optimal. Im folgenden wollen wir weitere Eigenschaften des Hypercube untersuchen. Satz 60. Der Hypercube Q(k) ist knotensymmetrisch. Proof. Für x ∈ {0, 1}k bezeichne wieder x(i), 0 ≤ i < k, das Binärwort, das sich von x genau im i-ten Bit unterscheidet. Sei δi : Vk 7→ Vk definiert durch δi (x) = x(i). Dann ist δi ein Automorphismus, denn für {u, v} ∈ Ek mit v = u(j), 0 ≤ j < k, gilt: ( {δi (u), δi (u(j))} = {u(i), u(i)(j)}, falls i 6= j {u(i), u}, falls i = j In beiden Fällen ist {δi (u), δi (u(j))} eine Kante des Q(k). Da die Konkatenation von Automorphismen selbst wieder einen Automorphismus ergibt, kann der gesuchte Automorphismus ϕu,v mit ϕu,v (u) = v definiert werden durch: Y ϕu,v = δi i ui 6=vi Satz 61. Der Hypercube Q(k) ist kantensymmetrisch. Proof. Seien {u, v}, {u0 , v 0 } zwei Kanten des Q(k). Sei i die Dimension, in der {u, v} verläuft, d.h. u = uk−1 . . . ui . . . u0 v = uk−1 . . . ui . . . u0 51 und sei j die Dimension, in der {u0 , v 0 } verläuft, d.h. u0 = u0k−1 . . . u0j . . . u00 v 0 = u0k−1 . . . u0j . . . u00 Sei π : {0, . . . , k − 1} → {0, . . . , k − 1} eine Permutation mit π(j) = i und bezeichne ⊕ die logische XOR-Verknüpfung. Dann kann der gesuchte Automorphismus ϕ : Vk → Vk definiert werden durch: ϕ(xk−1 . . . x0 ) = ((xπ(k−1) ⊕ uπ(k−1) ⊕ u0k−1 ) . . . (xπ(0) ⊕ uπ(0) ⊕ u00 )) Wir müssen zeigen: (i) ϕ(u) = u0 und ϕ(v) = v 0 (ii) ϕ ist Automorphismus, d.h. {z1 , z2 } ∈ Ek ⇔ {ϕ(z1 ), ϕ(z2 )} ∈ Ek (i): Für ϕ(u) ergibt sich: ϕ(uk−1 . . . u0 ) = ((uπ(k−1) ⊕ uπ(k−1) ⊕ u0k−1 ) . . . (uπ(0) ⊕ uπ(0) ⊕ u00 )) = u0k−1 . . . u00 = u0 und ϕ(v) berechnet sich zu: ϕ(vk−1 . . . v0 ) = ((vπ(k−1) ⊕ uπ(k−1) ⊕ u0k−1 ) . . . (vπ(0) ⊕ uπ(0) ⊕ u00 )) dabei gilt für 0 ≤ h < k: ( vπ(h) = uπ(h) , falls π(h) 6= i, d.h. h 6= j ui , falls h = j daraus folgt: ϕ(vk−1 . . . v0 ) = ((uπ(k−1) ⊕ uπ(k−1) ⊕ u0k−1 ) . . . (ui ⊕ ui ⊕ u0j ) . . . (uπ(0) ⊕ uπ(0) ⊕ u00 )) = u0k−1 . . . u0j . . . u00 = v 0 (ii): Sei {z1 , z2 } eine Kante des Q(k). Sei r das Bit, in dem sich die Binärworte z1 und z2 unterscheiden. Sei π(s) = r. Nach (i) unterscheiden sich ϕ(z1 ) und ϕ(z2 ) im Bit s. Daraus folgt: {ϕ(z1 ), ϕ(z2 )} ∈ Ek . Zur Erinnerung: Ein Hamilton-Kreis ist ein Kreis, der jeden Knoten genau einmal besucht und an den Ausgangsknoten zurückkehrt. Lemma 62. Der Hypercube Q(k), k ≥ 2, enthält einen Hamilton-Kreis. 52 Abbildung 5.1: Das 2-dimensionale Gitter M[3, 5] Proof. Ind. Anf.: k = 2 Der gesuchte Hamilton-Kreis lautet: 00 → 01 → 11 → 10 → 00. Ind. Schritt: k 7→ k + 1 Der Hypercube Q(k + 1) ist aus zwei disjunkten Kopien des Q(k) zusammengesetzt. Nach Ind.Vor. enthalten beide Kopien einen Hamilton-Kreis Ck . Durch Verschmelzen der beiden Kreise kann ein Hamilton-Kreis Ck+1 in Q(k +1) konstruiert werden. Sei dazu {u, v} ∈ Ek eine beliebige Kante auf Ck . Der Kreis Ck+1 wird wie folgt gebildet: 1.) Streichen der Kanten {0u, 0v}, {1u, 1v} 2.) Hinzufügen der Kanten {0u, 1u}, {0v, 1v} 5.2 Gitter und Torus Definition 63. (d-dimensionales Gitter) Das d-dimensionale Gitter wird mit M[n1 , . . . , nd ] bezeichnet und ist wie folgt definiert: M[n1 , . . . , nd ] = (V, E) mit V = {(i1 , . . . , id ); 1 ≤ iν ≤ nν für 1 ≤ ν ≤ d} E = {{(i1 , . . . , id ), (j1 , . . . , jd )}; ∃ 1 ≤ κ ≤ d mit jκ = iκ + 1 und iν = jν für ν 6= κ} Abbildung 5.1 zeigt das 2-dimensionales Gitter M[3, 5]. Man kann es sich auch als Matrix vorstellen, in der aneinandergrenzende Zellen (ohne Berücksichtigung von Diagonalen) miteinander durch eine Kante verbunden sind. Ein Torus ist einem Gitter sehr ähnlich. Allerdings haben beim Torus alle Knoten Grad 4. Dies wird erreicht, indem jeder Knoten am Rand eines Gitters durch eine Kante mit einem Knoten am gegenüberliegenden Rand verbunden wird, siehe dazu Abbildung 5.2. 53 Abbildung 5.2: Der 2-dimensionale Torus T[3, 5] 5.3 Lastbalancierung Gegeben sei ein Rechnernetz mit vielen Prozessoren. Jeder Prozessor hat eine gewisse Last, die er zu verarbeiten hat. Bis zur gemeinsamen Lösung eines Problems muss man immer auf den am längsten rechnenden Prozessor warten. Daher ist es für eine effiziente Nutzung eines Parallelrechners entscheidend, dass alle Prozessoren gleich stark ausgelastet sind. Algorithmisch stellen wir uns daher die Frage, wie ohne zentrale Steuerung eine möglichst schnelle Balancierung erreicht werden kann. Unsere Modellannahme ist, dass die Prozessoren in jedem Schritt nur ihre eigene Last und die ihrer Nachbarn kennen und mit ihnen in einer Runde Last austauschen können? Weiterhin sind die Lasten beliebig aufteilbar (also durch reelle Zahlen repräsentierbar). Bevor wir einen geeigneten Lastbalancierungsalgorithmus vorstellen, benötigen wir zunächst einige Grundlagen aus der linearen Algebra. Definition 64. Seien im folgenden n ∈ N, x, y ∈ Rn und A = (aij ) ∈ Rn×n . a) Das Skalarprodukt zweier Vektoren x und y ist definiert durch hx, yi = Pn i=1 xi · yi . b) Als Norm eines Vektors x verwenden wir die Summennorm ||x||1 = p P hx, xi. |x | bzw. meistens die euklidische Norm ||x|| = i 2 i c) Die Matrix AT = (aji ) ∈ Rn×n heißt transponierte Matrix von A. d) Eine Matrix A heißt symmetrisch, wenn A = AT gilt. e) Das Matrix-Vektorprodukt y = Ax ist definiert durch yi = Pn j=1 aij · xj = hAi• , xi. f ) Die Norm einer Matrix A ist durch ||A|| = supx6=0 54 ||Ax|| ||x|| definiert. g) λ heißt Eigenwert der Matrix A, wenn Au = λ · u für ein u ∈ Rn , u 6= 0, gilt. Alle Vektoren u mit Au = λ · u heißen dann Eigenvektoren zum Eigenwert λ von A. h) Das charakteristische Polynom der Matrix A ist definiert durch fA (λ) = det(A − λEn ). Ohne Beweis geben wir die folgenden drei Sätze an: Satz 65. Seien A, B ∈ Rn×n und x ∈ Rn . Dann gilt: 1.) ||A · B|| ≤ ||A|| · ||B|| 2.) ||Ax|| ≤ ||A|| · ||x|| Satz 66. Sei A ∈ Rn×n . λ ist genau dann ein Eigenwert von A, wenn λ eine Nullstelle des charakteristischen Polynoms fA ist. Satz 67. Sei A ∈ Rn×n symmetrisch. Dann besitzt A nur reelle Eigenwerte und die Eigenvektoren zu verschiedenen Eigenwerten bilden eine Orthogonal-Basis des Rn . Satz 68. Sei A ∈ Rn×n symmetrisch und λ1 ≤ λ2 ≤ . . . ≤ λn die Eigenwerte von A. Dann gilt: λ1 = min x6=0 hAx, xi hx, xi und λn = max x6=0 hAx, xi hx, xi Proof. Sei u1 , . . . , un eine Orthogonal-Basis aus Eigenvektoren von A zu den Eigenwerten λ1 , . . . , λn . Jedes x ∈ Rn läßt sich als Linearkombination der ui schreiben: x= n X αi ∈ R αi ui , i=1 n X =⇒ Ax = αi Aui = i=1 n X αi λi ui i=1 n n n X n X X X =⇒ hAx, xi = h αi λi ui , αj uj i = αi λi αj hui , uj i i=1 j=1 i=1 j=1 Da die Eigenvektoren paarweise senkrecht aufeinander stehen, gilt hui , uj i = 0 für i 6= j: hAx, xi = n X λi αi2 hui , ui i i=1 =⇒ hAx, xi ≤ λn hx, xi Für x = un gilt ferner hAx,xi hx,xi n X ≤ λn hαi ui , αi ui i = λn hx, xi i=1 ∀x 6= 0 = λn . Die Aussage für λ1 zeigt man entsprechend, indem man hAx, xi mit λ1 nach unten abschätzt. 55 Folgerung 69. Sei A ∈ Rn×n und λn der größte Eigenwert der Matrix AT A. Dann gilt: ||A|| = p λn Proof. AT A ist symmetrisch und aus dem Beweis zu Satz 68 folgt für beliebige x ∈ Rn : ||Ax||2 = hAx, Axi = hAT Ax, xi ≤ λn hx, xi = λn ||x||2 p =⇒ ||A|| = λn , da für x = un die Gleichung ||Ax||2 = λn ||x||2 erfüllt ist. Definition 70. Sie G = (V, E) ein beliebiger Graph mit n = |V | Knoten, V = {v1 , . . . , vn }. Die Laplace-Matrix LG = (lij ) ∈ Zn×n ist definiert durch: grad(vi ) , falls i = j lij = −1 , falls (vi , vj ) ∈ E 0 , sonst Die Zeilensumme einer Laplace-Matrix LG ist nach Konstruktion immer 0. Es gilt also: 1 . . LG . = 1 0 .. = 0 · . 0 1 .. . 1 Somit ist 0 ein Eigenwert jeder Laplace-Matrix und (1 . . . 1) ein zugehöriger Eigenvektor. Offensichtlich ist die Laplace-Matrix von ungerichteten Graphen symmetrisch. Nach Satz 67 sind daher alle Eigenwerte der Matrix reell und die zugehörigen Eigenvektoren bilden eine Orthogonal-Basis. Man kann ferner zeigen, dass alle Eigenwerte größer gleich Null sind, 0 ist also der kleinste Eigenwert einer Laplace-Matrix. Ferner gilt, dass ein ungerichteter Graph genau dann zusammenhängend ist, wenn alle anderen Eigenwerte echt größer als Null sind. Das Diffusionsverfahren erster Ordnung Gegeben ein Graph G = (V, E), n = |V | und wi bezeichnet die Last des Knotens vi ∈ V . w ist der Lastvektor (w1 , . . . , wn ), A die Adjazenzmatrix von G. Setze α ∈ (0, maxi 1deg(i) ). k Weiter sei wk der Lastvektor nach k Iterationsschritten und sei lij der Fluss entlang der Kante (vi , vj ) im Schritt k. Dann führt das Diffusionsverfahren 56 erster Ordnung (FOS) in Iteration k + 1 folgende Operationen aus: k+1 lij = α(wik − wjk ) X k+1 wik+1 = wik − lij j∈N (i) X wik+1 = wik − α(wik − wjk ) = (1 − di α)wik + j∈N (i) X αwjk j∈N (i) In Matrixform: w1k+1 k+1 w2 . . . wnk+1 = ... α w1k 0 ... ... 0 α .. . · w2k .. . α 0 1 − dn α 1 − d1 α 0 ... α ... α ... 0 .. . 1 − d2 α 0 0 α .. . α α 0 ... 0 {z | 0 0 ... wnk } n×n Matrix M Es gilt also wk+1 = M ·wk , wobei M ∈ Rn×n mit M = I −αL und wk ∈ Rn . Es folgt wk+1 = M k+1 w0 . Weiterhin besitzt M nur reelle Eigenwerte und es gibt n aufeinander stehende Eigenvektoren z1 , . . . , zn , die eine Orthonormalbasis im Rn bilden. Lemma 71. Sei wn0 die initiale Lastverteilung in einem Graphen G = (V, E) und sei w= n X wj j=1 n (1, . . . , 1) die zugehörige balancierte Lastsituation. Sei w0 = Pn j=1 βj zj , dann gilt: w = β1 · z1 Proof. Es gilt λ1 = 1 > λ2 (falls G zusammenhängend), und z1 = a · (1, . . . , 1), wobei a ∈ R. Dann gilt: ­ 0 ® w ,w = * n X + βj zj , w j=1 = * n X j=1 βj zj , n X wj j=1 n + (1, . . . , 1) da (1, . . . , 1) zu allen Eigenvektoren außer z1 senkrecht steht: * + n X wj = β1 z1 , (1, . . . , 1) n j=1 * + n X wj = β1 a(1, . . . , 1), (1, . . . , 1) n j=1 57 und nehmen wir nun die folgende Gleichheit an: = 1 hw, wi , b wobei w = b · β1 · z1 . Wir rechnen nach: P ¿ À ­ 0 ® j=1 wj w , w = (w1 , . . . , wn ), (1, . . . , 1) n P Pn n X ( nj=1 wj )2 j=1 wj = = wj · n n j=1 P À ¿P j=1 wj j=1 wj hw, wi = (1, . . . , 1), (1, . . . , 1) n n P P X µ j=1 wj ¶2 ( nj=1 wj )2 = =n· n n2 i=1 ⇒b=1 Seien µ1 ≥ µ2 ≥ . . . ≥ µn die Eigenwerte von M und λ1 ≤ λ2 ≤ . . . ≤ λn die Eigenwerte der Laplace-Matrix L. Sei zi der Eigenvektor der Matrix L zum Eigenwert λi . Dann folgt: M · zi = (I − αL)zi = Izi − αLzi = zi − αλi zi = (1 − αλi )zi . Da die Eigenwerte von L alle nicht negativ sind, ist L positiv semi-definit. Wie bereits festgestellt, gilt λ1 = 0 und der zugehörige Eigenwert ist z1 = (1, . . . , 1). Man kann zeigen, dass 0 ein einfacher (d. h. einfach vorkommender) Eigenwert von 0 genau dann ist, wenn G zusammenhängend ist. Definition 72. Sei ²k = wk − w der Fehler nach k Iterationsschritten. Lemma 73. Sei G = (V, E) ein Graph und sei w0 die initiale Lastsituation P in G. Seien β1 , . . . , βn ∈ R: w0 = ni=1 βi zi . Dann gilt: n X ²0 = βi zi i=2 Proof. ²0 = w0 − w = k k k n X i=1 0 βi · zi − w = k k n X βi zi − β1 z1 i=1 0 ² = w − w = M w − M w = M (w − w) = M k · ²0 Satz 74. Sei G = (V, E) ein Graph, sei w0 die initiale Lastsituation und führe Diffusion mittels der Diffusionsmatrix M durch. Dann gilt: k²k k2 ≤ max{|µ2 |, |µn |}k · k²0 k2 58 Kapitel 6 Bisektionsweite und Partitionierung In diesem Kapitel betrachten wir Probleme aus der Graphpartitionierung. Dabei versucht man, Knotenteilmengen zu identifizieren, in denen je nach Problemstellung möglichst wenige oder möglichst viele externe Kanten (also solche, die zu Knoten aus anderen Teilmengen führen) existieren. Weiterhin betrachten wir die Bisektionsweite von Graphen. Die Bisektionsweite ist eine wichtige Eigenschaft eines parallelen Rechnernetzes, da eine kleine Bisektionsweite auf mögliche Engpässe bei der Informationsverteilung im Netz hinweist. Dazu definieren wir: Definition 75. Sei G = (V, E) ein ungerichteter Graph. Dann ist V1 , V2 ⊂ . V mit V1 ∪ V2 = V eine Partition des Graphen. Die Menge Ext(V1 , V2 ) = {{u, v} ∈ E; u ∈ V1 , v ∈ V2 }, die Menge der Kanten, die zwischen V1 und V2 verlaufen, heißt Schnitt der Partition. ext(V1 , V2 ) = |Ext(V1 , V2 )| stehe für die Kantenanzahl des Schnitts. Eine Partition V1 , V2 heißt balanciert, wenn | |V1 | − |V2 | | ≤ 1 gilt. Definition 76. Sei G = (V, E) ein ungerichteter Graph. Die Bisektionsweite σ(G) ist definiert als: σ(G) = min{ext(V1 , V2 ); V1 , V2 ist eine balancierte Partition von G} In Abschnitt 6.1 werden Verfahren zur Berechnung von unteren Schranken für die Bisektionsweite vorgestellt. 6.1 Untere Schranken für die Bisektionsweite In diesem Abschnitt werden zwei Verfahren vorgestellt, mit denen sich untere Schranken für die Bisektionsweite von Graphen berechnen lassen. Solche un59 teren Schranken sind insbesondere in den Fällen nützlich, in denen sich auch eine Partition mit entsprechender Größe finden läßt, da so die Bisektionsweite eines Graphen bestimmt werden kann. In Satz 81 wird beispielsweise bewiesen, dass die Bisektionsweite des Hypercube Q(k) eine Größe von 2k−1 besitzt. Allerdings liefert keines der beiden hier vorgestellten Verfahren für alle Graphen scharfe untere Schranken. 6.1.1 Verfahren von Leighton Das Verfahren von Leighton verwendet ein vollständiges Wegesystem und die sich daraus ergebende maximale Kantenbelastung, um die Bisektionsweite eines Graphen nach unten abzuschätzen. Definition 77. (Wegesystem) Sei G = (V, E) ein ungerichteter Graph. Ein Wegesystem W definiert zu jedem Knotenpaar (u, v) ∈ V 2 einen Weg von u nach v. Für e ∈ E stehe cW (e) für die Anzahl der Wege von W, in denen Kante e enthalten ist, und c∗W = max{cW (e); e ∈ E} für die maximale Kantenauslastung durch das Wegesystem. Man kann ein Wegesystem auch als eine Einbettung der Clique mit |V | Knoten in G ansehen. c∗W entspricht dabei der Kantenauslastung der Einbettung: Definition 78. (Einbettung) Seien G1 = (V1 , E1 ) und G2 = (V2 , E2 ) ungerichtete Graphen. Eine injektive Abbildung f : V1 → V2 heißt Einbettung von G1 in G2 . Im allgemeinen werden benachbarte Knoten aus G1 nicht auf benachbarte Knoten in G2 abgebildet. Um eine Einbettung von G1 nach G2 vollständig zu beschreiben, muss daher noch für jede Kante {u, v} aus G1 ein Weg Pf (u, v) angegeben werden, der in G2 die Knoten f (u) und f (v) miteinander verbindet. Dieser Weg muss nicht unbedingt der kürzeste Weg zwischen f (u) und f (v) sein. Definition 79. (Kantenstreckung, Kantenauslastung) Seien G1 = (V1 , E1 ) und G2 = (V2 , E2 ) ungerichtete Graphen. Sei f eine Einbettung von G1 in G2 . Dann ist die Kantenstreckung KS(f ) von f definiert als die maximale Länge eines Weges aus {Pf (u, v); {u, v} ∈ E1 }. Für eine Kante e ∈ E2 bezeichne ρ(e) die Anzahl der Wege aus {Pf (u, v); {u, v} ∈ E1 }, die e enthalten. Dann ist die Kantenauslastung KA(f ) von f definiert als max{ρ(e); e ∈ E2 }. 60 Abbildung 6.1: n2 2 Wege laufen über den Schnitt der Partition V1 , V2 Kantenstreckung (Dilation) und Kantenauslastung (Congestion) sind wichtige Maße zur Beurteilung der Güte einer Einbettung. Kann G1 in G2 mit konstanter Kantenstreckung und konstanter Kantenauslastung eingebettet werden, so ist jeder Algorithmus für G1 auf G2 mit konstantem Zeitverlust simulierbar. Satz 80. (Satz von Leighton) Sei G = (V, E) ein ungerichteter Graph mit gerader Knotenanzahl n = |V | und W ein Wegesystem für G mit maximaler Kantenauslastung c∗W . Dann gilt für die Bisektionsweite von G: σ(G) ≥ n2 2c∗W . Proof. Sei V1 , V2 ⊂ V mit V1 ∪ V2 = V und |V1 | = |V2 | = n/2 eine balancierte Partition von G mit minimalem Schnitt ext(V1 , V2 ) = σ(G). Insgesamt gibt es 2 · |V1 | · |V2 | = n2 /2 viele Wege, die zwischen Knoten aus V1 und V2 verlaufen (|V1 | · |V2 | viele von Knoten aus V1 zu Knoten aus V2 und genausoviele in die andere Richtung), und jeder dieser Wege muss dabei (mindestens) eine der σ(G) vielen Kanten des Schnitts benutzen (Abbildung 6.1). Wir wissen aber ferner, dass jede Kante vom Wegesystem höchstens c∗W -mal verwendet wird, es laufen also höchstens c∗W · σ(G) Wege über den Schnitt. Daraus folgt: n2 n2 ≤ c∗W · σ(G) ⇐⇒ ≤ σ(G) 2 2c∗W Wir wollen den Satz von Leighton verwenden, um die Bisektionsweite des Hypercube zu bestimmen. 61 Satz 81. (Bisektionsweite des Hypercube) Die Bisektionsweite des Hypercube Q(k) beträgt 2k−1 . Proof. Wir bestimmen zuerst mittels des Satzes von Leighton und des in Abschnitt 5.1 angegebenen Routing-Algorithmus eine untere Schranke für die Bisektionsweite des Q(k). Jeder Routing-Algorithmus definiert ein Wegesystem W und zur Bestimmung der maximalen Belastung c∗W der Kanten durch das Wegesystem betrachten wir eine beliebige Kante {u, u(i)}, u = uk−1 . . . u0 ∈ {0, 1}k und 0 ≤ i < k, des Q(k). Die Kante kann vom Routing-Algorithmus in beiden Richtungen durchlaufen werden. Bestimmen wir zuerst die Anzahl der Wege, die die Kante von u nach u(i) durchlaufen. Alle Knoten der Form uk−1 . . . ui {0, 1}i können mittels des Routing-Algorithmus den Knoten u erreichen, von u(i) aus können alle Knoten der Form {0, 1}k−i−1 ui ui−1 . . . u0 erreicht werden (Man beachte, dass die Kante vom Routing-Algorithmus nur im i-ten Schleifendurchlauf verwendet wird). Das bedeutet, dass von u nach u(i) insgesamt 2i · 2k−i−1 = 2k−1 Wege laufen. Für die Richtung von u(i) nach u verläuft die Analyse entsprechend, also wird die Kante von 2 · 2k−1 = 2k Wegen verwendet. Damit ist auch die maximale Belastung c∗W = 2k und für die Bisektionsweite des Q(k) folgt: σ(Q(k)) ≥ (2k )2 = 2k−1 2 · 2k Für den Q(k) lässt sich ferner einfach ein Schnitt mit 2k−1 Kanten finden. Abbildung 6.2: Bisektion des Q(k) mit 2k−1 Kanten Wähle beispielsweise V1 = {0u; u ∈ {0, 1}k−1 } und V2 = {1u; u ∈ {0, 1}k−1 } (Abbildung 6.2). Insgesamt folgt also σ(Q(k)) = 2k−1 . 6.1.2 Spektrale untere Schranke Das in diesem Abschnitt beschriebene Verfahren verwendet einen gänzlich anderen Ansatz als das Verfahren von Leighton. Die algebraischen Eigenschaften 62 der Laplace-Matrix eines Graphen werden hier für die Bestimmung einer unteren Schranke der Bisektionsweite ausgenutzt. Satz 82. Sei G = (V, E) ein ungerichteter Graph mit gerader Knotenanzahl n = |V | und λ2 der zweitkleinste Eigenwert der Laplace-Matrix LG . Dann gilt: σ(G) ≥ λ2 · n 4 Proof. Da (1 . . . 1) Eigenvektor zum kleinsten Eigenwert 0 von LG ist, müssen alle Eigenvektoren x von λ2 nach Satz 67 senkrecht auf (1 . . . 1) stehen, d.h. es P muß hx, (1 . . . 1)i = ni=1 xi = 0 gelten. Wie im Beweis zu Satz 68 zeigt man dann, dass λ2 = min Px6=0 xi =0 hLG x, xi hx, xi gilt. Wir betrachten nun eine minimale balancierte Partition V1 , V2 von G, d.h. es ist |V1 | = |V2 | = n/2 und ext(V1 , V2 ) = σ(G). Zu dieser Partition definieren wir wie folgt einen Vektor y ∈ Zn : ( −1 , falls vi ∈ V1 yi = +1 , falls vi ∈ V2 Offensichtlich ist Pn i=1 yi = 0 und deshalb gilt: λ2 ≤ Der Wert von (y, y) ist Pn i=1 (LG y, y) (y, y) yi2 = n. Sei im folgenden N (i) die Menge der Nachbarn von Knoten vi . Für einen beliebigen Vektor x ∈ Zn gilt dann: à n ! n X X (LG x, x) = lij xj xi i=1 = n X j=1 lii xi − i=1 = n X X vj ∈N (i) |N (i)| · xi − i=1 = n X xj xi X (xi − xj ) xi vj ∈N (i) X ((xi − xj )xi + (xj − xi )xj ) {vi ,vj }∈E = X vj ∈N (i) i=1 = xj xi X (xi − xj )2 {vi ,vj }∈E 63 Für alle Kanten, die nicht zum Schnitt der optimalen Partition V1 , V2 gehören, ist yi = yj ; für eine Kante des Schnitts gilt |yi − yj | = 2 und deshalb (LG y, y) = X (yi − yj )2 = {vi ,vj }∈E X (yi − yj )2 = {vi ,vj }∈ Ext(V1 ,V2 ) X 22 = 4 · σ(G) {vi ,vj }∈ Ext(V1 ,V2 ) Zusammen mit (y, y) = n erhalten wir schließlich: λ2 ≤ 4 · σ(G) (LG y, y) = (y, y) n 64 =⇒ σ(G) ≥ λ2 · n 4 Literaturverzeichnis [1] West: Introduction to Graph Theory, Pretince Hall, 2nd ed., ISBN: 013-014400-2. [2] Chartrand, Oellermann: Applied and Algorithmic Graph Theory, McGraw-Hill, ISBN: 0-07-557101-3. [3] Cormen, Leiserson, Rivest, Stein: Introduction to Algorithms, MIT Press / McGraw-Hill, 2nd ed., ISBN: 0-262-53196-8. [4] Cormen, Leiserson, Rivest: Algorithmen - Eine Einführung, Oldenburg, ISBN: 3-486-27515-1. [5] Motwani, Raghavan: Randomized Algorithms, Cambridge University Press, ISBN: 0-52-147465-5. [6] Drake, Hougardy: A simple approximation algorithm for the weighted matching problem. Information Processing Letters, Volume 85, Issue 4, 28 February 2003, Pages 211-213. doi:10.1016/S0020-0190(02)00393-9. [7] Leighton: Einführung in parallele Algorithmen und Architekturen. Gitter, Bäume und Hypercubes. Internat. Thomson Publ., ISBN: 3-82660248-X. [8] Wanka: Approximationsalgorithmen - Eine Einführung, Teubner, ISBN: 3-519-00444-5. [9] Monien, Grothklags, Meyerhenke: Skript zur Vorlesung Algorithmen für synchrone Rechnernetze. 65