Programmierung und Programmiersprachen Sommersemester 2006 Lehrstuhl für Angewandte Telematik / ee-Business Institut für Informatik Universität Leipzig Stiftungslehrstuhl der Deutschen Telekom AG [email protected] www.lpz-ebusiness.de +49 (341) 97 323 30 PuPS 26.06.2006 Warshall‘s Algorithmus PuPS 2 1 Kürzeste Entfernung zweier Knoten PuPS 3 Implementierung: Kürzester Pfad PuPS 4 2 Beispiel: Kürzester Pfad PuPS 5 Mehr zu Graphen / Kruskal PuPS 6 3 Definition: Spannbaum • Ein zusammenhängender ungerichteter Graph G ist ein Spannbaum, falls |E| = |V| – 1. • Ein Spannbaum hat so wenige Kanten, dass er keinen Zyklus enthalten kann. • Jeder zusammenhängende Graph besitzt einen Spannbaum, im Allgemeinen sind sogar mehrere möglich. • einfache Konstruktionsvorschrift: Solange es einen Zyklus im Graphen gibt, entferne eine Kante aus diesem Zyklus. PuPS 7 Definition: Kostengraph • (V, E, c) heißt Kostengraph, falls (V,E) ein zusammenhängender ungerichteter Graph und c: E -> Nat eine Abbildung ist. Für eine Teilmenge F ⊆ E von Kanten können wir die Kosten cF für diese Kantenmenge angeben als die Summe aller Kosten, die von den einzelnen Kanten verursacht wird: cF = ∑f∈F c(f) PuPS 8 4 Definition: minimaler Spannbaum • Ist G = (V, E) ein attributierter zusammenhängender ungerichteter Graph, so ist S = (V, F) ein minimaler Spannbaum, falls die folgenden Bedingungen erfüllt sind: • Die Kantenmenge F ist eine Teilmenge der Kantenmenge E. • S ist ein Spannbaum. • Ist S‘ = (V, F‘) ein weiterer Spannbaum mit F‘ ⊆ E, so ist die Summe der Attribute aller Kanten in F kleiner als oder gleich der Summe der Attribute aller Kanten in F‘, also cF ≤ cF‘. PuPS 9 Definition: minimaler Spannbaum ¾ Ein minimaler Spannbaum ist der „billigste“ Teilgraph (d.h. der mit der kleinsten Summe der Attributwerte), der die Verbindung aller Knoten des Graphen erlaubt. • Wenn die Attribute der Kanten paarweise verschieden sind, kann es nur einen minimalen Spannbaum geben. PuPS 10 5 Beispiel: minimaler Spannbaum 20 A 23 1 4 36 B 28 F 15 9 G 25 C E 16 17 3 D Betrachtung: Welche Kanten nimmt man intuitiv? PuPS 11 Und das nun formal Lemma: minimales Spannbaum = billigster Teilgraph Lemma: Züchten PuPS 12 6 Konstruktion des min. Spannbaums • Ansatz: Sind zwei minimale Spannbäume gegeben, so entsteht bei ihrer Verbindung über eine Kante mit minimalem Attributwert ein größerer minimaler Spannbaum. • Algorithmus von Kruskal • Menge Q enthält alle Kanten des Graphen • Menge C ist eine Partition von V (d.h. eine Menge von Teilmengen der Knotenmenge) mit diesen Eigenschaften: • kein Element aus C ist die leere Menge • die Elemente aus C sind paarweise disjunkt • die Vereinigung aller Elemente aus C ergibt die Knotenmenge V • Menge F wird Kanten des minimalen Spannbaums enthalten PuPS 13 Algorithmus von Kruskal • Initialisierung: • alle Kanten des Graphen werden nach aufsteigenden Attributwerten sortiert in Q eingefügt • C wird zu {{v}: v ∈V} initialisiert (d.h. jede Teilmenge enthält nur einen Knoten) • F wird auf die leere Menge gesetzt • Beispiel: Q Kante AG DE FG EG EF DG CD AF Attribut 1 3 4 9 15 16 17 20 AB CG BC BG 23 25 28 36 • Q = {AG, DE, FG, EG, EF, DG, CD, AF, AB, CG, BC, BG} • C = {A, B, C, D, E, F, G} vereinfachte Notation für Q und F: • F=∅ XY steht für Kante (X, Y) vereinfachte Notation für C: XY steht für Teilmenge {X, Y} PuPS 14 7 Algorithmus von Kruskal Selektion der Kanten des Spannbaums: • solange C mehr als ein Element enthält: • entferne die Kante (x, y) mit den geringsten Kosten aus Q • falls die Kante zwei verschiedene Elemente von C verbindet (d.h. ∃ W1, W2 ∈ C; W1 ≠ W2, x ∈ W1, y ∈ W2): • füge die Kante (x, y) zu F hinzu und ersetze die beiden Elemente aus C durch ihre Vereinigung (d.h. ersetze C durch (C \ {W1, W2}) ∪ {W1 ∪ W2}) • sonst: • verwerfe die Kante (x, y) nach Terminierung: • C enthält als einziges Element die Menge V aller Knoten • F enthält die Kanten des minimalen Spannbaums PuPS 15 8