Skriptum zur Vorlesung im WS 2015/16 Diskrete Mathematik für Informatiker (Mathematik für Informatiker III) Prof. Dr. M. v. Golitschek Kapitel 1 : Algebra §1. Gruppen §2. Ringe und Körper §3. Das Rechnen modulo n Kapitel 2 : Kryptographie Kapitel 3 : Graphentheorie §1. Graphentheorie §2. Kombinatorische Optimierung 2.1. Algorithmus von Dijkstra 2.2. Maximale Flüsse Allgemeine Literatur M. Aigner : Diskrete Mathematik, Vieweg, 5.Auflage, 2004 D. Hachenberger : Mathematik für Informatiker, Pearson Studium, 2005, Th. Ihringer : Diskrete Mathematik, Heldermann Verlag, 2002. T. Schickinger, A. Steger, Diskrete Strukturen 1 (Kombinatorik, Graphentheorie, Algebra), Springer Verlag. 1 Kapitel 1 : Algebra Vertiefende Literatur : P. Cameron, Introduction to algebra, Oxford Univ. Press. I. Herstein, Topics in algebra, Wiley. N. Jacobson, Basic algebra I, Freeman. A. Leutbecher, Zahlentheorie - eine Einführung in die Algebra, Springer-Verlag, 1996. Eine algebraische Struktur besteht aus einer nichtleeren Menge, auf der eine oder mehrere Verknüpfungen (Operationen) definiert sind. Wir wollen Halbgruppen, Monoide, Gruppen, Ringe und Körper als die wichtigsten algebraischen Strukturen kennenlernen. §1. Gruppen Statt A nennen wir die Mengen in diesem Paragraphen meist G (für Gruppe). Definition. Eine Operation (Verknüpfung) auf einer Menge G ist eine Abbildung f : G × G → G. Statt f (a, b) schreiben wir meist a + b oder a ∗ b oder a ◦ b oder ab. Definition. Eine Operation ∗ auf G heißt kommutativ, falls a ∗ b = b ∗ a für alle a, b ∈ G, assoziativ, falls (a ∗ b) ∗ c = a ∗ (b ∗ c) für alle a, b, c ∈ G. Definition. Ist ∗ assoziativ, so heißt (G, ∗) eine Halbgruppe (oder : ”so ist G bezüglich ∗ eine Halbgruppe”). Ist ∗ assoziativ und kommutativ, so heißt (G, ∗) eine kommutative Halbgruppe. In einer Halbgruppe (G, ∗) kann ein Ausdruck der Form a ∗ b ∗ c ∗ d (oder länger) beliebig geklammert werden und liefert stets dasselbe Element in G. Zum Beispiel gilt für alle a, b ∈ G, dass ((b ∗ a) ∗ b) ∗ a = (b ∗ a) ∗ (b ∗ a), (1.1) denn für c := b ∗ a ist ((b ∗ a) ∗ b) ∗ a = (c ∗ b) ∗ a = c ∗ (b ∗ a) = c ∗ c = (b ∗ a) ∗ (b ∗ a). Definition. Eine Halbgruppe (G, ∗) heißt Monoid, falls ein Element e ∈ G existiert mit der Eigenschaft a ∗ e = e ∗ a = a für alle a ∈ G. 2 Man nennt e das neutrale Element des Monoids (G, ∗). Statt e schreibt man oft 1 (Einselement), statt (G, ∗) und e häufig (G, +) und 0 (Nullelement). In einem Monoid (G, ∗) gibt es nur ein einziges neutrales Element. Denn wären e und e′ neutrale Elemente, so wäre bezüglich des neutralen Elements e und a := e′ e′ ∗ e = e ∗ e′ = e, aber bezüglich des neutralen Elements e′ und a := e e ∗ e′ = e′ ∗ e = e′ , also e = e′ . Definition. Ein Monoid (G, ∗) mit neutralem Element e heißt Gruppe, wenn es zu jedem Element a ∈ G ein Element b in G existiert, so dass a ∗ b = e erfüllt ist. Wir schreiben statt b auch a−1 , also a ∗ a−1 = e, und nennen a−1 das inverse Element zu a. Insbesondere ist e−1 = e. Man nennt eine kommutative Gruppe auch abelsche Gruppe. Lemma 1.1. Sei (G, ∗) eine Gruppe mit neutralem Element e. Gilt für ein b ∈ G die Gleichung b ∗ b = b, dann ist b = e. Beweis. Aus b ∗ b = b folgt e = b ∗ b−1 = (b ∗ b) ∗ b−1 = b ∗ (b ∗ b−1 ) = b ∗ e = b, also b = e. Satz 1.2. Sei (G, ∗) eine Gruppe mit neutralem Element e. Für jedes a ∈ G gibt es genau ein inverses Element a−1 , und es gilt a−1 ∗ a = e. Beweis. Seien a ∈ G und b = a−1 , also a ∗ b = e. Dann ist b = b ∗ e = b ∗ (a ∗ b) = (b ∗ a) ∗ b und somit unter Verwendung von (1.1) und (1.2) b ∗ a = ((b ∗ a) ∗ b) ∗ a = (b ∗ a) ∗ (b ∗ a). Nach Lemma 1.1 folgt hieraus, dass b ∗ a = e ist, also a−1 ∗ a = e. Wäre c ∈ G ein weiteres inverses Element von a, also a ∗ c = e, so wäre b = b ∗ e = b ∗ (a ∗ c) = (b ∗ a) ∗ c = e ∗ c = c, wodurch die Eindeutigkeit des inversen Elements von a ∈ G bewiesen ist. Nun können Sie sehr schnell die folgenden Aussagen beweisen : 3 (1.2) Satz 1.3. Sei (G, ∗) eine Gruppe mit neutralem Element e. Dann gilt für alle a, b, c, x, y ∈ G (a ∗ b)−1 = b−1 ∗ a−1 , (a ∗ b ∗ c)−1 = c−1 ∗ b−1 ∗ a−1 , (a−1 )−1 = a, aus a ∗ x = b folgt x = a−1 ∗ b, aus x ∗ a = b folgt x = b ∗ a−1 , aus a ∗ x = a ∗ y folgt x = y, ( ”Kürzen”) aus x ∗ a = y ∗ a folgt x = y ( ”Kürzen”). Beispiel 1.1 Die natürlichen Zahlen mit der Multiplikation ∗ und dem neutralen Element 1 bilden ein kommutatives Monoid. Bezüglich der Addition + und dem neutralen Element 0 bilden die ganzen Zahlen Z, die | eine kommutative rationalen Zahlen Q, die reellen Zahlen IR und die komplexen Zahlen C Gruppe. Beispiel 1.2 Die Menge IRn×n aller n × n-Matrizen bilden bezüglich der Matrizenmultiplikation ein Monoid mit neutralem Element I =diag(1, 1, . . . , 1), die Menge aller nichtsingulären n × n-Matrizen sogar eine Gruppe. Beispiel 1.3 Sind (G, ∗) und (H, ·) Monoide (Gruppen), so ist deren direktes Produkt G×H bezüglich der Operation (a, b) ◦ (a′ , b′ ) := (a ∗ a′ , b · b′ ), a, a′ ∈ G, b, b′ ∈ H, ebenfalls ein Monoid (Gruppe), mit neutralem Element (eG , eH ). Man nennt (G × H, ◦) das Produktmonoid. Beispiel : Vektoraddition im IR2 . Beispiel 1.4 Es sei G eine nichtleere Menge. Jede endliche Folge (a1 a2 . . . an ) mit aj ∈ G heißt Wort über dem Alphabet G. Die Menge aller Wörter inklusive dem leeren Wort ∅ bilden ein Monoid mit neutralem Element ∅ bezüglich der Operation (a1 a2 . . . an ) ∗ (b1 b2 . . . bm ) := (a1 a2 . . . an b1 b2 . . . bm ), also bezüglich der Zusammensetzung. Dieses Monoid heißt freies Monoid über dem Alphabet G. 4 Beispiel 1.5 (Restklassen) Es sei n ∈ IN, n ≥ 2. Sei Zn := {[0], [1], . . . , [n − 1]} die Menge der n Restklassen modulo n. Dann bildet (Zn , +) bezüglich der Addition [j] + [k] := [j + k], falls j + k ≤ n − 1, [j + k − n], falls j + k ≥ n, eine kommutative Gruppe mit neutralem Element [0]. Verknüpfungstabelle für (Zn , +): Definition. Es seien (G, ∗) und (H, ·) Gruppen. Eine Abbildung f : G → H heißt (Gruppen-) Homomorphismus, falls f (a ∗ b) = f (a) · f (b) für alle a, b ∈ G. Es ist f (eG ) = f (eG ∗ eG ) = f (eG ) · f (eG ) und somit f (eG ) = eH nach Lemma 1.1. Ist f zusätzlich eine Bijektion, so heißt f ein (Gruppen-) Isomorphismus, und (G, ∗) und (H, ·) heißen isomorph. Der Kern eines Homomorphismus f : G → H ist definiert durch kern(f ) := {a ∈ G : f (a) = eH }, wobei eH das neutrale Element von H sei. Beispiel 1.6 Sei n ∈ IN. Die Abbildung f : Z → Zn , definiert durch f (j) := [j], j ∈ Z, ist ein Homomorphismus von (Z, +) nach (Zn , +) mit kern(f ) = {kn : k ∈ Z}. Beispiel 1.7 (Symmetrische Gruppe) Es sei G eine nichtleere Menge. Es bezeichne Sym G := {f : f : G → G bijektiv} die Menge aller Bijektionen auf G. Sym G mit der Hintereinanderausführung ◦ heißt symmetrische Gruppe von G. Im Falle G = {1, 2, . . . , n} besteht Sym G aus den n! Permutationen von G, mit neutralem Element idG Definition. Es sei (G, ∗) eine Gruppe mit neutralem Element e. Sei U ⊆ G eine nichtleere Teilmenge von G. Wir sagen kurz : ” U ist Untergruppe von G ”, falls (U, ∗) eine Gruppe mit neutralem Element e ist. Mit anderen Worten, falls e ∈ U, Aus a ∈ U und b ∈ U folgt a ∗ b ∈ U , Für alle a ∈ U ist a−1 ∈ U . 5 Definition. Es sei (G, ∗) eine Gruppe mit neutralem Element e. Eine Untergruppe U von G heißt Normalteiler von G, falls g ∗ U = U ∗ g für alle g ∈ G gilt. Mit anderen Worten, falls {g ∗ u : u ∈ U } = {v ∗ g : v ∈ U } für alle g ∈ G. Beispiel 1.8 Es sei G die Menge aller reellen nichtsingulären n × n-Matrizen, verknüpft durch die Matrizenmultiplikation ∗. Es sei U := {A ∈ G : det(A) = 1}. Dann gilt : (G, ∗) ist eine Gruppe mit neutralem Element I := diag(1, . . . , 1). U ist eine Untergruppe von G. U ist sogar Normalteiler von G. Für endliche Gruppen gilt Satz 1.4. ( Satz von Lagrange [1736-1813] ) Es sei U eine Untergruppe von (G, ∗), wobei G endlich sei. Dann ist |U | ein Teiler von |G|. Beweis. Zu g ∈ G bilden wir die sogenannte Nebenklasse U g := {u ∗ g : u ∈ U }. Es ist |U g| = |U |, denn gilt für zwei Elemente u, v ∈ U , dass u ∗ g = v ∗ g erfüllt ist, so folgt aus Satz 1.3 durch Kürzen, dass u = v. Es ist stets g ∈ U g, da e ∈ U und somit e ∗ g = g ∈ U g. Also ist [ G= U g. g∈G Verschiedene Nebenklassen sind disjunkt. Um dies zu beweisen, nehmen wir an, zwei Nebenklassen U g und U h besitzen ein gemeinsames Element x, das heißt, es sei x ∈ U g ∩ U h. Dann existieren v, w ∈ U mit x = v ∗ g = w ∗ h, und es ist g = v −1 ∗ (w ∗ h). Sei nun u ∈ U , also u ∗ g ∈ U g. Dann ist u ∗ g = u ∗ (v −1 ∗ (w ∗ h)) = (u ∗ v −1 ∗ w) ∗ h. Da U eine Untergruppe ist, ist u ∗ v −1 ∗ w ∈ U und somit u ∗ g ∈ U h. Da diese für alle u ∈ U gilt, haben wir bewiesen, dass U g ⊆ U h. Ähnlich beweisen wir, dass U h ⊆ U g, und somit U g = U h erfüllt ist. Seien nun U g1 , U g2 , . . . , U gm die verschiedenen Nebenklasse, so gilt |G| = m|U |. Definition. Zu einer Gruppe (G, ∗) mit neutralem Element e definieren wir zu a ∈ G die Potenzen a0 := e a1 := a a2 := a ∗ a an := a ∗ an−1 , a−n := (an )−1 , 6 n ∈ IN n ∈ IN. Definition. Eine Gruppe (G, ∗) mit neutralem Element e heißt zyklische Gruppe, falls ein Element g ∈ G existiert, so dass G = {g k : k ∈ Z}. g heißt Erzeuger von G und |G| heißt Ordnung von g (kurz : ord(g)). Beispiel 1.9 Es ist (Z, +) eine zyklische Gruppe mit den Erzeugern 1 und −1. Satz 1.5. Sei (G, ∗) eine endliche Gruppe, deren Mächtigkeit |G| eine Primzahl ist. Dann ist (G, ∗) zyklisch. Jedes Element a ∈ G, ungleich dem neutralen Element e von G, ist ein Erzeuger von G, also ord(a) = |G|. Außerdem ist G = {e, a, a2 , . . . , a|G|−1 }. Beweis. Sei a ∈ G, a 6= e. Wir bilden die Folge e = a0 , a = a1 , a2 , . . . der Potenzen so lange, bis erstmals für zwei Indizes 0 ≤ q < p die Identität aq = ap gilt. Nach Satz 1.3 ist Kürzen in einer Gruppe erlaubt. Daher ist m = 0, und U = {e, a1 , . . . , ap−1 } bildet eine zyklische Untergruppe von G. Nach Satz 1.4 (Lagrange) ist |U | = p ein Teiler von |G|, also p = |G|, da |G| Primzahl ist. Wegen Satz 1.5 spricht man auch von der Primzahlordnung |G|, falls |G| Primzahl ist. Korollar 1.6. Jede endliche Gruppe (G, ∗) der Primzahlordnung |G| = p ist isomorph zu (Zp , +). Beweis. Sei a ∈ G, a 6= e. Dann wird durch f ([0]) = e, f ([j]) = aj , j = 1, . . . , p − 1, ein Isomorphismus f : Zp → G definiert. Satz 1.7. Sei (G, ∗) eine endliche Gruppe mit neutralem Element e. Für jedes a ∈ G ist ord(a) ein Teiler von |G| und somit a|G| = e. (1.3) Beweis. Ist a = e, so gilt (1.3). Sei a ∈ G, a 6= e. Wir bilden die Folge (e = a0 , a, a2 , . . .) bis erstmals Indizes 0 ≤ q < p auftauchen mit aq = ap . Da wir in der Gruppe kürzen dürfen, folgt q = 0, also ap = e; und Ua = {e, a, a2 , . . . , ap−1 } ist eine zyklische Gruppe mit Erzeuger a der Ordnung |Ua | = p = ord(a). Nach Satz 1.4 ist p ein Teiler von |G|, also |G| = pN für ein N ∈ IN. Folglich gilt a|G| = apN = (ap )N = eN = e, was zu beweisen war. In §3 werden wir den Satz von Euler beweisen. Ein Spezialfall dieses Satzes ist Satz 1.8. ( Kleiner Satz von Fermat [1601-1665], 1640) Ist n eine Primzahl, so gilt für alle k ∈ {1, 2, . . . , n − 1}, dass k n−1 = 1 7 mod n. §2. Ringe und Körper Statt A oder G nennen wir die Mengen in diesem Paragraphen meist R (für Ring). Auf R werden nun zwei Operationen + : R × R → R und · : R × R → R definiert. Definition: Es heißt (R, +, ·) ein Ring, falls (R, +) eine kommutative Gruppe mit neutralem Element (Nullelement) 0 ist, (R, ·) ein Monoid mit neutralem Element (Einselement) 1 ist, und die folgenden Distributivgesetze gelten : a · (b + c) = a · b + a · c (a + b) · c = a · c + b · c für alle a, b, c ∈ R. Hierbei vereinbaren wir, dass a · b + a · c eigentlich (a · b) + (a · c) und a · c + b · c eigentlich als (a · c) + (b · c) bedeutet, also die Operation · vor + auszuführen ist. Definition: Ein Ring (R, +, ·) heißt kommutativer Ring, falls a · b = b · a für alle a, b ∈ R. Ein kommutativer Ring (R, +, ·) heißt Körper, falls (R \ {0}, ·) eine kommutative Gruppe (mit neutralem Element 1) ist. Beispiel 2.1 (Z, +, ·) ist ein kommutativer Ring, aber kein Körper. | , +, ·) sind Körper. (Q, +, ·), (IR, +, ·), (C Beispiel 2.2 Sei n ≥ 2. Dann bilden die n × n-Matrizen IRn×n bezüglich der Matrizenaddition und der Matrizenmultiplikationen einen (nichtkommutativen) Ring. Beispiel 2.3 (aus der Zahlentheorie) Es sei n ∈ IN, n ≥ 2. Es sei Zn die Menge der Restklassen modulo n, also Zn = {[0], [1], . . . , [n − 1]}. In Zn führt man die Addition + wie in Beispiel 1.5 ein, sowie die Multiplikation · durch [j] · [k] := [jk], 0 ≤ j, k ≤ n − 1. Satz 2.1. Es ist (Zn , +, ·) ein kommutativer Ring mit dem Nullelement [0] und dem Einselement [1]. Es ist (Zn , +, ·) ein Körper genau dann, wenn n eine Primzahl ist. Beweis. Es ist (Zn , +, ·) ein Ring. Ich überlasse es Ihnen, die Ring-Axiome nachzuprüfen. Dieser Ring ist kommutativ, da die Multiplikation in Z kommutativ ist. Ist n keine Primzahl, dann existieren natürliche Zahlen j ≥ 2 und k ≥ 2, so dass jk = n ist und somit [j] · [k] = [n] = [0] gilt. Ist n eine Primzahl, so ist dies nicht möglich. Folglich 8 ist die Einschränkung von · auf Zn \ {[0]} eine Verknüpfung auf Zn \ {[0]} genau dann, wenn n eine Primzahl ist. Sei n eine Primzahl. Wir wissen bereits aus dem ersten Teil des Satzes, dass (Zn , +, ·) ein kommutativer Ring ist. Dies beinhaltet u.a., dass (Zn , ·) ein Monoid mit Einselement [1] ist. Um zu zeigen, dass dann (Zn , +, ·) sogar ein Körper ist, müssen wir nur noch zeigen, dass zu jedem [a] ∈ Zn \ {[0]} ein b ∈ Zn \ {[0]} existiert mit [a] · [b] = [1]. Ist a = [1], so a−1 = [1]. Ist a 6= [1], so folgt aus Satz 1.8, dass [a]−1 = [an−2 ], denn dann ist [a] · [an−2 ] = [a · an−2 ] = [an−1 ] = [1], was zu beweisen war. Definition. Ein Ring R heißt nullteilerfrei, falls aus a 6= 0, b 6= 0, stets a · b 6= 0 folgt. Zum Beispiel ist (Zn , +, ·) genau dann nullteilerfrei, wenn n eine Primzahl ist. Definition. Seien (R, +, ·) und (S, +, ·) Ringe. Eine Abbildung f : R → S, f 6≡ 0, heißt (Ring-) Homomorphismus vom R nach S, falls f (0) = 0, f (1) = 1, sowie f (a + b) = f (a) + f (b) und f (a · b) = f (a) · f (b) für alle a, b ∈ R erfüllt sind. Ist f zusätzlich eine Bijektion, so heißt f (Ring-) Isomorphismus, oder auch ein (Ring-) Automorphismus auf R im Falle R = S. Zum Beispiel ist die Abbildung f : Z → Zn , f (k) := [k], k ∈ Z, ein Ringhomomorphismus. Ergänzung: Satz 2.2. (Fundamentalsatz der Algebra) | [x] vom Grade n ∈ IN mit Hauptkoeffizient a Es sei P ∈ C n 6= 0. Dann existieren n komplexe Zahlen z1 , . . . , zn , so dass P (z) = an n Y (z − zj ) | . für alle z ∈ C j=1 Bis auf die Reihenfolge sind die Zahlen z1 , . . . , zn eindeutig. §3. Das Rechnen modulo n Die Definitionen, Sätze und Algorithmen dieses Paragraphen werden in der Kryptographie (siehe Kap. 2) eine große Rolle spielen. Wir beginnen mit dem euklidischen Algorithmus (Division mit Rest) für zwei gegebene Zahlen a, b ∈ IN, b > a : 9 Berechne die Zahlenpaare ck , rk ∈ IN, k = 1, 2, . . . , N , sowie cN+1 ∈ IN als Lösung der folgenden Bedingungen : b = c1 a + r1 , r1 < a, a = c2 r1 + r2 , r2 < r1 , r1 = c3 r2 + r3 , r3 < r2 , ··············· ··············· rN−2 = cN rN−1 + rN , rN < rN−1 , rN−1 = cN+1 rN . Da r1 > r2 > · · · > 0 erfüllt ist, stoppt das Verfahren nach endlich vielen Schritten, sobald rN+1 = 0 ist. Beispiel : Berechne nach dem euklidischen Algorithmus den ggT(3276, 141). Lösung: 3276 = 23 ∗ 141 + 33 141 = 4 ∗ 33 + 9 33 = 3 ∗ 9 + 6 9 =1∗6+3 6=2∗3 Der euklidische Algorithmus berechnet den größten gemeinsamen Teiler von a und b, in Zeichen ggT(a, b), denn es gilt Satz 3.1. Seien (a, b) ∈ IN, b > a, dann ist rN = ggT(a, b). Beweis. Sei t ein gemeinsamer Teiler von a und b. Wir gehen im euklidischen Algorithmus von oben nach unten. Dann folgt sukzessive, dass t auch ein Teiler von r1 , r2 , . . .,rN ist. Gehen wir im euklidischen Algorithmus von unten nach oben, so folgt sukzessive, dass rN ein Teiler von rN−1 ,rN−2 , . . ., r1 , a, b ist. Somit ist rN der ggT(a, b). Definition Sei n ∈ IN, n ≥ 2. Dann heißt Z∗n := { [a] ∈ Zn : 1 ≤ a ≤ n − 1, ggT(a, n) = 1} die Menge der Einheiten von Zn . 10 Satz 3.2. (Z∗n , ·) ist eine Gruppe mit dem Einselement [1]. Beweis. Es ist [1] ∈ Z∗n . Sind [a], [b] ∈ Z∗n , so auch [ab] ∈ Z∗n . Also ist (Z∗n , ·) ein kommutatives Monoid. Für a = 1 ist [1]−1 = [1] das inverse Element. Für 2 ≤ a ≤ n − 1, [a] ∈ Z∗n , bilden wir die Folge [1] = [a0 ], [a] = [a1 ], [a2 ], . . . aus Z∗n bis erstmals für zwei Indizes 0 ≤ p < q < n die Identität [ap ] = [aq ] gilt. Dann existiert ein N ∈ IN, so dass aq = ap + N n ist. Da n und a teilerfremd sind, sind auch n und ap teilerfremd. Folglich existiert ein M ∈ IN, so dass N = ap M und somit aq = ap + ap M n. Wäre p ≥ 1, so wäre aq−p = 1 + M n, also [aq−p ] = [1], im Widerspruch zur Annahme, dass [ap ] = [aq ] erstmals gilt. Es folgt, dass p = 0 und [aq ] = [1] und somit [aq−1 ] = [a]−1 gilt. Dies beweist, dass (Z∗n , ·) eine Gruppe ist. Offenbar ist (Z∗n , ·) eine Gruppe der Mächtigkeit φ(n) := {a ∈ IN : 1 ≤ a ≤ n − 1, ggT(a, n) = 1}. Die so definierte Funktion φ : IN → IN heißt Eulersche φ-Funktion. Wenden wir die Formel (1.3) des Satzes 1.7 auf die Gruppe (Z∗n , ·) an, so erhalten wir den wichtigen Satz 3.3. (von Euler [1707-1783]) Sei a ∈ IN und n ∈ IN, n ≥ 2. Gilt ggT(a, n) = 1, dann ist aφ(n) = 1 mod n. Ist n eine Primzahl, so ist φ(n) = n − 1, sowie an−1 = 1 mod n. Dies ist der kleine Satz von Fermat (Satz 1.8). Wir beschließen unsere Diskussion über Themen der Algebra mit zwei wichtigen Sätzen (ohne Beweise) und einigen Beispielen: Satz 3.4. Sei n ∈ IN, n ≥ 2. Dann gibt es ein N ∈ IN, sowie Primzahlen p1 < p2 < · · · < pN und natürliche Zahlen n1 , n2 , . . . , nN , so dass n = N Y pnk k , (4.1) k=1 die Primzahlzerlegung von n. Diese Zerlegung ist eindeutig. Zur Berechnung der Primzahlzerlegung einer Zahl n ∈ IN kann man das Sieb des Eratosthenes [275-195] verwenden. Zur Berechnung von φ(n) verwenden wir 11 Satz 3.5. Es habe n ∈ IN die Primzahlzerlegung (4.1). Dann ist φ(n) = n N Y k=1 1 1− pk = N Y k=1 pnk k − pnk k −1 . Beispiel 3.1 Sei n = pq das Produkt zweier Primzahlen p und q, so ist nach Satz 3.5 φ(n) = (p−1)(q−1). Beispiel 3.2 Sei n = 4312. Wegen 4312 = 23 ∗ 72 ∗ 11 ist nach Satz 3.5 φ(4312) = (23 − 22 )(72 − 7) ∗ (11 − 1) = 4 ∗ 42 ∗ 10 = 1680. Beispiel 3.3 Berechne 21.000.000 mod 77. Wir schreiben a ≡ b, falls a = b mod 77. Es ist n = 77 = 7 ∗ 11, daher φ(n) = 6 ∗ 10 = 60. Da ggT(2, 77) = 1 ist, gilt nach dem Satz von Euler, dass 260 ≡ 1. Wegen 1.000.000 = 60 ∗ 16.666 + 40 ist daher 21.000.000 = 260∗16.666 ∗ 240 ≡ 240 . Wir rechnen nun nach dem sog. square-and-multiply-Verfahren weiter: Es ist 22 ≡ 4 24 ≡ 16 28 ≡ 256 ≡ 25 216 ≡ 625 ≡ 9 232 ≡ 81 ≡ 4 und somit 240 = 28 ∗ 232 ≡ 25 ∗ 4 = 100 ≡ 23. Im nächsten Kapitel benötigen wir Satz 3.6. Es seien a, b ∈ IN, 1 < a < b, mit ggT(a, b) = 1. Dann gibt es genau eine Zahl d ∈ IN, 1 < d < b, so dass ad = 1 mod b. Beweis. Wir führen den euklidischen Algorithmus durch. Wegen ggT(a, b) = 1 ist die vorletzte Zeile von der Form rN−2 = cN rN−1 + 1. Gehen wir im euklidischen Algorithmus nun von unten nach oben, so können wir leicht die Zahl d ∈ IN ausrechnen. 12 Kapitel 2 : Kryptographie Vertiefende Literatur : Thomas Ihringer, Diskrete Mathematik, Kapitel IV (2002) A. Beutelspacher, Kryptologie, Vieweg Verlag J. Buchmann, Introduction to cryptography, Springer Verlag R. Matthes, Algebra, Kryptologie und Kodierungstheorie, Hanser Verlag In der Codierungstheorie geht es um die Sicherung der Daten gegen ”zufällige Störungen”, in der Kryptographie hingegen um die Sicherung der Daten gegen ”unbefugten Zugriff” und gegen ”unbefugte Änderungen” der Daten. Code = System zur Verschlüsselung von Nachrichten, Codierung = Verschlüsselung von Nachrichten, Kryptogramm = Geheimschrift, Kryptographie = Geheimschrift (veraltet nach Goldmann Lexikon), Beispiel 1.1 (Cäsar-Chiffre) Wähle ein k ∈ IN, 1 ≤ k ≤ 25, und sende die Nachricht, in dem jeder Buchstabe des Alphabets {a, b, . . . , z} durch den Buchstaben (modulo 26) ersetzt wird, der um k Stellen später folgt. Schema eines Kryptosystems: Nachricht → Verschlüsselungsalgorithmus → Kryptogramm → Entschlüsselungsalgorithmus → Nachricht. In Beispiel 1.1 wird die Nachricht ”Informatik” für k = 21 zu IN F ORM AT IK → DIAJM HV ODF → IN F ORM AT IK Definition Es seien M, C, K endliche Mengen. Für jedes k ∈ K sei eine injektive Abbildung fk : M → C gegeben. Man nennt die Familie F = {fk : k ∈ K} von Abbildungen ein Kryptosystem (Chiffre). Die Elemente von M heißen Nachrichten (messages), die Elemente von C heißen Schlüsseltexteinheiten (cryptograms), die Elemente von K heißen Schlüssel (keys). In Beispiel 1.1 ist K = {1, 2, . . . , 25}, der Schlüssel ist k = 21, das Kryptogramm ist f21 (IN F ORM AT IK) = DIAJM HV ODF Das wohl bekannteste public-key-Kryptosystem ist das RSA-Kryptosystem (Rivest, Shamir, Adleman, 1978) Dieses System beruht auf der Tatsache, dass es ungeheuer aufwendig ist, eine große Zahl n ∈ IN in ihre Primfaktoren zu zerlegen, n = p1 p2 · · · pm . Umgekehrt ist es sehr einfach, n und φ(n) auszurechnen, wenn die Primfaktoren p1 , p2 , . . . , pm bekannt sind. Es ist kein Algorithmus bekannt, der in polynomialer Rechenzeit die Faktorisierung von n findet. 13 Teilnehmer A, der Empfänger der Nachricht, wählt zwei sehr große Primzahlen p und q, p 6= q, die er niemandem mitteilt; in der Praxis zum Beispiel je mit ungefähr 100 Dezimalstellen. (Wir wollen hier nicht besprechen, wie man auf ”billige Art” große Primzahlen gewinnt.) Teilnehmer A berechnet das Produkt n := pq, sowie φ(n) = (p − 1)(q − 1). Dann wählt er eine Zahl a ∈ IN, 1 < a < φ(n), mit ggT(a, φ(n)) = 1, und führt den euklidischen Algorithmus für b := φ(n) und a durch. Hieraus gewinnt er, von unten nach oben gehend (siehe Satz 3.6, Kap. 1) die eindeutig bestimmte Zahl d ∈ IN, 1 < d < φ(n), so dass ad = 1 mod φ(n). Nur Teilnehmer A kennt die Zahlen d und φ(n). Teilnehmer B möchte eine Nachricht an Teilnehmer A senden. Er kennt nur die Zahlen n und a. Dies sind die öffentlichen Schlüssel (public keys). Die Nachricht ist eine Zahl x ∈ M := {1, 2, . . . , n − 1}. Teilnehmer B sendet an A die verschlüsselte Nachricht y ∈ M (das Kryptogramm), y := f (x) := xa mod n, y ∈ M. Zum Entschlüsseln verwendet der Teilnehmer A die Funktion g : M → M mit g(y) := y d mod n, g(y) ∈ M. Wird korrekt verschlüsselt und entschlüsselt, dann erhält der Empfänger die exakte Nachricht x ∈ M, denn es gilt g(f (x)) = (xa )d = xad = x mod n. (1.1) Beweis von (1.1) (nicht vortragen) Wegen a, d ≥ 2 mit ad = 1 (mod φ(n)) existiert ℓ ∈ IN, so dass ad = 1 + ℓφ(n). Also ist xad = x1+ℓφ(n) = x ∗ xℓφ(n) = x ∗ (xφ(n) )ℓ . (1.2) 1. Im Falle ggT(x, n) = 1 folgt aus dem Satz von Euler, dass xφ(n) = 1 (mod n) und somit xad = x (mod n). 2. Im Falle x = pm , m ∈ IN, ist xφ(n) = (pm )(p−1)(q−1) = (pm(p−1) )q−1 . Sei η := pm(p−1) . Nach dem kleinen Satz von Fermat ist η q−1 = 1 (mod q), und somit xφ(n) = 1 (mod q) und auch (xφ(n) )ℓ = 1 (mod q). Daher existiert ein r ∈ IN so dass (xφ(n) )ℓ = 1 + rq und somit wegen (1.2), für x = pm und n = pq, xad = pm (xφ(n) )ℓ = pm + rqpm = x + rpm−1 n. Also gilt (1.1). 14 3. Im Falle x = x0 pm , m ∈ IN, ggT(x0 , n) = 1 ist nach 1. und 2. φ(n) xφ(n) = (x0 pm )φ(n) = x0 (pm )φ(n) ) = x0 (1 + ℓ1 n)pm (1 + ℓ2 n) = x mod n. Vertauschen wir in 2. und 3. p mit q so haben wir alle Fälle für x diskutiert. Die Berechnung von y := f (x) und x := g(y) übernimmt der Computer. Der Empfänger A benötigt zum Lesen der Nachricht die Zahlen n und d. Nur er kennt die Zahl d. Beispiel 1.2 Die unverschlüsselte Nachricht bestehe aus einem Wort der Länge 2 im Alphabet {A, B, C, . . . , Z} (mit N = 26 Buchstaben). Dem Empfänger A sollen die Anfangsbuchstaben des Vor- und des Nachnamens einer Person geschickt werden. Die öffentlichen Schlüssel sind (n, a) = (779, 103). Wir prüfen nach, dass n = 779 = 19 ∗ 41, also φ(n) = 18 ∗ 40 = 720. Es ist ggT(103, 720) = 1, denn der euklidischen Algorithmus für φ(n) und a ergibt φ(n) = 720 = 6 ∗ 103 + 102 103 = 1 ∗ 102 + 1, also 1 = 103 − 1 ∗ 102 = 103 − 1 ∗ (φ(n) − 6 ∗ 103) = 7 ∗ 103 − 1 ∗ φ(n). Folglich ist d = 7, denn a ∗ 7 = 103 ∗ 7 = 1 + φ(n). Nur der Empfänger A kennt die Zahl d = 7. Der Name der Person sei Hans Richter. Wegen A = 1, B = 2,. . .,H = 8,. . ., R = 18,. . ., Z = 26 ist ”HR” ≡ 8 ∗ 27 + 18 ∗ 270 = 234. Nach dem ”square-and-multiply-Verfahren” (bezüglich n = 779) berechnen wir, dass 234103 = 498 mod 779 wie folgt : Es ist modulo 779 (≡) 2342 = 226 mod 779 2344 = 441 mod 779 2348 = 510 mod 779 23416 = 693 mod 779 23432 = 385 mod 779 23464 = 215 mod 779 und somit wegen 103 = 64 + 32 + 4 + 2 + 1 f (234) = 234103 = 234 ∗ 226 ∗ 441 ∗ 385 ∗ 215 mod 779 = 691 ∗ 441 ∗ 385 ∗ 215 mod 779 = 142 ∗ 385 ∗ 215 mod 779 = 140 ∗ 215 mod 779 = 498 mod 779 15 also f (234) = 498 (mod 779). Es gilt f (234) = 498 = 18 ∗ 271 + 12 ∗ 270 ≡ RL. Der Empfänger A kennt die zum Entschlüsseln notwendige Zahlen (n, d) = (779, 7) und berechnet nach dem ”square-and-multiply-Verfahren” mod 779 g(498) = 4987 ≡ 498 ∗ 2823 ≡ 498 ∗ 282 ∗ 66 ≡ 216 ∗ 66 ≡ 234, und somit ”HR”. Wegen der kleinen Zahlen kann das Kryptosystem dieses Beispiels natürlich leicht gebrochen werden. 16 Kapitel 3 : Graphentheorie Vertiefende Literatur: M. Aigner : Diskrete Mathematik, Vieweg, 5.Auflage, 2004 R. Diestel, Graphentheorie, Springer Verlag Th. Ihringer : Diskrete Mathematik, Kapitel I und II, Heldermann Verlag, 2002 §1. Graphentheorie Wir setzen in Kapitel 3 stets voraus, dass • V eine endliche Menge ist, |V | ≥ 2. Ihre Elemente heißen Knoten (vertices). • Die Gesamtheit aller ungerichteten Kanten (edges) bezeichnen wir mit E0 := {u, v} : u, v ∈ V, u 6= v . Definition Sei E ⊆ E0 . Das Paar G = (V, E) heißt ungerichteter Graph (kurz : Graph) mit Knoten V und Kanten E. Zwei Knoten u und v heißen benachbart (adjazent), falls {u, v} ∈ E. Ist E = E0 , so heißt G vollständig. Im ungerichteten Graphen unterscheidet man nicht zwischen {u, v} und {v, u}. Definition Oft stellt man einen Graphen G = (V, E) mit Hilfe seiner Adjazenzmatrix AG dar : Man nummeriert die Knoten von V in geeigneter Weise durch, V = {v1 , . . . , vn }, n := |V |, und definiert die Adjazenzmatrix AG = (ajk )nj,k=1 durch ajk := 1, ∗, falls {vj , vk } ∈ E, falls {vj , vk } 6∈ E. Offensichtlich ist A eine symmetrische Matrix. Beispiele mit V = {v1 , v2 , . . . , vn } ⊂ IR2 : 1. Vollständiger (V, E0 ) mit n = 4 : K4 . 2. Ein Baum 3. Ein Graph G = (V, E) mit Kreisen 4. Ein bipartiter Graph G = (V, E). Definition Zwei Graphen G = (V, E) und G̃ = (Ṽ , Ẽ) heißen isomorph, falls eine bijektive Abbildung f : V → Ṽ existiert, so dass {u, v} ∈ E genau dann, wenn {f (u), f (v)} ∈ Ẽ. Definition Ein Graph G̃ = (Ṽ , Ẽ) heißt Teilgraph von G = (V, E), falls Ṽ ⊆ V und Ẽ ⊆ E erfüllt sind. 17 Definition In einem Graph G = (V, E) heißt ν(v) := u ∈ V : {u, v} ∈ E die Valenz des Knoten v ∈ V . D.h., ν(v) ist die Anzahl der Nachbarn von v. Definition Es sei G = (V, E) ein Graph. Jede Folge W = (v0 , v1 , . . . , vm ) von Knoten in V heißt Kantenzug in G, falls ej := {vj , vj+1 } ∈ E, j = 0, 1, . . . , m − 1. W heißt offen, falls v0 6= vm , und geschlossen, falls v0 = vm . Wenn die Kanten ej alle verschieden sind, so heißt W ein Weg, im Falle v0 6= vm ein offener Weg, im Falle v0 = vm ein Kreis. Ein Weg W heißt einfach, wenn alle m + 1 Knoten v0 , v1 , . . . , vm verschieden sind (offener einfacher Weg) oder wenn v0 , v1 , . . . , vm−1 verschieden sind und v0 = vm gilt (einfacher Kreis). Der Graph G = (V, E) heißt zusammenhängend, wenn zu jedem Knotenpaar u, v ∈ V ein Weg von u nach v in G existiert. Zwei Knoten u, v ∈ V heißen verbindbar, falls ein Weg von u nach v in G existiert. Beweisen Sie: Die Verbindbarkeit im Graphen G = (V, E) ist eine Äquivalenzrelation. Sie bewirkt eine Partition von G in disjunkte Teilgraphen, die sogenannten Zusammenhangskomponenten. Beispiel eines Graphen G = (V, E) mit drei Zusammenhangskomponenten. Definition Ein Graph G = (V, E) heißt Baum, wenn er zusammenhängend ist und keinen Kreis enthält. Beispiel eines Baums G = (V, E). Lemma 1.1. Sei G = (V, E) ein Baum. Dann gibt es mindestens zwei Knoten der Valenz 1. Beweis. Da G zusammenhängend ist, besitzt jeder Knoten die Valenz ≥ 1. Sei v0 ein Knoten der Valenz ν(v0 ) ≥ 2. Seien v1 und u1 Nachbarn von v0 , v1 6= u1 . Da G = (V, E) keinen Kreis enthält und |V | endlich ist, existieren Wege W = (v0 , v1 , . . . , vm ) und W ′ = (v0 , u1 , . . . , uq ) in G mit ν(vm ) = 1 und ν(uq ) = 1, sowie vm 6= uq . Lemma 1.2. Für einen Baum G = (V, E) ist |V | = |E| + 1. Beweis. Induktiver Beweis bezüglich n := |V |. Ist |V | = 2, so ist |E| = 1, da G zusammenhängend ist. 18 Die Aussage des Lemmas gelte für ein n ≥ 2. Beweis für n + 1 : Sei G = (V, E) ein Baum mit |V | = n + 1. Nach Lemma 1.1 besitzt G mindestens zwei Knoten mit Valenz 1. Sei w ein solcher Knoten und {w, w′ } die einzige Kante mitKnoten w. Wir betrachten den Graphen G̃ = (Ṽ , Ẽ), wobei Ṽ := V \ {w} und ′ Ẽ := E \ {w, w } . Offensichtlich ist auch G̃ ein Baum. Nach Induktionsannahme ist |Ṽ | = |Ẽ| + 1. Wegen |V | = |Ṽ | + 1 und |E| = |Ẽ| + 1 ist |V | = |E| + 1. Unter den zusammenhängenden Graphen können die Bäume einfach charakterisiert werden: Satz 1.3. Es sei G = (V, E) ein zusammenhängender Graph. Dann gilt |V | ≤ |E| + 1. Es gilt |V | = |E| + 1 genau dann, wenn G ein Baum ist. Beweis. Es sei G = (V, E) zusammenhängend. Ist G ein Baum, so ist nach Lemma 1.2 |V | = |E| + 1. Ist G kein Baum, so enthält G einen Kreis. Dann entfernen wir eine Kante dieses Kreises. Der verbleibende Graph G̃ = (V, Ẽ) ist ebenfalls zusammenhängend, wobei |Ẽ| = |E| − 1. Ist G̃ kein Baum, so enthält er einen Kreis, dem wir eine Kante entnehmen, u.s.w. bis der verbleibende Graph G′ = (V, E ′ ) zwar zusammenhängend ist, aber keinen Kreis enthält, also ein Baum ist. Also ist dann nach Lemma 1.2 |V | = |E ′ | + 1 und somit |V | > |E| + 1. Zu jedem zusammenhängenden Graphen G = (V, E) gibt es mindestens einen den Graphen G aufspannenden Baum G′ = (V, E ′ ). Einen solchen Baum G′ kann man mit Hilfe des im letzten Beweis beschriebenen Verfahrens gewinnen. Länge eines Kantenzugs : Einem Kantenzug W = (v0 , v1 , . . . , vm ) in G = (V, E) ordnen wir die Länge |W | = m zu. Der Abstand d(v, w) zweier Knoten v, w ∈ V ist das Minimum der Längen aller Kantenzüge von v nach w in G. Insbesondere ist d(v, v) = 0. Wir setzen d(v, w) = ∞, falls kein Kantenzug von v nach w existiert. Problem 1.1 Sei G = (V, E) ein zusammenhängender Graph. Sei r ∈ V irgendein Knoten. Berechne einen den Graphen G aufspannenden Baum G(r), so dass zu jedem Knoten v ∈ V der Weg von r nach v die Länge d(r, v) besitzt. Man nennt G(r) einen kürzesten Baum in G mit Wurzel r. Lösung von Problem 1.1 In §2 werden wir den Algorithmus von Dijkstra (1959) für gewichtete Graphen kennenlernen, der auch zur Lösung von Problem 1.1 verwendet wird. Beispiel eines binären Baums mit Wurzel r : Definition (Ebener Graph) Es sei G = (V, E) ein Graph, wobei alle Knoten im IR2 liegen. Der Graph G heißt eben, falls es möglich ist, 19 (1.1) alle Kanten {v, w} ∈ E durch offene Jordankurven in IR2 \ V mit Endpunkten v und w so darzustellen, dass je zwei dieser Kurven sich nicht in IR2 \ V schneiden. Beispiel eines ebenen Graphen. Wir überprüfen die Formel von Euler des nächsten Satzes. Satz 1.4. (Formel von Euler, 1752) Es sei G = (V, E) ein zusammenhängender ebener Graph. Es seien alle Kanten von G durch ein Kurvensystem (1.1) gezeichnet. Dieses Kurvensystem bildet die Ränder von insgesamt |F | Flächen (eine äußere und |F | − 1 innere Flächen). Dann gilt |V | − |E| + |F | = 2. Beweis. Den Induktionsbeweis nach n := |E| sollen Sie sich selbst überlegen . Definition (Planarer Graph) Ein Graph G = (V, E) heißt planar , falls er isomorph zu einem ebenen Graphen ist. Im Satz von Kuratowski (1930) werden die planaren Graphen charakterisiert (Literatur befragen). Definition Eine Knotenfärbung eines Graphen G = (V, E) mit k Farben ist eine Abbildung c : V → {1, 2, . . . , k}, so dass für alle Kanten {v, w} ∈ E die Ungleichung c(v) 6= c(w) gilt. Beispiel einer Knotenfärbung eines ebenen Graphen. Satz 1.5. (Vierfarbensatz von Appel-Haken, 1976) Für jeden ebenen Graphen G = (V, E) gibt es eine Knotenfärbung mit höchstens 4 Farben. Anwendung bei Landkarten : Länder sind die Knoten, gemeinsame Grenzen sind die Kanten. Definition Ein offener Weg (Kreis) im Graphen G = (V, E) heißt offener eulerscher Weg (eulerscher Kreis), wenn er alle Kanten von G einmal enthält (und somit genau einmal). Definition Ein Graph G = (V, E) heißt eulerscher Graph, wenn er einen eulerschen Kreis enthält. 20 Satz 1.6. (Euler) Ein zusammenhängender Graph G = (V, E) ist genau dann ein eulerscher Graph, wenn durch jeden Knoten v ∈ V eine gerade Anzahl von Kanten in E läuft. Das heißt, die Valenz ν(v) aller Knoten v ∈ V ist gerade. Beweis. Diesen Beweis sollen Sie sich selbst überlegen . Das Königsberger Brückenproblem von Euler [1707-1782], der oft als Vater der Graphentheorie bezeichnet wird : Ist es möglich, bei A zu starten, jede Brücke einmal zu überqueren und nach A zurückzukehren ? Eine Skizze findet man in jedem Lehrbuch. Definition Ein offener Weg (Kreis) im Graphen G = (V, E) heißt offener hamiltonscher Weg (hamiltonscher Kreis), wenn er alle Knoten in V genau einmal enthält (nur den Endknoten zweimal). Zeige, dass ein offener hamiltonscher Weg in einem Graphen G = (V, E) ein aufspannender Baum von G ist. Gibt es Graphen G = (V, E) mit aufspannenden Bäumen, die keine offenen hamiltonschen Wege sind ? Definition In einem Graphen G = (V, E) sei eine Abbildung ω : E → IR gegeben. Dann heißt (V, E, ω) ein gewichteter Graph. Die sogenannte Gewichtsfunktion ω kann als Matrix dargestellt werden : Man nummeriert die Knoten von V in geeigneter Weise durch, V = {v1 , . . . , vn }, n := |V |, und definiert die Gewichtsmatrix Aω = (ajk )nj,k=1 durch ω(vj , vk ), falls {vj , vk } ∈ E, ajk := ∗, falls {vj , vk } 6∈ E. Offensichtlich ist A eine symmetrische Matrix. Im Falle ω(vj , vk ) = 1 für alle {vj , vk } ∈ E ist Aω die Adjazenzmatrix von G. Traveling Salesman Problem (Handlungsreisender) Ein Handlungsreisender soll in einer Rundreise n Städte besuchen, die durch ein Straßennetz verbunden sind. Finde eine kürzeste Rundreise. Graphentheoretische Formulierung I : Es sei (V, E, ω) ein zusammenhängender gewichteter Graph mit positiver Gewichtsfunktion ω : E → IR. Sei K die Menge aller geschlossenen Kantenzüge in (V, E), die alle Knoten mindestens einmal enthalten. Finde ein K ∈ K minimaler Länge X ω(K) = ω(e). e∈K 21 Graphentheoretische Formulierung II : In dem vollständigen Graphen Kn = (V, E0 ), V = {v1 , . . . , vn }, führen wir die Gewichtsfunktion ω0 wie folgt ein : Es ist ω0 (vj , vk ) := min{ω(W ) : W ist Weg von vj nach vk in G}, j 6= k. Finde in (V, E0 , ω0 ) einen hamiltonschen Kreis minimaler Länge. Warum genügt es, hier nur hamiltonsche Kreise zu betrachten ? §2. Kombinatorische Optimierung §2.1. Algorithmus von Dijkstra Es sei G = (V, E) ein zusammenhängender Graph mit nichtnegativer (!!!) Gewichtsfunktion ω : E → IR. Der folgende Algorithmus von Dijkstra (1959) berechnet für (V, E, ω) einen kürzesten Baum mit Wurzel r ∈ V . Algorithmus von Dijkstra 1. Setze δ(r) := 0, sowie δ(v) := ∞ (oder sehr große Zahl) für alle v ∈ V , v 6= r; setze U := V . Mit U bezeichnen wir die Menge aller noch nicht permanent markierten Knoten. 2. Falls U = ∅ dann STOP. Sonst weiter mit 3. 3. Finde ein u ∈ U , so dass δ(u) = min δ(v). v∈U 4. Für alle v ∈ U mit {u, v} ∈ E berechne δ(v) := min δ(v); δ(u) + ω({u, v}) . Ist hierbei δ(v) = δ(u) + ω({u, v}), so markiere die Kante {u, v} durch P (v) := u, das heißt, u ist Vorgänger von v. Ist δ(v) = δ(u) + ω({u, v}) identisch mit dem vorhergehenden δ(v), so kann auch der vorhergehende Vorgänger P (v) von v gewählt werden. Beachte, dass jede Kante (u, v) ∈ E im Laufe des Verfahrens nur einmal betrachtet wird. 5. Setze U := U \ {u}. Weiter mit 2. Für jedes v ∈ V ist δ(v) der kürzeste Abstand von der Wurzel r. Einen kürzesten Baum finden wir, indem wir längs der markierten Kanten {P (v), v} zurückgehen. Beispiel zum Verfahren von Dijkstra : Definition Sei E ⊆ V × V . Dann heißt das Paar G = [V, E] ein gerichteter Graph, der auch Digraph (directed graph) genannt wird. 22 Aufgabe: Formuliere den Algorithmus von Dijkstra für einen Digraphen G = [V, E], E ⊆ V × V , mit nichtnegativer Gewichtsfunktion ω : E → IR. Man nennt das Tripel [V, E, ω] ein (gerichtetes) Netzwerk. §2.2. Maximale Flüsse Es sei [V, E] ein Digraph (=gerichteter Graph). Es sei c : E → IR eine nichtnegative Funktion, die nun als Kapazitätenfunktion interpretiert wird. Des weiteren seien zwei Knoten s ∈ V (= Quelle, source) und t ∈ V (= Senke), s 6= t, vorgegeben. Man nennt [V, E, c, s, t] Kapazitätennetzwerk (Flußnetzwerk, flow network) mit Quelle s und Senke t. Definition Ein Fluß f : E → IR ist eine Abbildung mit folgenden Eigenschaften : 1. 0 ≤ f (e) ≤ c(e) für alle e ∈ E. 2. Für alle Knoten v ∈ V \ {s, t} gilt X X f (e) = f (e), e∈E: e=(v,w) e∈E: e=(w,v) das heißt, was in v hineinfließt, kommt auch wieder heraus. Es folgt: Was in einem Fluß f aus der Quelle s fließt, verschwindet in der Senke t, Φ(f ) := X e∈E: e=(s,w) f (e) − X f (e) = X e∈E: e=(w,t) e∈E: e=(w,s) f (e) − X f (e). e∈E: e=(t,w) Es heißt Φ(f ) der Wert des Flusses f . Aufgabe: Finde im Kapazitätennetzwerk N := [V, E, c, s, t] einen Fluß f von s nach t mit maximalem Wert Φ(f ). Um diese Aufgabe zu lösen, benötigen wir die folgende Definition Auf dem Netzwerk N := [V, E, c, s, t] sei ein Fluß f gegeben. Eine Folge (v0 , v1 , . . . , vm ) verschiedener Knoten in V heißt zunehmender Weg bezüglich f (augmenting path), falls für jedes j = 0, . . . , m − 1 eine der folgenden zwei Bedingungen gilt : (vj , vj+1 ) ∈ E und f (vj , vj+1 ) < c(vj , vj+1 ) (Vorwärtskante) oder (vj+1 , vj ) ∈ E und f (vj+1 , vj ) > 0 (Rückwärtskante). 23 Satz 2.1. Ein Fluß f im Netzwerk N := [V, E, c, s, t] ist genau dann maximal, wenn es keinen zunehmenden Weg (v0 , v1 , . . . , vm ) mit v0 = s und vm = t bezüglich f gibt. Beweis. z.B. Th. Ihringer, p.63 Eine andere Charakterisierung maximaler Flüsse f im Netzwerk N := [V, E, c, s, t] gibt ein sehr anschaulicher Satz, das ”max-flow min-cut Theorem”, Satz 2.3. Definition Sei [V, E] ein gerichteter Graph. Für jede Teilmenge S ⊂ V heißt ES := {(v, w) : v ∈ S, w ∈ V \ S} ein Schnitt von [V, E]. Im Falle s ∈ S, t ∈ V \ S heißt ES ein s und t trennender Schnitt. Es heißt X c(ES ) := c(e) e∈ES die Kapazität von ES . Lemma 2.2. Für jeden Fluß f und jeden s und t trennenden Schnitt ES im Netzwerk N := [V, E, c, s, t] gilt ( wobei T := V \ S) ist X X X Φ(f ) = f (e) − f (e) ≤ f (e) ≤ c(ES ). e∈ES e∈ET e∈ES Beweis. z.B. Th. Ihringer, p.64 Satz 2.3 (”max-flow min-cut Theorem”). In jedem Netzwerk N := [V, E, c, s, t] ist der Wert eines maximalen Flusses von der Quelle s zur Senke t gleich der Kapazität c(S) eines minimalen s und t trennenden Schnitts ES . Wie findet man einen maximalen Fluß in einem Netzwerk N := [V, E, c, s, t] ? Der berühmte Markierungsalgorithmus von Ford und Fulkerson (1956) startet mit irgend einem zulässigen Fluß in N und konstruiert sukzessive zunehmende Wege (v0 , v1 , . . . , vm ) mit v0 = s und vm = t und hiermit weitere zulässige Flüsse f mit steigendem Wert Φ(f ). Ist zum Beispiel (s = v0 , v1 , . . . , vm = t) ein zunehmender Weg, dann berechnen wir c(vj .vj+1 ) − f (vj .vj+1 ), falls (vj .vj+1 ) ∈ E, εj := j = 0, . . . , m − 1, f (vj+1 , vj ), falls (vj+1 , vj ) ∈ E, sowie ε := min{εj : j = 0, 1, . . . , m − 1}. f (e) + ε, f1 (e) = f (e) − ε, f (e), Der neue Fluß f1 hat die Werte falls e = (vj .vj+1 ) ∈ E, falls e = (vj+1 , vj ) ∈ E, sonst . 24 Die Stärke des neuen Flusses ist Φ(f1 ) = Φ(f ) + ε. Für eine ausführliche Beschreibung des Markierungsalgorithmus und Varianten siehe zum Beispiel Th. Ihringer, pp.64 ff. finis WS 2015/16 25