Algorithmen und Datenstrukturen Kapitel 9. und
|
|
|
- Manuela Kruse
- vor 7 Jahren
- Abrufe
Transkript
1 Algorithmen und Datenstrukturen Kapitel 9 und Kürzeste Pfade Frank Heitmann [email protected] 9. Dezember 0 Frank Heitmann [email protected] /
2 Problemstellung Definition (Bestimmung eines minimalen Spannbaums) Eingabe: Gegeben ein ungerichteter Graph G = (V, E) und eine Gewichtsfunktion w : E R +. Gesucht: Ein Spannbaum T derart, dass w(t ) = w(u, v) (u,v) E(T ) minimal ist. Mit E(T ) werden dabei die Kanten von T bezeichnet. T wird minimaler Spannbaum oder MST genannt. Ein Spannbaum von G ist ein zusammenhängender und azyklischer Teilgraph (also ein Baum) von G, der alle Knoten von G enthält. Frank Heitmann [email protected] /
3 Ein Beispiel A B C D E F G H I J K Anmerkung Alle Spannbäume haben V Kanten. Es ist oben also wichtig, dass das summierte Gewicht dieser Kanten minimiert werden soll. Bei ungewichteten (!) Graphen liefern Breiten- und Tiefensuche also bereits minimale Spannbäume. Frank Heitmann [email protected] /
4 Ein Beispiel A B C D E F G H I J K Anmerkung Alle Spannbäume haben V Kanten. Es ist oben also wichtig, dass das summierte Gewicht dieser Kanten minimiert werden soll. Bei ungewichteten (!) Graphen liefern Breiten- und Tiefensuche also bereits minimale Spannbäume. Frank Heitmann [email protected] /
5 Die generelle Idee Die Idee ist, dass der Algorithmus sukzessive eine Kantenmenge A aufbauen soll, wobei folgende Schleifeninvariante erhalten bleiben soll: Unmittelbar vor jeder Iteration ist A eine Teilmenge eines minimalen Spannbaums. In jedem Schritt wird eine Kante bestimmt, die hinzugefügt werden kann, ohne dass die Invariante verletzt wird. Solche Kanten werden als sicher bezeichnet. Eine Kante e ist also sicher für eine Teilmenge A eines minimalen Spannbaums, wenn A {e} weiterhin Teilmenge eines (möglicherweise anderen) minimalen Spannbaums ist. Frank Heitmann [email protected] /
6 Die generelle Idee Algorithmus GenericMST(G, w) : A = : while A bildet keinen Spannbaum do : bestimme eine für A sichere Kante (u, v) : A = A {(u, v)} : end while : return A Anmerkung A ist die bisher ermittelte Kantenmenge des Spannbaums. In jedem Schritt wird zu A eine sichere Kante hinzugefügt. Der schwierige Teil ist die Bestimmung einer sicheren Kante. Frank Heitmann [email protected] /
7 Die Schleifeninvariante Algorithmus GenericMST(G, w) : A = : while A bildet keinen Spannbaum do : bestimme eine für A sichere Kante (u, v) : A = A {(u, v)} : end while : return A Pause to Ponder Unmittelbar vor jeder Iteration ist A eine Teilmenge eines minimalen Spannbaums. Initialisierung? Fortsetzung? Terminierung? Und gibt es immer eine sichere Kante? Frank Heitmann [email protected] /
8 Einige Definitionen Wir ermitteln gleich eine Regel, mit der sichere Kanten erkannt werden können. Diese wird dann in zwei Algorithmen genutzt, um effizient sichere Kanten zu bestimmen. Vorher einige Definitionen... Definition Sei G = (V, E) ein ungerichteter Graph. Ein Schnitt (S, V S) ist eine Partitionierung von V. Eine Kante (u, v) E kreuzt den Schnitt, wenn ihre Endpunkte in verschiedenen Partitionen liegen. Eine Kante ist eine leichte, den Schnitt kreuzende Kante, falls sie das kleinste Gewicht aller Kanten hat, die den Schnitt kreuzen. Ein Schnitt respektiert eine Kantenmenge A, falls keine Kante von A den Schnitt kreuzt. Frank Heitmann [email protected] /
9 Zur Illustration... A B C D E F G H I J K Frank Heitmann [email protected] 9/
10 Eine wichtige Regel Satz Sei G = (V, E) ein zusammenhängender, ungerichteter Graph und w : E R + eine Gewichtsfunktion. Sei A E Teilmenge eines minimalen Spannbaums von G, (S, V S) ein Schnitt von G, der A respektiert und (u, v) eine leichte Kante, die (S, V S) kreuzt. Dann ist die Kante (u, v) für A sicher. Beweis Sei T ein minimaler Spannbaum, der A enthält und gelte (u, v) E(T ), sonst wären wir sofort fertig. Wir konstruieren nun durch Ausschneiden und Einfügen einen anderen minimalen Spannbaum T mit A {(u, v)} E(T ), woraus dann folgt, dass (u, v) sicher für A ist.... Frank Heitmann [email protected] /
11 Zur Illustration des Beweises x u P y v Die Knoten von S sind grau, die von S V weiß. Die Kanten von T sind eingezeichnet, nicht die von G. Kanten von A sind dick. Die Kante (u, v) gehört zu G, nicht zu T. Sie ist eine leichte, den Schnitt (S, V S) kreuzende Kante. Die Kante (x, y) liegt auf dem Pfad P in T von u nach v. Man erhält T, indem man (x, y) aus T entfernt und die Kante (u, v) hinzufügt. Frank Heitmann [email protected] /
12 Eine wichtige Regel - Der Beweis x u P y v Beweis Ziel: A {(u, v)} E(T ) und T ist MST. (u, v) bildet mit dem Pfad P, der in T von u nach v führt einen Zyklus. (u, v) kreuzt den Schnitt (S, V S), daher gibt es einen Kante (x, y) auf P, die den Schnitt (ebenfalls) kreuzt. Frank Heitmann [email protected] /
13 Eine wichtige Regel - Der Beweis x u P y v Beweis (x, y) A, da der Schnitt A respektiert. Da T ein Baum ist, zerfällt er durch entfernen von (x, y) in zwei Komponenten und wird durch hinzufügen von (u, v) wieder zu einem Spannbaum: T = (T {(x, y)}) {(u, v)} Frank Heitmann [email protected] /
14 Eine wichtige Regel - Der Beweis x u P y v Beweis Ziel: A {(u, v)} E(T ) und T ist MST. Z.Z.: T ist (auch) ein MST. Da (x, y) und (u, v) beide den Schnitt kreuzen, (u, v) aber eine leichte Kante ist, gilt zunächst w(u, v) w(x, y). Damit folgt w(t ) = w(t ) w(x, y) + w(u, v) w(t )( w(t )), also w(t ) = w(t ) und beides sind MSTs. Frank Heitmann [email protected] /
15 Eine wichtige Regel - Der Beweis x u P y v Beweis. Ziel: A {(u, v)} E(T ) und T ist MST. Z.Z.: A {(u, v)} E(T ). Da A E(T ) gilt und (x, y) A folgt A E(T ) und somit auch A {(u, v)} E(T ). Damit ist alles gezeigt. Frank Heitmann [email protected] /
16 Eine wichtige Regel Satz Sei G = (V, E) ein zusammenhängender, ungerichteter Graph und w : E R + eine Gewichtsfunktion. Sei A E Teilmenge eines minimalen Spannbaums von G, (S, V S) ein Schnitt von G, der A respektiert und (u, v) eine leichte Kante, die (S, V S) kreuzt. Dann ist die Kante (u, v) für A sicher. Frank Heitmann [email protected] /
17 Folgerungen für den Algorithmus Zu jedem Zeitpunkt im Algorithmus GenericMST gilt A ist azyklisch, der Graph G A = (V, A) ist ein Wald, dessen Zusammenhangskomponenten Bäume sind (evtl. bestehend aus nur einem Knoten), jede für A sichere Kante verbindet unterschiedliche Komponenten von G A. Die Schleife wird nun V mal ausgeführt. Anfangs, wenn A leer ist, gibt es V Bäume in G A. Ihre Anzahl wird bei jeder Iteration um eins vermindert. Wenn G A nur ein einzelner Baum ist, terminiert der Algorithmus. Frank Heitmann [email protected] /
18 Eine wichtige Folgerung Satz Sei G = (V, E) ein zusammenhängender, ungerichteter Graph und w : E R + eine Gewichtsfunktion. Sei A E Teilmenge eines minimalen Spannbaums von G und C = (V C, E C ) eine Zusammenhangskomponente aus G A = (V, A). Falls (u, v) unter allen Kanten, die C mit einer anderen Komponente von G A verbinden, das kleinste Gewicht hat, dann ist (u, v) für A sicher. Beweis. Der Schnitt (V C, V V C ) respektiert A (sonst wäre V C keine Zusammenhangskomponente) und (u, v) ist eine leichte Kante für diesen Schnitt. Nach dem eben bewiesenen Satz ist (u, v) dann sicher für A. Frank Heitmann [email protected] /
19 Zur Nachbereitung Anmerkung (zur Nachbereitung) Zusammenhangskomponenten eines ungerichteten Graphen (wie eben die Komponente G A ) sind hier immer maximal zu wählen. D.h. möglichst viele Knoten sind in die Knotenmenge aufzunehmen (gerade all jene, die über Pfade erreicht werden können). Frank Heitmann [email protected] 9/
20 Kruskal - Die Idee basiert auf eben bewiesenen Satz und erweitert den generischen Algorithmus um eine Vorschrift, wie die sichere Kante bestimmt werden soll. Die Idee ist sehr einfach: Nimm unter allen Kanten jene mit dem kleinsten Gewicht, deren Hinzufügen nicht zu einem Kreis führt. Die Menge A ist also ein Wald. Die hinzugefügte, sichere Kante ist immer eine Kante mit minimalen Gewicht, die zwei verschiedene Komponenten (von G A ) verbindet. Die Korrektheit dieses Verfahrens folgt sofort aus dem eben vorgestellten Satz. Frank Heitmann [email protected] 0/
21 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
22 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
23 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
24 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
25 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
26 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
27 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
28 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
29 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] 9/
30 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] 0/
31 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
32 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
33 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
34 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
35 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
36 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
37 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
38 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
39 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] 9/
40 Kruskal - Beispiel A B C D E F G H I J K Frank Heitmann [email protected] 0/
41 Kruskal - Datenstrukturen disjunkter Mengen Die Implementierung ist nun recht anspruchsvoll. Wir benötigen eine Datenstruktur für disjunkte Mengen. Eine solche verwaltet eine Menge S = {S, S,..., S k } von disjunkten dynamischen Mengen. Jede Menge wird durch einen Repräsentanten dargestellt. Wichtige Funktionen: MakeSet(v). Erzeugt eine neue Menge, deren einziges Element v ist. v ist dann Repräsentant dieser Menge. FindSet(v). Gibt einen Zeiger auf den Repräsentanten der (eindeutigen) Menge zurück, die v enthält. Union(u, v). Vereinigt die dynamischen Mengen, die u und v enthalten Frank Heitmann [email protected] /
42 Kruskal - Pseudocode Algorithmus KruskalMST(G, w) : A = : for alle v V (G) do : MakeSet(v) : end for : sortiere E in nichtfallender Reihenfolge nach dem Gewicht w : for alle (u, v) E (sortiert) do : if FindSet(u) FindSet(v) then : A = A {(u, v)} 9: Union(u, v) : end if : end for : return A Frank Heitmann [email protected] /
43 Kruskal - Ergebnis Die Korrektheit folgt aus den vorherigen Sätzen und aus der Korrektheit der Methoden der Datenstruktur für disjunkte Mengen (wäre noch zu zeigen). Die Laufzeit hängt auch stark von letztgenannten Methoden ab. Sie ist in O(E log V ) möglich. Idee des Verfahrens ist schnell erklärt, aber sowohl die Implementierung als auch die Beweisführung ist sehr anspruchsvoll. Für Interessierte Interessierte Leser finden mehr dazu in Kapitel im [Cormen]. Frank Heitmann [email protected] /
44 Prim - Die Idee Ähnlich wie der Algorithmus von Kruskal basiert auch der Algorithmus von Prim auf einer einfachen Idee, um die sichere Kante auszuwählen: Wähle aus den Kanten eine minimale aus, die A mit einem noch isolierten Knoten von G A verbindet. (Ganz zu Anfang startet man mit einem beliebigen Knoten.) Die Menge A ist hier also ein einzelner Baum. Die hinzugefügte, sichere Kante ist immer eine Kante mit minimalen Gewicht, die den Baum mit einem Knoten verbindet, der noch nicht zum Baum gehörte. Die Korrektheit dieses Verfahrens folgt wieder aus dem vorhin vorgestellten Satz... Frank Heitmann [email protected] /
45 Eine wichtige Folgerung - Satz Sei G = (V, E) ein zusammenhängender, ungerichteter Graph und w : E R + eine Gewichtsfunktion. Sei A E Teilmenge eines minimalen Spannbaums von G und C = (V C, E C ) eine Zusammenhangskomponente aus G A = (V, A). Falls (u, v) unter allen Kanten, die C mit einer anderen Komponente von G A verbinden, das kleinste Gewicht hat, dann ist (u, v) für A sicher. Frank Heitmann [email protected] /
46 Prim - Ein Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
47 Prim - Ein Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
48 Prim - Ein Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
49 Prim - Ein Beispiel A B C D E F G H I J K Frank Heitmann [email protected] 9/
50 Prim - Ein Beispiel A B C D E F G H I J K Frank Heitmann [email protected] 0/
51 Prim - Ein Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
52 Prim - Ein Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
53 Prim - Ein Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
54 Prim - Ein Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
55 Prim - Ein Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
56 Prim - Ein Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
57 Prim - Ein Beispiel A B C D E F G H I J K Frank Heitmann [email protected] /
58 Implementierung Die Schwierigkeit bei der Implementierung besteht darin, die Auswahl der Kante, die zu A hinzugefügt werden soll, möglichst einfach (d.h. effizient) zu gestalten. Im nachfolgenden Algorithmus wird mit einer Min-Prioritätswarteschlange gearbeitet (die man z.b. mit binären Min-Heaps implementieren könnte). In dieser werden alle nicht zum Baum gehörenden Knoten gespeichert. schlüssel[v] ist das kleinste Gewicht aller Kanten, die v mit einem Knoten des (bisherigen) Baumes verbinden (und muss daher u.u. im Verlauf angepasst werden). Die Menge A wird implizit als A = {(v, π[v]) v V {r} Q} gehalten. Frank Heitmann [email protected] /
59 Prim - Pseudocode Algorithmus PrimMST(G, w, r) : for alle v V (G) do : schlüssel[v] =, π[v] = nil : end for : schlüssel[r] = 0, Q = V (G) : while Q do : u = ExtractMin(Q) : for alle v Adj[u] do : if v Q und w(u, v) < schlüssel[v] then 9: π[v] = u : schlüssel[v] = w(u, v) : end if : end for : end while Frank Heitmann [email protected] 9/
60 Prim - Anmerkung Anmerkung (zur Nachbereitung) Man beachte: Der Algorithmus arbeitet etwas anders als im Beispiel oben, da ja π[v] und schlüssel[v] u.u. mehrmals gesetzt werden. (Dies ist nötig, um den Spannbaum zu konstruieren und geschah vorher implizit indem z.b. immer wieder alle Kanten betrachtet wurden.) Im nachfolgenden Beispiel ist das erste Element im Tupel der Knotenname, das zweite ist schlüssel[v] und das dritte ist π[v]. Frank Heitmann [email protected] 0/
61 PrimMST - Ein Beispiel A,0,n E,i,n I,i,n B,i,n C,i,n D,i,n F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] /
62 PrimMST - Ein Beispiel A,0,n E,,A I,i,n B,,A C,i,n D,i,n F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] /
63 PrimMST - Ein Beispiel A,0,n E,,A I,i,n B,,A C,i,n D,i,n F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] /
64 PrimMST - Ein Beispiel A,0,n E,,A I,i,n B,,A C,i,n D,i,n F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] /
65 PrimMST - Ein Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] /
66 PrimMST - Ein Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] /
67 PrimMST - Ein Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] /
68 PrimMST - Ein Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] /
69 PrimMST - Ein Beispiel A,0,n E,,D I,i,n B,,A C,,B D,,B F,,D G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 9/
70 PrimMST - Ein Beispiel A,0,n E,,D I,i,n B,,A C,,B D,,B F,,D G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 0/
71 PrimMST - Ein Beispiel A,0,n E,,D I,i,n B,,A C,,B D,,B F,,D G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] /
72 PrimMST - Ein Beispiel A,0,n E,,D I,i,n B,,A C,,B D,,B F,,D G,,F H,,F J,i,n K,i,n Frank Heitmann [email protected] /
73 PrimMST - Ein Beispiel A,0,n E,,D I,i,n B,,A C,,B D,,B F,,D G,,F H,,F J,i,n K,i,n Frank Heitmann [email protected] /
74 PrimMST - Ein Beispiel A,0,n E,,D I,i,n B,,A C,,B D,,B F,,D G,,H H,,F J,i,n K,i,n Frank Heitmann [email protected] /
75 PrimMST - Ein Beispiel A,0,n E,,D I,i,n B,,A C,,B D,,B F,,D G,,H H,,F J,i,n K,i,n Frank Heitmann [email protected] /
76 PrimMST - Ein Beispiel A,0,n E,,D I,,G B,,A C,,B D,,B F,,D G,,H H,,F J,i,n K,i,n Frank Heitmann [email protected] /
77 PrimMST - Ein Beispiel A,0,n E,,D I,,G B,,A C,,B D,,B F,,D G,,H H,,F J,,I K,,I Frank Heitmann [email protected] /
78 PrimMST - Ein Beispiel A,0,n E,,D I,,G B,,A C,,B D,,B F,,D G,,H H,,F J,,I K,,I Frank Heitmann [email protected] /
79 PrimMST - Ein Beispiel A,0,n E,,D I,,G B,,A C,,B D,,B F,,D G,,H H,,F J,,I K,,I Frank Heitmann [email protected] 9/
80 PrimMST - Ein Beispiel A,0,n E,,D I,,G B,,A C,,B D,,B F,,D G,,H H,,F J,,I K,,I Frank Heitmann [email protected] 0/
81 Prim - Schleifeninvariante Wir müssen nun noch die Korrektheit des Algorithmus zeigen. Wir wussten vorher nur, dass die Idee (diese Kante zu nehmen) korrekt ist. Nachweisen müssen wir aber, dass der Algorithmus dies auch stets tut und somit die Idee von Prim korrekt implementiert. Vor jeder Iteration der while-schleife gilt: A = {(v, π[v]) v V {r} Q} Die Knoten, die sich bereit im MST befinden, sind jene aus V Q. Ist v Q mit π[v] nil, so ist schlüssel[v] das Gewicht einer Kante (v, π[v]), die v mit einem Knoten verbindet, der bereits zum minimalen Spannbaum gehört und die unter allen Kanten mit dieser Eigenschaft minimal ist. Frank Heitmann [email protected] /
82 Zur Nachbereitung Anmerkung (zur Nachbereitung) Bei Kruskal war dies nicht nötig, da die Implementierung bereits sehr dicht an der Idee war. Anmerkung (zur Nachbereitung) Die Schleifeninvariante wäre nun formal zu zeigen (und daraus die Korrektheit zu folgern). Wir diskutieren dies nachfolgend nur kurz anhand des Pseudocodes. (Wer nicht in der Vorlesung war: Gilt die Schleifeninvariante bei der Initialisierung? Klappt s mit der Fortsetzung? Terminiert der Algorithmus und liefert die Schleifeninvariante dann etwas, womit die Korrektheit des Algorithmus gefolgert werden kann?) Frank Heitmann [email protected] /
83 Prim - Pseudocode (Wdh.) Algorithmus PrimMST(G, w, r) : for alle v V (G) do : schlüssel[v] =, π[v] = nil : end for : schlüssel[r] = 0, Q = V (G) : while Q do : u = ExtractMin(Q) : for alle v Adj[u] do : if v Q und w(u, v) < schlüssel[v] then 9: π[v] = u : schlüssel[v] = w(u, v) : end if : end for : end while Frank Heitmann [email protected] /
84 Prim - Laufzeitanalyse Wir benutzen einen binären MinHeap. Damit folgt: Die Initialisierung geht in O(V ). Der Rumpf der while-schleife wird V -mal ausgeführt. Jede ExtractMin-Operation benötigt O(log V ) Zeit, also benötigen wir für diese Operation insgesamt O(V log V ) Zeit. Die for-schleife wird O(E)-mal ausgeführt. In ihrem Rumpf ist der Test auf Enthaltensein in O() möglich, indem man jeden Knoten v mit einem zusätzlichen Bit versieht, das aussagt, ob v in Q ist oder nicht. Die Zuweisung beinhaltet eine DecreaseKey-Operation, die in O(log V ) möglich ist. Insgesamt brauchen wir hier also O(E log V ). Insgesamt ist die Laufzeit damit in O(V log V + E log V ) = O(E log V ). Frank Heitmann [email protected] /
85 Kruskal und Prim - Zusammenfassung Beide vorgestellten Algorithmen (Kruskal und Prim) verwenden eine bestimmte Regel, um die sichere Kante zu bestimmen. Kruskal: Die Menge A ist ein Wald. Die hinzugefügte, sichere Kante ist immer eine Kante mit minimalen Geweicht, die zwei verschiedene Komponenten (von G A ) verbindet. Prim: Die Menge A ist ein einzelner Baum. Die hinzugefügte, sichere Kante ist immer eine Kante mit minimalen Gewicht, die den Baum mit einem Knoten verbindet, der noch nicht zum Baum gehörte. Beide Algorithmen sind nicht eindeutig. Die Algorithmen können verschiedene Ergebnisse liefern. Mit guten Datenstrukturen ist Kruskal in O(E log V ) möglich, Prim ist in O(E log V ) bei Nutzung von Min-Heaps und sogar in O(E + V log V ) bei Nutzung von Fibonacci-Heaps. Frank Heitmann [email protected] /
86 Von Prim zu Dijkstra... Mit einer kleinen Änderung kann man das Problem der kürzesten Pfade bei einem einzigen Startknoten auf einem gewichteten (gerichteten oder ungerichteten) Graphen lösen... Frank Heitmann /
87 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,i,n D,i,n F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] /
88 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] /
89 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,i,n D,i,n F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 9/
90 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 90/
91 Von Prim zu Dijkstra - Beispiel A,0,n E,i,n I,i,n B,i,n C,i,n D,i,n F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 9/
92 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,i,n D,i,n F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 9/
93 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,i,n D,i,n F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 9/
94 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,i,n D,i,n F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 9/
95 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 9/
96 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 9/
97 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,i,n G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 9/
98 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,,E G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 9/
99 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,,E G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 99/
100 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,,D G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] 0/
101 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,,D G,i,n H,i,n J,i,n K,i,n Frank Heitmann [email protected] /
102 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,,D G,,F H,9,F J,i,n K,i,n Frank Heitmann [email protected] /
103 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,,D G,,F H,9,F J,i,n K,i,n Frank Heitmann [email protected] /
104 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,i,n B,,A C,,B D,,B F,,D G,,F H,9,F J,i,n K,i,n Frank Heitmann [email protected] /
105 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,,G B,,A C,,B D,,B F,,D G,,F H,9,F J,i,n K,i,n Frank Heitmann [email protected] /
106 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,,G B,,A C,,B D,,B F,,D G,,F H,9,F J,,I K,,I Frank Heitmann [email protected] /
107 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,,G B,,A C,,B D,,B F,,D G,,F H,9,F J,,I K,,I Frank Heitmann [email protected] /
108 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,,G B,,A C,,B D,,B F,,D G,,F H,9,F J,,I K,,I Frank Heitmann [email protected] /
109 Von Prim zu Dijkstra - Beispiel A,0,n E,,A I,,G B,,A C,,B D,,B F,,D G,,F H,9,F J,,I K,,I Frank Heitmann [email protected] 9/
110 Problemstellung Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Definition (Problem der kürzesten Pfade) Eingabe: Gegeben ein gerichteter Graph G = (V, E), eine Gewichtsfunktion w : E R + und ein Knoten s. Gesucht: Für jeden Knoten v V ein Pfad P v, der in s beginnt, in v endet und der unter allen Pfaden mit dieser Eigenschaft das geringste Gewicht hat. Anmerkung Das Gewicht eine Pfades p = [v 0, v,..., v k ] ist dabei definiert als w(p) = k i= w(v i, v i ). Frank Heitmann [email protected] /
111 Varianten Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Variante : Für jeden Knoten v V suchen wir einen kürzesten Pfad von einem Startknoten s aus (single-source). Variante : Finde von allen Knoten einen kürzesten Pfad zu einem gegebenen Zielknoten. Variante : Finde einen kürzesten Pfad für einen gegebenen Start- und einen gegebenen Zielknoten. Variante : Finde für jedes Knotenpaar u, v einen kürzesten Pfad von u nach v. Frank Heitmann [email protected] /
112 Varianten Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Variante : Für jeden Knoten v V suchen wir einen kürzesten Pfad von einem Startknoten s aus (single-source). Variante : Finde von allen Knoten einen kürzesten Pfad zu einem gegebenen Zielknoten. Anmerkung Dreht man die Richtungen aller Kanten um, kann man auf zurückführen. Frank Heitmann [email protected] /
113 Varianten Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Variante : Für jeden Knoten v V suchen wir einen kürzesten Pfad von einem Startknoten s aus (single-source). Variante : Finde einen kürzesten Pfad für einen gegebenen Start- und einen gegebenen Zielknoten. Anmerkung löst mit und es ist kein Verfahren für bekannt, das im schlechtesten Fall wirklich asymptotisch schneller wäre (als der beste single-source-algorithmus). Frank Heitmann [email protected] /
114 Varianten Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Variante : Für jeden Knoten v V suchen wir einen kürzesten Pfad von einem Startknoten s aus (single-source). Variante : Finde für jedes Knotenpaar u, v einen kürzesten Pfad von u nach v. Anmerkung geht im Prinzip, indem man für jeden Knoten löst, aber dies geht schneller ( Floyd-Warshall-Algorithmus). Frank Heitmann [email protected] /
115 Wichtige Eigenschaft kürzester Pfade Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Satz Sei G = (V, E) gewichteter, gerichteter Graph. w : E R + eine Gewichtsfunktion. Sei p = [v, v,..., v k ] ein kürzester Pfad von v nach v k und p ij der Teilpfad von v i nach v j ( i j k). Dann ist p ij ein kürzester Pfad von v i nach v j. Beweis. Beweisidee: Nehmen wir an dies wäre nicht so, dann gäbe es einen kürzeren Pfad p ij von v i nach v j. Ersetzt man p ij in p durch diesen, erhält man einen kürzeren v -v k -Pfad im Widerspruch dazu, dass p ein kürzester Pfad ist. Frank Heitmann [email protected] /
116 Negative Gewichte und Zyklen Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Kanten mit negativen Gewichten sind möglich, auch wenn nicht alle Algorithmen damit arbeiten können. Negative Zyklen verhindern aber kürzeste Pfade! Der gleich folgenden Algorithmus von Dijkstra erlaubt keine negativen Gewichte. Der Bellman-Ford-Algorithmus erlaubt negative Gewichte und kann negative Zyklen entdecken. Normale Zyklen können vorkommen, werden aber bei einem kürzesten Pfad nie gebraucht (im Gegenteil!). Die Darstellung/Speicherung kürzester Pfade geschieht wieder mit der Vorgängerfunktion π[v]. Frank Heitmann /
117 Zwei wichtige Hilfsfunktionen Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Algorithmus InitSingleSource(G, s) : for alle v V (G) do : d[v] = : π[v] = nil : end for : d[s] = 0 Frank Heitmann [email protected] /
118 Zwei wichtige Hilfsfunktionen Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall u 9 u v Relax(u,v,w) v u v u Relax(u,v,w) v Algorithmus Relax(u, v, w) : if d[v] > d[u] + w(u, v) then : d[v] = d[u] + w(u, v) : π[v] = u : end if Frank Heitmann [email protected] /
119 Der Dijkstra-Algorithmus Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Algorithmus Dijkstra(G, w, s) : InitSingleSource(G, s) : S = : Q = V (G) : while Q do : u = ExtractMin(Q) : S = S {u} : for alle v Adj[u] do : if d[v] > d[u] + w(u, v) then 9: d[v] = d[u] + w(u, v) : π[v] = u : end if : end for : end while Frank Heitmann [email protected] 9/
120 Beispiel Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall i i 9 0 i i Frank Heitmann [email protected] /
121 Beispiel Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall i 9 0 i Frank Heitmann [email protected] /
122 Beispiel Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall 9 0 Frank Heitmann [email protected] /
123 Beispiel Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall 9 0 Frank Heitmann [email protected] /
124 Beispiel Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Frank Heitmann [email protected] /
125 Beispiel Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Frank Heitmann [email protected] /
126 Einführung Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Der Bellman-Ford-Algorithmus löst wie Dijkstra das Problem der kürzesten Pfade bei einem Startknoten. Anders als Dijkstra dürfen Kantengewichte aber auch negativ sein. Der Algorithmus liefert false zurück, sollte ein Zyklus mit negativem Gewicht existieren. Frank Heitmann /
127 Der Bellman-Ford-Algorithmus Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Algorithmus 9 BellmanFord(G, w, s) : InitSingleSource(G, s) : for i = to V (G) do : for alle (u, v) E(G) do : Relax(u, v, w) : end for : end for : for alle (u, v) E(G) do : if d[v] > d[u] + w(u, v) then 9: return false : end if : end for Frank Heitmann [email protected] /
128 Beispiel Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall t i - x i - s 0 i y 9 - i z Kantendurchlauf: (t, x), (t, y), (t, z), (x, t), (y, x), (y, z), (z, x), (z, s), (s, t), (s, y) Frank Heitmann [email protected] /
129 Beispiel Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall t - x i - s 0 - i y 9 z Kantendurchlauf: (t, x), (t, y), (t, z), (x, t), (y, x), (y, z), (z, x), (z, s), (s, t), (s, y) Frank Heitmann [email protected] 9/
130 Beispiel Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall t - x - s 0 - y 9 z Kantendurchlauf: (t, x), (t, y), (t, z), (x, t), (y, x), (y, z), (z, x), (z, s), (s, t), (s, y) Frank Heitmann [email protected] 0/
131 Beispiel Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall t - x - s 0 - y 9 z Kantendurchlauf: (t, x), (t, y), (t, z), (x, t), (y, x), (y, z), (z, x), (z, s), (s, t), (s, y) Frank Heitmann [email protected] /
132 Beispiel Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall t - x - s y 9 z Kantendurchlauf: (t, x), (t, y), (t, z), (x, t), (y, x), (y, z), (z, x), (z, s), (s, t), (s, y) Frank Heitmann [email protected] /
133 Anmerkungen zum Beispiel Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Anmerkung Wir hatten im Beispiel vier (also V (G) ) Iterationen. Im Test der unteren for-schleife finden wir nun nichts (keine Kante führt zu einer weiteren Relaxtion), also sind wir fertig. Wäre die Kante von z nach s mit z.b. gewichtet, dann würde der Test in der untern for-schleife nun false zurückliefern. Dies bedeutet auch, dass ein negativer Zyklus (von s nach s) gefunden wurde. Oben sind nur V (G) Iterationen nötig, da ansonsten schon maximale Zyklen (Zyklen, deren Länge der Anzahl der Knoten entspricht) gefunden werden. Laufzeit: O(V E). Frank Heitmann [email protected] /
134 Einführung Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Der Floyd-Warshall-Algorithmus löst das Problem in der vierten Variante, d.h. er bestimmt zu jedem Paar zweier Knoten einen kürzesten Pfad zwischen ihnen. Kanten mit negativem Gewicht sind zugelassen. Der nachfolgende Algorithmus arbeitet aber nicht, sollten auch Zyklen mit negativem Gewicht vorhanden sein! Wir wollen dies nachfolgend nur kurz anreißen... Anmerkung (für Interessierte) Die Idee des Algorithmus basiert auf einer ähnlichen Idee wie die Vorschrift, bei der Konstruktion eines regulären Ausdrucks zu einem Automaten (Kleene-Konstruktion, R k ij ). Frank Heitmann [email protected] /
135 Zur Illustration der Idee Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall d k ij = min(d k, d k ij ik + d k kj ) p k q i j Die Pfade p und q haben nur Zwischenknoten aus {,,..., k }. Der ganze Pfad von i nach j enthält auch einmal den Knoten aus k. Frank Heitmann [email protected] /
136 Der Floyd-Warshall-Algorithmus Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Algorithmus FloydWarhsall(W ) : n = zeilen[w ] : D 0 = W : for k = to n do : for i = to n do : for j = to n do : d k : end for : end for 9: end for ij = min(d k, d k ij ik + d k kj ) Frank Heitmann [email protected] /
137 Kürzeste Pfade - Zusammenfassung Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Dijkstra. Für gewichtete, gerichtete Graphen, ohne negative Gewichte. Laufzeit: O(V ) und sogar O(V log V + E). Bellman-Ford(-Moore). Für gewichtete, gerichtete Graphen. Negative Gewichte sind erlaubt. Laufzeit: O(V E). Floyd-Warshall. Für gewichtete, gerichtete Graphen. Negative Gewichte sind erlaubt. Laufzeit: O(V ). Ermittelt anders als die obigen beiden, kürzeste Pfade für alle Knotenpaare! Anmerkung Alle obigen Verfahren gehen auch mit ungerichteten Graphen (da eine ungerichtete Kante durch zwei gerichtete Kanten ersetzt werden kann), sowie für ungewichtete Graphen (allen Kanten Gewicht geben). Frank Heitmann [email protected] /
138 Zusammenfassung und Graphen Grundlagen, Adjazenzmatrix, Adjazenzliste Breiten- & Tiefensuche Anwendung der Tiefensuche Topologisches Sortieren Bestimmung starker Zusammenhangskomponenten Definition Algorithmus von Kruskal Algorithmus von Prim Bestimmen der kürzesten Pfade Definition und Varianten Algorithmus von Dijkstra Algorithmus von Bellman-Ford Algorithmus von Floyd-Warshall Nächstes Mal: Flüße Frank Heitmann /
139 Literaturhinweis Literatur Die letzte und die heutige Vorlesung behandeln Teile der Kapitel (Elementare Graphalgorithmen), (), (Das Problem der kürzesten Pfade bei einem einzigen Startknoten) und (Das Problem der kürzesten Pfade für alle Kontenpaare) aus dem [Cormen]. Insb. ist in Kapitel der Beweis der Korrektheit von Dijkstras-Algorithmus zu finden. Frank Heitmann 9/
140 Problemstellung Definition (Bestimmung eines minimalen Spannbaums) Eingabe: Gegeben ein ungerichteter Graph G = (V, E) und eine Gewichtsfunktion w : E R +. Gesucht: Ein Spannbaum T derart, dass w(t ) = w(u, v) (u,v) E(T ) minimal ist. Mit E(T ) werden dabei die Kanten von T bezeichnet. T wird minimaler Spannbaum oder MST genannt. Ein Spannbaum von G ist ein zusammenhängender und azyklischer Teilgraph (also ein Baum) von G, der alle Knoten von G enthält. Frank Heitmann [email protected] /
141 Kruskal und Prim Sei A die bisher gewählte Menge von Kanten für den MST. Die Algorithmen von Kruskal und Prim arbeiten wie folgt: Kruskal: Nimm unter allen Kanten (aus E A) jene mit dem kleinsten Gewicht, deren Hinzufügen nicht zu einem Kreis führt. Prim: Wähle aus den Kanten eine minimale aus, die A mit einem noch isolierten Knoten von G A verbindet. Korrektheit ist kompliziert zu zeigen. Bei Prim muss zusätzlich Aufwand betrieben werden, um die Implementation als Korrekt nachzuweisen. Zur Laufzeit: Beide sind in O(E log V ). Prim ist sogar in O(E + V log V ) möglich. Frank Heitmann [email protected] /
142 Problemstellung Definition (Problem der kürzesten Pfade) Eingabe: Gegeben ein gerichteter Graph G = (V, E), eine Gewichtsfunktion w : E R + und ein Knoten s. Gesucht: Für jeden Knoten v V ein Pfad P v, der in s beginnt, in v endet und der unter allen Pfaden mit dieser Eigenschaft das geringste Gewicht hat. Anmerkung Das Gewicht eine Pfades p = [v 0, v,..., v k ] ist dabei definiert als w(p) = k i= w(v i, v i ). Frank Heitmann [email protected] /
143 Kürzeste Pfade - Zusammenfassung Dijkstra. Für gewichtete, gerichtete Graphen, ohne negative Gewichte. Laufzeit: O(V ) und sogar O(V log V + E). Bellman-Ford(-Moore). Für gewichtete, gerichtete Graphen. Negative Gewichte sind erlaubt. Laufzeit: O(V E). Floyd-Warshall. Für gewichtete, gerichtete Graphen. Negative Gewichte sind erlaubt. Laufzeit: O(V ). Ermittelt anders als die obigen beiden kürzeste Pfade für alle Knotenpaare! Anmerkung Alle obigen Verfahren gehen auch mit ungerichteten Graphen (da eine ungerichtete Kante durch zwei gerichtete Kanten ersetzt werden kann), sowie für ungewichtete Graphen (allen Kanten Gewicht geben). Frank Heitmann [email protected] /
Algorithmen & Komplexität
Algorithmen & Komplexität Angelika Steger Institut für Theoretische Informatik [email protected] Kürzeste Pfade Problem Gegeben Netzwerk: Graph G = (V, E), Gewichtsfunktion w: E N Zwei Knoten: s, t Kantenzug/Weg
Algorithmen und Datenstrukturen 2
Algorithmen und Datenstrukturen Lerneinheit : Kürzeste Pfade in Graphen Prof. Dr. Christoph Karg Studiengang Informatik Hochschule Aalen Sommersemester 016.6.01 Einleitung Diese Lerneinheit beschäftigt
9 Minimum Spanning Trees
Im Folgenden wollen wir uns genauer mit dem Minimum Spanning Tree -Problem auseinandersetzen. 9.1 MST-Problem Gegeben ein ungerichteter Graph G = (V,E) und eine Gewichtsfunktion w w : E R Man berechne
Graphalgorithmen 2. Dominik Paulus Dominik Paulus Graphalgorithmen / 47
Graphalgorithmen Dominik Paulus.0.01 Dominik Paulus Graphalgorithmen.0.01 1 / 7 1 Spannbäume Kruskal Prim Edmonds/Chu-Liu Datenstrukturen Fibonacci-Heap Union/Find Kürzeste Pfade Dijkstra Bellman-Ford
3. Minimale Spannbäume. Definition 99 T heißt minimaler Spannbaum (MSB, MST) von G, falls T Spannbaum von G ist und gilt:
3. Minimale Spannbäume Sei G = (V, E) ein einfacher ungerichteter Graph, der o.b.d.a. zusammenhängend ist. Sei weiter w : E R eine Gewichtsfunktion auf den Kanten von G. Wir setzen E E: w(e ) = e E w(e),
Vorlesung Datenstrukturen
Vorlesung Datenstrukturen Minimale Spannbäume Maike Buchin 18.7., 20.7.2017 Einführung Motivation: Verbinde Inseln mit Fähren oder Städte mit Schienen und verbrauche dabei möglichst wenig Länge. Problem:
4.2 Minimale Spannbäume: Der Algorithmus von Jarník/Prim Definition 4.2.1
Allgemeines. Minimale Spannbäume: Der Algorithmus von Jarník/Prim Definition.. (a) Ein Graph G =(V, E) heißt kreisfrei, wenn er keinen Kreis besitzt. Beispiel: Ein kreisfreier Graph: FG KTuEA, TU Ilmenau
Aufgaben zur Klausurvorbereitung
Vorlesung Graphen und Optimierung Sommersemester 2013/14 Prof. S. Lange Aufgaben zur Klausurvorbereitung Hier finden Sie eine Reihe von Übungsaufgaben, die wir an den beiden Vorlesungsterminen am 29.01.2014
10 Kürzeste Pfade SSSP-Problem
In diesem Kapitel setzen wir uns mit der Berechnung von kürzesten Pfaden in einem Graphen auseinander. Definition 10.1 (Pfadgewichte). i) Das Gewicht eines Pfades p = (v 0, v 1,..., v k ) ist die Summe
3.2 Generischer minimaler Spannbaum-Algorithmus
3.2 Generischer minimaler Spannbaum-Algorithmus Initialisiere Wald F von Bäumen, jeder Baum ist ein singulärer Knoten (jedes v V bildet einen Baum) while Wald F mehr als einen Baum enthält do wähle einen
Datenstrukturen und Algorithmen (SS 2013)
Datenstrukturen und Algorithmen (SS 2013) Übungsblatt 10 Abgabe: Montag, 08.07.2013, 14:00 Uhr Die Übungen sollen in Gruppen von zwei bis drei Personen bearbeitet werden. Schreiben Sie die Namen jedes
Berechnung minimaler Spannbäume. Beispiel
Minimale Spannbäume Definition Sei G pv, Eq ein ungerichteter Graph und sei w : E Ñ R eine Funktion, die jeder Kante ein Gewicht zuordnet. Ein Teilgraph T pv 1, E 1 q von G heißt Spannbaum von G genau
2. Das single-source-shortest-path-problem
. Das single-source-shortest-path-problem Zunächst nehmen wir an, dass d 0 ist. Alle kürzesten Pfade von a nach b sind o.b.d.a. einfache Pfade.. Dijkstra s Algorithmus Gegeben: G = (V, A), (A = V V ),
ADS: Algorithmen und Datenstrukturen 2
ADS: Algorithmen und Datenstrukturen 2 Teil 4 Prof. Dr. Gerhard Heyer Institut für Informatik Abteilung Automatische Sprachverarbeitung Universität Leipzig 02. Mai 2017 [Letzte Aktualisierung: 10/07/2018,
Algorithmen und Datenstrukturen Kapitel 10
Algorithmen und Datenstrukturen Kapitel 10 Flüsse Frank Heitmann [email protected] 6. Januar 2016 Frank Heitmann [email protected] 1/8 Flüsse Graphen Grundlagen Definition
Grundlagen: Algorithmen und Datenstrukturen
Grundlagen: Algorithmen und Datenstrukturen Prof. Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 00
Wie wird ein Graph dargestellt?
Wie wird ein Graph dargestellt? Für einen Graphen G = (V, E), ob gerichtet oder ungerichtet, verwende eine Adjazenzliste A G : A G [i] zeigt auf eine Liste aller Nachbarn von Knoten i, wenn G ungerichtet
Kap. 6.6: Kürzeste Wege
Kap. 6.6: Kürzeste Wege Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 1./. VO DAP SS 009./9. Juli 009 1 Nachtest für Ausnahmefälle Di 1. Juli 009, 16:00 Uhr,
Kap. 6.6: Kürzeste Wege
0.0.00 Nachtest für Ausnahmefälle Kap..: Kürzeste Wege Professor Dr. Lehrstuhl für Algorithm Engineering, LS Fakultät für Informatik, TU Dortmund./. VO DAP SS 00./. Juli 00 Di. Juli 00, :00 Uhr, OH, R.
Klausurvorbereitung. 1 Zentrale Begriffe. 2 Bipartite Graphen. 2.1 Begriffe. Vorlesung Graphen und Optimierung Sommersemester 2011 Prof. S.
Vorlesung Graphen und Optimierung Sommersemester 2011 Prof. S. Lange Klausurvorbereitung Hier finden Sie alle Begriffe, Zusammenhänge und Algorithmen, die mit Blick auf die Klausur relevant sind. Um es
Vorlesung 2 KÜRZESTE WEGE
Vorlesung 2 KÜRZESTE WEGE 34 Kürzeste Wege im Graphen Motivation! Heute:! Kürzeste Wege von einem Knoten (SSSP)! Kürzeste Wege zwischen allen Knotenpaaren (APSP)! Viele Anwendungen:! Navigationssysteme!
Graphalgorithmen II. Werner Sembach Werner Sembach Graphalgorithmen II / 22
Graphalgorithmen II Werner Sembach 14.04.2014 Werner Sembach Graphalgorithmen II 14.04.2014 1 / 22 Übersicht Datenstrukturen Union-Find Fibonacci-Heap Werner Sembach Graphalgorithmen II 14.04.2014 2 /
15. Elementare Graphalgorithmen
Graphen sind eine der wichtigste Modellierungskonzepte der Informatik Graphalgorithmen bilden die Grundlage vieler Algorithmen in der Praxis Zunächst kurze Wiederholung von Graphen. Dann Darstellungen
Kürzeste (billigste) Wege
Kürzeste (billigste) Wege 1. Kürzeste (billigste) Wege Gerichteter Graph G = (V, E) Kostenfunktion c : E R 1 2 1 3 3 2 4 4 2 6 6 5 3 2 Entfernung zwischen zwei Knoten Kosten eines Wegs P = v 0, v 1,...,
3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel
3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel EADS 3.1 Konstruktion von minimalen Spannbäumen 16/36
Algo&Komp. - Wichtige Begriffe Mattia Bergomi Woche 6 7
1 Kürzeste Pfade Woche 6 7 Hier arbeiten wir mit gewichteten Graphen, d.h. Graphen, deren Kanten mit einer Zahl gewichtet werden. Wir bezeichnen die Gewichtsfunktion mit l : E R. Wir wollen einen kürzesten
Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität
Datenstrukturen und Algorithmen Christian Sohler FG Algorithmen & Komplexität 1 Klausur Wichtige Hinweise: 2.7.07, Beginn 9 Uhr Bitte spätestens 8:4 Uhr vor Ort sein Sporthalle + Audimax Informationen
Übungsblatt 2 - Lösung
Institut für Theoretische Informatik Lehrstuhl Prof. Dr. D. Wagner Übungsblatt 2 - Lösung Vorlesung Algorithmentechnik im WS 08/09 Ausgabe 04. November 2008 Abgabe 8. November, 5:0 Uhr (im Kasten vor Zimmer
3. Musterlösung. Problem 1: Boruvka MST
Universität Karlsruhe Algorithmentechnik Fakultät für Informatik WS 06/07 ITI Wagner. Musterlösung Problem : Boruvka MST pt (a) Beweis durch Widerspruch. Sei T MST von G, e die lokal minimale Kante eines
\ E) eines Graphen G = (V, E) besitzt die gleiche Knotenmenge V und hat als Kantenmenge alle Kanten des vollständigen Graphen ohne die Kantenmenge E.
Das Komplement Ḡ = (V, ( V ) \ E) eines Graphen G = (V, E) besitzt die gleiche Knotenmenge V und hat als Kantenmenge alle Kanten des vollständigen Graphen ohne die Kantenmenge E. Ein Graph H = (V, E )
ADS: Algorithmen und Datenstrukturen 2
ADS: Algorithmen und Datenstrukturen 2 Teil 4 Prof. Peter F. Stadler & Dr. Christian Höner zu Siederdissen Bioinformatik/IZBI Institut für Informatik & Interdisziplinäres Zentrum für Bioinformatik Universität
2. November Gradfolgen Zusammenhang Kürzeste Wege. H. Meyerhenke: Algorithmische Methoden zur Netzwerkanalyse 37
2. November 2011 Gradfolgen Zusammenhang Kürzeste Wege H. Meyerhenke: Algorithmische Methoden zur Netzwerkanalyse 37 Satz von Erdős und Gallai Eine Partition einer natürlichen Zahl ist genau dann die Gradfolge
Algorithmen und Datenstrukturen
1 Algorithmen und Datenstrukturen Wintersemester 2016/17 19. Vorlesung Kürzeste Wege & Dijkstras Algorithmus Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I Wozu kürzeste Wege? 2 3-8 Modellierung
Proseminar Online Algorithmen, Prof. Dr. Rolf Klein
Proseminar Online Algorithmen, Prof. Dr. Rolf Klein Vortrag von Michael Daumen am 13.12.2000 Thema : Minimum Spanning Tree und 2-Approximation der TSP-Tour Inhalt des Vortrags : 1. genaue Vorstellung des
Kap. 6.5: Minimale Spannbäume
Kap. 6.5: Minimale Spannbäume Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 19./20. VO DAP2 SS 2009 30.6./2.7.2009 1 Anmeldung zur Klausur 31.07.2009 um 10:15
Teil 2: Graphenalgorithmen
Teil : Graphenalgorithmen Anwendungen Definitionen Datenstrukturen für Graphen Elementare Algorithmen Topologisches Sortieren Kürzeste Wege Problemstellung Ungewichtete Graphen Distanzgraphen Gewichtete
1 Kürzeste Pfade in Graphen
Praktikum Algorithmen-Entwurf (Teil 3) 03.11.2011 1 1 Kürzeste Pfade in Graphen Es sei ein gerichteter Graph G = (V, E) mit V = n Knoten, E = m Kanten und Kantengewichten c : E R gegeben. Ein Pfad in G
Kapitel 4: Minimale spannende Bäume Gliederung der Vorlesung
Kapitel : Minimale spannende Bäume Gliederung der Vorlesung. Grundbegriffe 2. Elementare Graphalgorithmen und Anwendungen. Kürzeste Wege. Minimale spannende Bäume. Färbungen und Cliquen. Traveling Salesman
Optimale Lösungen mit Greedy-Strategie erfordern Optimalität der Greedy-Wahl. Beispiele für optimale Greedy-Lösungen
Wiederholung Optimale Lösungen mit Greedy-Strategie erfordern Optimalität der Greedy-Wahl unabhängig von Subproblemen Optimalität der Subprobleme Beispiele für optimale Greedy-Lösungen Scheduling Problem
Kapitel 4: Minimal spannende Bäume Gliederung der Vorlesung
Kapitel : Minimal spannende Bäume Gliederung der Vorlesung. Fallstudie Bipartite Graphen 2. Grundbegriffe. Elementare Graphalgorithmen und Anwendungen. Minimal spannende Bäume. Kürzeste Wege. Traveling
Definition Gerichteter Pfad. gerichteter Pfad, wenn. Ein gerichteter Pfad heißt einfach, falls alle u i paarweise verschieden sind.
3.5 Gerichteter Pfad Definition 291 Eine Folge (u 0, u 1,..., u n ) mit u i V für i = 0,..., n heißt gerichteter Pfad, wenn ( i {0,..., n 1} ) [ (u i, u i+1 ) A]. Ein gerichteter Pfad heißt einfach, falls
Ein Graph ist ein Paar (V,E), wobei V eine Menge von Knoten und E eine Menge von Kanten (v,w) mit v,w in V ist.
Graphen Definition: Ein Graph ist ein Paar (V,E), wobei V eine Menge von Knoten und E eine Menge von Kanten (v,w) mit v,w in V ist. Begriffe: Gerichteter Graph: Alle Kanten haben eine Richtung vom Anfangsknoten
Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden!
Albert-Ludwigs-Universität Institut für Informatik Prof. Dr. F. Kuhn Informatik II: Algorithmen & Datenstrukturen Montag, 29. August, 2014, 14:00 17:00 Name:...........................................................
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Graphen 9/1 Begriffsdefinitionen Ein Graph besteht aus Knoten und Kanten. Ein Knoten(Ecke) ist ein benanntes Objekt. Eine Kante verbindet zwei Knoten. Kanten haben ein Gewicht
Programmierkurs Python II
Programmierkurs Python II Stefan Thater & Michaela Regneri Universität des Saarlandes FR 4.7 Allgemeine Linguistik (Computerlinguistik) Übersicht Topologische Sortierung (einfach) Kürzeste Wege finden
Name:... Vorname:... Matr.-Nr.:... Studiengang:...
Technische Universität Braunschweig Sommersemester 2013 IBR - Abteilung Algorithmik Prof. Dr. Sándor P. Fekete Dr. Christiane Schmidt Stephan Friedrichs Klausur Netzwerkalgorithmen 16.07.2013 Name:.....................................
7. Der Entwurf von Algorithmen (Fortsetzung)
Prof. Dr. Norbert Blum M.Sc. Adrian Schmitz Informatik V BA-INF 041 - Algorithmen und Berechnungskomplexität II SS 2015 Mögliche Klausuraufgaben Stand 1. Juli 2015 Bitte beachten Sie, dass die tatsächlichen
Fortgeschrittene Netzwerk- und Graph-Algorithmen
Fortgeschrittene Netzwerk- und Graph-Algorithmen Prof. Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Wintersemester
Rückblick: Starke Zusammenhangskomponenten
Rückblick: Starke Zusammenhangskomponenten Der Algorithmus von Kosaraju bestimmt die starken Zusammenhangskomponenten eines gerichteten Graphen wie folgt: Schritt 1: Bestimme den transponierten Graphen
Kapitel IV Minimale Spannbäume
Kapitel IV Minimale Spannbäume 1. Grundlagen Ein Graph G = (V, E) besteht aus einer Menge V von Knoten und einer Menge E von Kanten. Wir werden nur endliche Knoten- (und damit auch Kanten-) Mengen betrachten.
Datenstrukturen und Algorithmen SS07
Datenstrukturen und Algorithmen SS0 Datum:.6.200 Michael Belfrage [email protected] belfrage.net/eth Programm von Heute Minimaler Spannbaum (MST) Challenge der Woche Fibonacci Heap Minimaler Spannbaum
Grundzüge von Algorithmen und Datenstrukturen, WS 15/16: Lösungshinweise zum 13. Übungsblatt
U N S A R I V E R S A V I E I T A S N I S S Grundzüge von Algorithmen und Datenstrukturen, WS /6: Lösungshinweise zum 3. Übungsblatt Christian Hoffmann, Fabian Bendun Aufgabe 3. (a) Sei j i + = n die Größe
Kapitel 5: Minimale spannende Bäume Gliederung der Vorlesung
Gliederung der Vorlesung 1. Grundbegriffe 2. Elementare Graphalgorithmen und Anwendungen 3. Kürzeste Wege. Minimale spannende Bäume. Färbungen und Cliquen. Traveling Salesman Problem. Flüsse in Netzwerken
Definition Ein gerichteter Graph G = (V, E) ist ein Graph von geordneten Paaren (u, v) mit u V und v V.
Kapitel 4 Graphenalgorithmen 4.1 Definitionen Definition 4.1.1. Der Graph G = (V, E) ist über die beiden Mengen V und E definiert, wobei V die Menge der Knoten und E die Menge der Kanten in dem Graph ist.
Effiziente Algorithmen I
9. Präsenzaufgabenblatt, WiSe 2013/14 Übungstunden am 13.01. & 15.01.2014 Aufgabe Q Gegeben sei ein Fluss-Netzwerk mit Digraph D = (V, A), Knotenkapazitäten c(u, v) 0, Quelle s und Senke t. Kann sich der
Maximale s t-flüsse in Planaren Graphen
Maximale s t-flüsse in Planaren Graphen Vorlesung Algorithmen für planare Graphen 6. Juni 2017 Guido Brückner INSTITUT FÜR THEORETISCHE INFORMATIK PROF. DR. DOROTHEA WAGNER KIT Universität des Landes Baden-Württemberg
1.Aufgabe: Minimal aufspannender Baum
1.Aufgabe: Minimal aufspannender Baum 11+4+8 Punkte v 1 v 2 1 3 4 9 v 3 v 4 v 5 v 7 7 4 3 5 8 1 4 v 7 v 8 v 9 3 2 7 v 10 Abbildung 1: Der Graph G mit Kantengewichten (a) Bestimme mit Hilfe des Algorithmus
Richtig oder falsch? Richtig oder falsch? Richtig oder falsch? Mit dynamischer Programmierung ist das Knapsack- Problem in Polynomialzeit lösbar.
Gegeben sei ein Netzwerk N = (V, A, c, s, t) wie in der Vorlesung. Ein maximaler s-t-fluss kann immer mit Hilfe einer Folge von höchstens A Augmentationsschritten gefunden werden. Wendet man den Dijkstra-Algorithmus
Kürzester Wege in Graphen
Kürzester Wege in Graphen Zur Bestimmung von kürzesten Wegen in Graphen betrachten wir zwei unterschiedliche Algorithmen: Path Problem All Pairs Shortest Path-Problem Algorithmen und Datenstrukturen 336
Aufgabe 4.2 Sei G = (V, E, l) ein ungerichteter, gewichteter und zusammenhängender Graph.
Aufgabe 4.2 Sei G = (V, E, l) ein ungerichteter, gewichteter und zusammenhängender Graph. a) Es seien W 1 = (V, E 1 ), W 2 = (V, E 2 ) Untergraphen von G, die beide Wälder sind. Weiter gelte E 1 > E 2.
Algorithmische Graphentheorie
Algorithmische Graphentheorie Vorlesung 7 und 8: Euler- und Hamilton-Graphen Babeş-Bolyai Universität, Department für Informatik, Cluj-Napoca [email protected] 17. April 2018 1/96 WIEDERHOLUNG Eulersche
3. Musterlösung. Problem 1: Heapsort
Universität Karlsruhe Algorithmentechnik Fakultät für Informatik WS 05/06 ITI Wagner 3. Musterlösung Problem : Heapsort ** 2 3 4 5 Algorithmus : Heapsort (A) Eingabe : Array A der Länge n Ausgabe : Aufsteigend
21. Greedy Algorithmen. Aktivitätenauswahl, Fractional Knapsack Problem, Huffman Coding Cormen et al, Kap. 16.1, 16.3
581 21. Greedy Algorithmen Aktivitätenauswahl, Fractional Knapsack Problem, Huffman Coding Cormen et al, Kap. 16.1, 16.3 Aktivitäten Auswahl 582 Koordination von Aktivitäten, die gemeinsame Resource exklusiv
Algorithmen und Datenstrukturen 2-1. Seminar -
Algorithmen und Datenstrukturen 2-1. Seminar - Dominic Rose Bioinformatics Group, University of Leipzig Sommersemster 2010 Outline 1. Übungsserie: 3 Aufgaben, insgesamt 30 28 Punkte A1 Spannbäume (10 8
11. GRAPHEN 3 FLÜSSE UND SPANNBÄUME
Algorithmen und Datenstrukturen 11. GRAPHEN 3 FLÜSSE UND SPANNBÄUME Algorithmen und Datenstrukturen - Ma5hias Thimm ([email protected]) 1 Algorithmen und Datenstrukturen 11.1. BERECHNUNG MAXIMALER FLÜSSE
5. Bäume und Minimalgerüste
5. Bäume und Minimalgerüste Charakterisierung von Minimalgerüsten 5. Bäume und Minimalgerüste Definition 5.1. Es ein G = (V, E) ein zusammenhängender Graph. H = (V,E ) heißt Gerüst von G gdw. wenn H ein
Zentralübung zur Vorlesung Diskrete Strukturen (Prof. Esparza)
WS 2013/14 Zentralübung zur Vorlesung Diskrete Strukturen (Prof. Esparza) Dr. Werner Meixner Fakultät für Informatik TU München http://www14.in.tum.de/lehre/2013ws/ds/uebung/ 22. Januar 2014 ZÜ DS ZÜ XIII
Algorithmen und Datenstrukturen 2
Algorithmen und Datenstrukturen 2 Sommersemester 2006 5. Vorlesung Peter F. Stadler Universität Leipzig Institut für Informatik [email protected] Wdhlg.: Dijkstra-Algorithmus I Bestimmung der
Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen
Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen 186.172 Algorithmen und Datenstrukturen 1 VL 4.0 Übungsblatt 4 für die Übung
Lernmodul 7 Algorithmus von Dijkstra
Folie 1 von 30 Lernmodul 7 Algorithmus von Dijkstra Quelle: http://www.map24.de Folie 2 von 30 Algorithmus von Dijkstra Übersicht Kürzester Weg von A nach B in einem Graphen Problemstellung: Suche einer
Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Übersicht: Graphen. Definition: Ungerichteter Graph. Definition: Ungerichteter Graph
Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 07 Dr. Stefanie Demirci Computer Aided Medical Procedures Technische Universität München 7 Fortgeschrittene Datenstrukturen Graphen
