Routing-Algorithmen Chris, Johannes, Hans 1/33 Routingalgorithmen – Handout Inhaltsverzeichnis 1. Grundlagen........................................................................................................................1 1.1. Graph..........................................................................................................................1 1.2. Eigenschaften von Graphen.......................................................................................2 1.3. Baum...........................................................................................................................2 1.4. Greedy-Prinzip............................................................................................................3 1.5. Routingalgorithmen.....................................................................................................3 1.6. Unterscheidungskriterien von Routing-Algorithmen...................................................3 1.7. Eigenschaften von Routingalgorithmen......................................................................4 2. Funktionsweise der Algorithmen........................................................................................5 2.1. Dijkstra-Algorithmus....................................................................................................5 2.2. Moore-Bellman-Ford-Algorithmus............................................................................10 2.3. Prim-Algorithmus......................................................................................................14 2.4. A*-Algorithmus..........................................................................................................18 2.5. Kruskal-Algorithmus..................................................................................................22 2.6. Warshall und Floyd-Algorithmus...............................................................................25 3. Quellen.............................................................................................................................32 1. Grundlagen 1.1. Graph Ein Graph ist eine Repräsentation von einer Menge von Elementen, wobei diese Elemente durch Kanten paarweise verbunden sind. 1.2. Eigenschaften von Graphen 1.2.1. Zusammenhang Zusammenhängend Ein ungerichteter Graph ist zusammenhängend, falls man von jedem Knoten aus jeden anderen Knoten über die vorhandenen Kanten erreichen kann. Routing-Algorithmen Chris, Johannes, Hans 2/33 Stark zusammenhängend Ein gerichteter Graph ist stark zusammenhängend, falls man von jedem Knoten aus jeden anderen Knoten über die vorhandenen Kanten erreichen kann. Gerichtet / Ungerichtet In gerichtete Graphen haben die Kanten eine Richtung, in ungerichteten Graphen haben sie keine Richtung und sind bidirektional. Wertebereich der Kantengewichte Der Wertebereich der Kantengewichte kann sich unterscheiden. Manche Graphen haben nur positive Kantengewichte, andere haben auch negative Kantengewichte. 1.3. Baum Eine Baum ist ein Menge von verbundenen Knoten. 1.3.1. Kürzester Pfad (Shortest Path) Der kürzeste Pfad ist der Weg zwischen zwei Knoten, dessen Summe der Kantengewichte der enthaltenen Kanten minimal ist. 1.3.2. Spannbaum Ein Spannbaum ist ein Teilbaum, der alle Knoten eines Graphen enthält. Spannbäume dürfen keine Zyklen enthalten 1.3.3. Minimaler Spannbaum (Minimal-Spanning-Tree) Ein minimaler Spannbaum ist ein Spannbaum der von allen Spannbäumen das minimale Gesamtkantengewicht besitzt. Es kann mehrere minimale Spannbäume geben. 1.3.4. Kürzester-Weg-Baum (Shortest-Path-Tree) Ein Kürzester-Weg-Baum ist eine Menge von Kanten die die kürzesten Wege von einem Startpunkt zu allen Knoten im Graphen enthält. 1.4. Greedy-Prinzip Annahme: „Lokales Optimum führt zu globalem Optimum“ Beispiel: TODO 1.5. Routingalgorithmen 1. Dijkstra 2. Kruskal 3. Prim Routing-Algorithmen Chris, Johannes, Hans 3/33 4. Moore-Bellman-Ford 5. Floyd und Warshall 6. A-Stern / A* 1.6. Unterscheidungskriterien von RoutingAlgorithmen 1.6.1. Zentralisation Wo wird der Algorithmus durchgeführt? Verteilt auf die einzelnen Knoten oder zentral in einem Zentrum? Die Distanzdaten oder Verbindungszustandsdaten können entweder von einem Router verarbeitet werden, oder aber vom Anfragesteller selbst. 1.6.2. Dynamik Adaptiv / nicht adaptiv: Adaptiv bedeutet, dass Routing-Entscheidungen auf Basis des momentanen Zustands des Graphen getroffen werden. Nicht adaptiv bedeutet, dass die Routing-Entscheidungen aufgrund von einer Routing-Tabelle die über einen längeren Zeitraum gespeichert ist getroffen werden. 1.6.3. Zielsetzung: Was wird berechnet? • Kürzester Weg von einem Knoten zu Knoten • • • Kürzester Weg von einem Knoten zu allen Knoten Kürzester Weg von allen Knoten zu allen Knoten Minimaler Spannbaum 1.6.4. Flach oder Hierarchisch „Flach“ bedeutet, dass alle Knoten des Graphen die gleiche Verantwortung tragen und die Information, die vom Startknoten aus gesendet wird weitersenden an andere Knoten, bis das Ziel erreicht wurde. Sie agieren somit als Router. Hierarchisch bedeutet, dass die Knoten des Graphen, gemäß ihrer Position im Graphen oder ihrer Aufgabe in der realen Welt, in verschiedene Kategorien eingeteilt werden und gemäß dieser Kategorien unterschiedliche Aufgaben übernehmen. Dadurch kann der Ablauf der verschiedenen Aufgaben optimiert werden. 1.6.5. Art der Informationen die gesendet werden Es gibt Routing-Algorithmen, bei denen Knoten anderen Knoten ihre Entfernungen zu weiteren Knoten mitteilen und Routing-Algorithmen bei denen nur mitgeteilt wird, ob Knoten mit anderen Knoten verbunden sind oder nicht (Verbindungszustand VS Distanzvektor). Routing-Algorithmen Chris, Johannes, Hans 4/33 1.6.6. Domainen-übergreifend oder Domainen-intern Manche Routing-Algorithmen werden domainen-intern verwendet, andere auch domainenübergreifend. 1.7. Eigenschaften von Routingalgorithmen 1.7.1. Stabilität Ein Routing-Algorithmus muss gleichmäßige Ergebnisse liefern, d.h. er soll deterministisch sein und für dieselbe Ausgangssituation immer dasselbe Ergebnis liefern. 1.7.2. Einfachheit Der Routing-Algorithmus muss effizient sein, d.h. zeit- und platzsparend. 1.7.3. Korrektheit Der Routing-Algorithmus findet für ein lösbares Problem stets eine vollständige Lösung. 1.7.4. Optimal Der Routing-Algorithmus ermittelt immer den optimalen Pfad, also den kürzesten Weg von A nach B, sofern benötigte Ressourcen (Zeit/Speicher) vorhanden sind. Routing-Algorithmen Chris, Johannes, Hans 5/33 2. Funktionsweise der Algorithmen 2.1. Dijkstra-Algorithmus 2.1.1. Beschreibung Der Dijkstra-Algorithmus findet den kürzesten Weg zwischen 2 Punkten. (Shortest Path) 2.1.2. Anwendbarkeit Anwendbar auf alle Graphen, die folgende Bedingungen erfüllen: 1. keine negativen Kantengewichte 2. ungerichtet und zusammenhängend oder gerichtet und stark zusammenhängend 2.1.3. Einsatzgebiet 1. Routenplaner 2. Routing im Internet und in drahtlosen Ad-hoc-Netzwerken 2.1.4. Algorithmus Schritt 1: Gib allen Knoten die Weglänge ∞. Schritt 2: Gib dem Startknoten die Weglänge 0. Schritt 3: Fange beim Startknoten an. Schritt 4: Markiere den aktuellen Knoten als besucht. Schritt 5: Gib allen benachbarten Knoten das Minimum aus der Summe des aktuellen Knoten und der zu ihnen führenden Kante und ihrer bisherigen Weglänge als Weglänge. Schritt 6: Nimm den Knoten mit der geringsten Weglänge als neuen aktuellen Knoten. Schritt 7: Wiederhole ab Schritt 4, bis alle Knoten als besucht markiert sind oder der Zielknoten eine geringere Weglänge hat als alle nicht besuchten Knoten. Routing-Algorithmen Chris, Johannes, Hans 2.1.5. Algorithmus-Beispiel 6/33 Routing-Algorithmen Chris, Johannes, Hans 7/33 Routing-Algorithmen Chris, Johannes, Hans 8/33 Routing-Algorithmen Chris, Johannes, Hans 9/33 2.1.6. Laufzeiten / Komplexität n = Anzahl der Knoten m = Anzahl der Kanten Worst Case: O(n 2) 2.1.7. Vorteile und Nachteile − Der Algorithmus kann nur mit positiven Kantengewichten umgehen. + Der Algorithmus ist optimal, es wird immer der kürzeste Weg zwischen zwei Punkten gefunden. Routing-Algorithmen Chris, Johannes, Hans 10/33 2.2. Moore-Bellman-Ford-Algorithmus 2.2.1. Beschreibung Der Moore-Bellman-Ford-Algorithmus berechnet einen Kürzester-Weg-Baum für einen gegebenen Knoten im Graphen. 2.2.2. Anwendbarkeit Der Algorithmus ist anwendbar, falls für den Graphen gilt: • Graph muss zusammenhängend sein. 2.2.3. Einsatzgebiet • Distanzvektoralgorithmus (wird vom Routing Information Protocol, RIP) 2.2.4. Algorithmus Schritt 1: Gib allen Knoten die Weglänge ∞. Schritt 2: Gib dem Startknoten die Weglänge 0. Schritt 3: Fange beim Startknoten an. Schritt 4: Markiere den aktuellen Knoten als besucht. Schritt 5: Gib allen benachbarten Knoten das Minimum aus der Summe des aktuellen Knoten und der zu ihnen führenden Kante und ihrer bisherigen Weglänge als Weglänge. Schritt 6: Wiederhole ab Schritt 4, bis alle Knoten als besucht markiert sind. Schritt 7: Nimm den Knoten mit der geringsten Weglänge als neuen aktuellen Knoten. 2.2.5. Algorithmus-Beispiel Routing-Algorithmen Chris, Johannes, Hans 11/33 Routing-Algorithmen Chris, Johannes, Hans 12/33 Routing-Algorithmen Chris, Johannes, Hans 13/33 Routing-Algorithmen Chris, Johannes, Hans 14/33 2.2.6. Laufzeiten / Komplexität 3 Worst Case: O(|V|⋅|E|)= O(|V | ) 2.2.7. Vorteile und Nachteile + Kann mit negativ gewichteten Kanten umgehen 2.2.8. Unterschied zum Dijkstra-Algorithmus Der Dijkstra-Algorithmus bricht ab, wenn der Zielknoten die niedrigste Weglänge von allen noch nicht besuchten Knoten besitzt. Deshalb kann es vorkommen, dass bei Vorhandensein von negativen Kanten eine negative Kante zum Zielknoten führt, die aber nicht untersucht wird, da der Algorithmus zuvor einen anderen Pfad eingeschlagen hat („Greedy“). Deshalb kann es bei Vorhandensein von negativen Kantengewichtungen zu Ergebnissen kommen, die nicht der Shortest-Path vom Start zum Zielknoten sind. Daraus folgt, dass der Dijkstra-Algorithmus Graphen mit negativen Kantengewichtungen nicht zuverlässig betrachten kann. Da der Moore-Bellman-Ford-Algorithmus den Shortest-Path-Tree eines Startknotens ermittelt, betrachtet er alle Knoten. Dadurch kann es nicht vorkommen, dass manche Pfade wie beim Dijkstra-Algorithmus nicht beachtet werden. Dadurch können auch negative Kantengewichtungen korrekt verarbeitet werden. • • 1930 vom tschechischen Mathematiker Vojtěch Jarník entwickelt Erweiterung des Dikstra-Algorithmus 2.3. Prim-Algorithmus 2.3.1. Beschreibung • • Auch ein Greedy-Algorithmus, der lokale Idealfälle zum Aufbau des Spannbaumes nutzt Vergleichbar mit Kruskal, der auch minimalen Spannbaum ermittelt 2.3.2. Anwendbarkeit Der Graph muss folgende Kriterien erfüllen: • Positive Kantengewichte im Graphen 2.3.3. Einsatzgebiet • Abschätzen von Reihenfolgen (optimales Broadcasting, Gaming) • Einsatz zur Routenplanung denkbar 2.3.4. Algorithmus Schritt 1: Markiere einen Startknoten. Schritt 2: Betrachte alle Kanten die von den markierten Knoten ausgehen und zu Routing-Algorithmen Chris, Johannes, Hans 15/33 Knoten fuehren die noch nicht markiert sind und markiere diejenige Kante mit dem geringsten Gewicht. Schritt 3: Markiere die Knoten, die mit der markierten Kante verbunden sind. Schritt 4: Wiederhole ab Schritt 2 solange noch Knoten nicht markiert sind (Anzahl der Knoten – 1 Wiederholungen). 2.3.5. Algorithmus-Beispiel Routing-Algorithmen Chris, Johannes, Hans 16/33 Routing-Algorithmen Chris, Johannes, Hans 2.3.6. Laufzeiten / Komplexität O(|V|2) (einfaches Feld) optimiert: O(|E|log|V|) (Vorrangswarteschlange) 17/33 Routing-Algorithmen Chris, Johannes, Hans 2.3.7. Vorteile und Nachteile + sehr einfach zu implementieren − nicht immer der minimaler Spannbaum − nicht eindeutiges Ergebnis (mehrere korrekte Lösungen je nach Startknoten) 18/33 Routing-Algorithmen Chris, Johannes, Hans 19/33 2.4. A*-Algorithmus 2.4.1. Beschreibung A* findet den kürzesten Weges zwischen zwei Knoten im Graphen. 2.4.2. Anwendbarkeit Der Graph muss folgende Kriterien erfüllen: 1. Positive Kantengewichte 2.4.3. Einsatzgebiet • Hauptsächlich Navigation, Wegsuche in Routenplanern • Allgemeine Probleme die in Graphen darstellbar sind (anhand der Kostenfunktion) ◦ 15-Puzzle, Damenproblem 2.4.4. Algorithmus Schritt 1: Lege Start- und Zielknoten fest Schritt 2: Bestimme Heuristik wie folgt: 0 ≤h()≤ g() beginne am Zielknoten g() = Gewichtung h() = Heuristik Schritt 3: Beginne beim Startknoten Schritt 4: Suche die Kante mit dem geringsten Gewicht und addiere die Heuristik dazu Schritt 5: Gehe zu dem Knoten mit dem geringstem „Gesamtgewicht“ (errechnet in Schritt 4) Schritt 6: Wiederhole Schritte 4 und 5 bis der Zielknoten erreicht ist Routing-Algorithmen Chris, Johannes, Hans 2.4.5. Algorithmus-Beispiel 20/33 Routing-Algorithmen Chris, Johannes, Hans 21/33 Routing-Algorithmen Chris, Johannes, Hans 22/33 2.4.6. Laufzeiten / Komplexität Worst Case: O(|V|2) abhängig von der verwendeten Heuristik Average Case: O(|E|⋅log|V |) 2.4.7. Vorteile und Nachteile − Alle Knoten müssen im Speicher gehalten werden → Hoher Speicherbedarf → Für viele Probleme nicht geeignet, da zu viele Knoten → Algorithmus findet dann keine Lösung + Der Algorithmus ist optimal, es wird immer der kürzeste Weg zwischen zwei Punkten gefunden. + Kann sehr vielfältig eingesetzt werden. − Laufzeit hängt von der verwendeten Heuristik ab − Grobe Richtung muss für Heuristik bekannt sein − Schnellster weg schnell bestimmbar Routing-Algorithmen Chris, Johannes, Hans 23/33 2.5. Kruskal-Algorithmus 2.5.1. Beschreibung Der Kruskal-Algorithmus berechnet den minimalen Spannbaum eines Graphen. Der minimale Spannbaum (Minimal-Spanning-Tree) ist nicht unbedingt gleich dem ShortestPath-Tree. 2.5.2. Anwendbarkeit Der Kruskal-Algorithmus ist anwendbar auf Graphen die folgende Kriterien erfüllen: 1. zusammenhängend : Jeder Knoten muss von jedem Knoten aus über die Kanten erreichbar sein 2. ungerichtete Kanten 3. kantengewichtete : Alle Kanten müssen gewichtet sein. 2.5.3. Einsatzgebiet Der Kruskal-Algorithmus wird zum Beispiel verwendet den minimalen Spannbaum von Computer- oder Telefonnetzwerken zu berechnen und somit eine günstige Möglichkeit zu finden die Geräte miteinander in einem Netzwerk zu verbinden. Er wird auch in Annäherungsalgorithmen für das Travelling-Salesman-Problem verwendet. 2.5.4. Algorithmus Schritt 1: Die Menge der gemerkten Knoten ist leer. Schritt 2: Die Menge der Kanten aus denen der Spannbaum aufgebaut wird ist leet. Schritt 3: Suche die kleinste Kante, die zwei noch nicht gemerkte Knoten verbindet Schritt 4: Füge die durch die Kante verbundenen Knoten den gemerkten Knoten hinzu Schritt 5: Füge die Kante dem Spannbaum hinzu Schritt 6: Wiederhole Schritt 3 bis 5, bis alle existierenden Knoten in der Menge der gemerkten Knoten sind Routing-Algorithmen Chris, Johannes, Hans 2.5.5. Algorithmus-Beispiel 24/33 Routing-Algorithmen Chris, Johannes, Hans 25/33 2.5.6. Laufzeiten / Komplexität Worst Case: O(E log V ) 2.5.7. Vorteile und Nachteile − Nur bedingt für Wegsuche einsetzbar da der minimale Spannbaum nicht gleich dem Kürzester-Weg-Baum sein muss. − Der Kruskal-Algorithmus arbeitet nicht-deterministisch, das heißt für gleiche Graphen kann ein unterschiedlicher minimaler Spannbaum als Ergebnis entstehen. + Geringe Komplexität Routing-Algorithmen Chris, Johannes, Hans 26/33 2.6. Warshall und Floyd-Algorithmus 2.6.1. Beschreibung Findet von jedem zu jedem anderen Knoten den kürzesten Weg. 2.6.2. Anwendbarkeit Der Warshall-Floyd-Algorithmus ist anwendbar auf Graphen die folgende Kriterien erfüllen: 1. zusammenhängend : Jeder Knoten muss von jedem Knoten aus über die Kanten erreichbar sein 2. kantengewichtete : Alle Kanten müssen gewichtet sein. 3. Positive und negative Kantengewichte 4. Gerichtete und ungerichtete Graphen 2.6.3. Einsatzgebiet Der Algorithmus könnte überall dort eingesetzt werden, wo man auf die Frage nach dem kürzesten Weg in linearer Zeit antworten möchte, da der Algorithmus bei einem Durchlauf die kürzesten Wege zwischen allen Punkten berechnet und diese in einer Sequenztabelle abspeichert. Daraufhin ist ein Nachschauen in der Tabelle möglich um die kürzeste Verbindung zwischen 2 Punkten zu finden und der kürzeste Weg muss nicht neu berechnet werden. Der Algorithmus eignet sich für die Wegfindung in unveränderlichen Graphen und wenn man für die Berechnung der kürzesten Wege einmalig viel Zeit in Anspruch nehmen kann. In solchem Fall ist das Nachschauen des kürzesten Weges in linearer Zeit möglich, während zum Beispiel beim Dijkstra-Algorithmus ohne zusätzliches Abspeichern der kürzesten Wege eine quadratische Zeit notwendig ist um einen kürzesten Weg nachzuschauen. 2.6.4. Algorithmus Schritt 1: Beginne mit Iteration 0. Schritt 2: Erstelle eine Distanztabelle Dk wobei k für die Iteration des Algorithmus steht. Schritt 3: Erstelle eine Sequenztabelle Sk wobei k für die Iteration des Algorithmus steht. Schritt 4: Fülle die Diagonale der Distanztabelle mit ∞. Schritt 5: Fülle die Diagonale der Sequenztabelle mit - . Schritt 6: Trage sichtbare einschrittige Distanzen in die Distanztabelle eine. Schritt 7: Fülle die Sequenztabelle mit den Knotennamen der jeweiligen Spalte der Routing-Algorithmen Chris, Johannes, Hans 27/33 Sequenztabelle. Schritt 8: Beginne mit der ersten Iteration (k+1). Schritt 9: Markiere ein Kreuz in der Distanztabelle, sodass Reihe und Spalte der momentanen Iteration das Kreuz bilden. Schritt 10: Markiere alle Zellen zu denen sich waagerecht und senkrecht im Kreuz Gewichte / Distanzen befinden die nicht ∞ sind. Schritt 11: Berechne neue Distanzwerte für die Zellen der Distanztabelle wie folgt: i = Reihe j = Spalte k = Iteration/Durchgang Min : Berechnet das Minimum Z : Zelle Z(i, j)) = Min(Z(i, j), Z(i, k) + Z(k, I)) Schritt 12: Aktualisiere die Sequenztabelle wie folgt: Falls neuer Wert in Distanztabelle trage bei gleicher Reihe und Spalte in der Sequenztabelle k (Iteration / Durchgang) ein. Falls kein neuer Wert, dann keine Veränderung nötig. Schritt 13: Wiederhole ab Schritt 8 solange bis k = Anzahl der Knoten – 1. 2.6.5. Algorithmus-Beispiel: Schritt 0: Distanz und Sequenztabelle Schritt 1: Routing-Algorithmen Chris, Johannes, Hans 28/33 Diagonale mit ∞ füllen D0 1 2 3 4 S0 1 - ∞ ∞ ∞ 1 2 ∞ - ∞ ∞ 2 3 ∞ ∞ - ∞ 3 4 ∞ ∞ ∞ - 4 1 2 3 4 1 2 3 4 Schritt 2: Einschrittig sichtbare Distanzen eintragen D0 1 2 3 4 S0 1 - 2 4 ∞ 1 2 2 - 1 5 2 3 4 1 - 3 3 4 ∞ 5 3 - 4 Schritt 3: Sequenztabelle auffüllen mit dem Knotennamen der Spalte D1 1 2 3 4 S0 1 2 3 4 1 - 2 4 ∞ 1 - 2 3 4 2 2 - 1 5 2 1 - 3 4 3 4 1 - 3 3 1 2 - 4 4 ∞ 5 3 - 4 1 2 3 - Schritt 4: Markiere Kreuz sodass Reihe und Spalte der momentanen Iteration (am Anfang 1) das Kreuz bilden Routing-Algorithmen Chris, Johannes, Hans 29/33 D1 1 2 3 4 S0 1 2 3 4 1 - 2 4 ∞ 1 - 2 3 4 2 2 - 1 5 2 1 - 3 4 3 4 1 - 3 3 1 2 - 4 4 ∞ 5 3 - 4 1 2 3 - Schritt 5: Markiere alle Zellen zu denen sich waagerecht und senkrecht im Kreuz Gewichte / Distanzen befinden die nicht ∞ sind D1 1 2 3 4 S1 1 2 3 4 1 - 2 4 ∞ 1 - 2 3 4 2 2 - 1 5 2 1 - 3 4 3 4 1 - 3 3 1 2 - 4 4 ∞ 5 3 - 4 1 2 3 - Schritt 6: Berechne Distanz in den markierten Zellen. i = j = k = Min Z : Reihe Spalte Iteration/Durchgang : Berechnet das Minimum Zelle Z(i, j)) = Min(Z(i, j), Z(i, k) + Z(k, I)) D1 1 2 3 4 S1 1 2 3 4 1 - 2 4 ∞ 1 - 2 3 4 2 2 - 1 5 2 1 - 3 4 3 4 1 - 3 3 1 2 - 4 4 ∞ 5 3 - 4 1 2 3 - Schritt 7: Sequenztabelle aktualisieren: Routing-Algorithmen Chris, Johannes, Hans 30/33 Falls neuer Wert in Distanztabelle trage bei gleicher Reihe und Spalte in der Sequenztabelle k (Iteration / Durchgang) ein. Falls kein neuer Wert, dann keine Veränderung nötig. D1 1 2 3 4 S1 1 2 3 4 1 - 2 4 ∞ 1 - 2 3 4 2 2 - 1 5 2 1 - 3 4 3 4 1 - 3 3 1 2 - 4 4 ∞ 5 3 - 4 1 2 3 - D1 1 2 3 4 S1 1 2 3 4 1 - 2 4 ∞ 1 - 2 3 4 2 2 - 1 5 2 1 - 3 4 3 4 1 - 3 3 1 2 - 4 4 ∞ 5 3 - 4 1 2 3 - Schritt 8: Erhöhe k (Iteration / Durchgang) um 1. Schritt 9: Wiederhole solange bis Anzahl der Iterationen = Anzahl der Knoten – 1 ab Schritt 4 Vollständiges Beispiel: Iteration 2: D2 1 2 3 4 S2 1 2 3 4 1 - 2 4 ∞ 1 - 2 3 4 2 2 - 1 5 2 1 - 3 4 3 4 1 - 3 3 1 2 - 4 4 ∞ 5 3 - 4 1 2 3 - Routing-Algorithmen Chris, Johannes, Hans 31/33 D2 1 2 3 4 S2 1 2 3 4 1 - 2 3 7 1 - 2 3 4 2 2 - 1 5 2 1 - 3 4 3 3 1 - 3 3 1 2 - 4 4 7 5 3 - 4 1 2 3 - D2 1 2 3 4 S2 1 2 3 4 1 - 2 3 7 1 - 2 2 2 2 2 - 1 5 2 1 - 3 4 3 3 1 - 3 3 2 2 - 4 4 7 5 3 - 4 2 2 3 - D3 1 2 3 4 S3 1 2 3 4 1 - 2 3 7 1 - 2 2 2 2 2 - 1 5 2 1 - 3 4 3 3 1 - 3 3 2 2 - 4 4 7 5 3 - 4 2 2 3 - D3 1 2 3 4 S3 1 2 3 4 1 - 2 3 6 1 - 2 2 2 2 2 - 1 4 2 1 - 3 4 3 3 1 - 3 3 2 2 - 4 4 6 4 3 - 4 2 2 3 - Iteration 3: Routing-Algorithmen Chris, Johannes, Hans 32/33 D3 1 2 3 4 S3 1 2 3 4 1 - 2 3 6 1 - 2 2 3 2 2 - 1 4 2 1 - 3 3 3 3 1 - 3 3 2 2 - 4 4 6 4 3 - 4 3 3 3 - Tabelle der kürzesten Wege: Start Ziel Route Länge 1 2 1→2 2 1 3 1→2→3 3 1 4 1→2→3→4 6 2 3 2→3 1 2 4 2→3→4 4 3 4 3→4 3 2.6.6. Laufzeiten / Komplexität O(|V|3) 2.6.7. Vorteile und Nachteile − Lange Laufzeit + Nach einmaliger Berechnung hat man alle kürzesten Wege von allen Knoten zu allen anderen Knoten Routing-Algorithmen Chris, Johannes, Hans 33/33 3. Quellen 1. https://de.wikipedia.org/wiki/Routing#Routing-Algorithmen (24.09.2014) 2. https://en.wikipedia.org/wiki/Graph_%28mathematics%29 (24.09.2014) 3. https://de.wikipedia.org/wiki/Algorithmus_von_Kruskal (24.09.2014) 4. https://de.wikipedia.org/wiki/Spannbaum (24.09.2014) 5. https://en.wikipedia.org/wiki/Graph_theory (24.09.2014) 6. https://de.wikipedia.org/wiki/Link-State (24.09.2014) 7. https://de.wikipedia.org/wiki/Algorithmus_von_Kruskal#Formalisierter_Algorithmus (24.09.2014) 8. https://www.tm.th-wildau.de/~sbruntha/wiki/index.php/Routingalgorithmen (24.09.2014) 9. https://de.wikipedia.org/wiki/A*-Algorithmus (01.10.2014) 10. https://de.wikipedia.org/wiki/Dijkstra-Algorithmus (01.10.2014) 11. http://weierstrass.is.tokushima-u.ac.jp/ikeda/suuri/dijkstra/Dijkstra.shtml (01.10.2014) 12. https://de.wikipedia.org/wiki/Bellman-Ford-Algorithmus (01.10.2014) 13. http://interactivepython.org/runestone/static/pythonds/Graphs/graphshortpath.html (04.10.2014) 14. V. Turau, Algorithmische Graphentheorie, S. 80f 15. http://www.ukessays.com/essays/computer-science/in-flat-routing-algorithms.php (04.10.2014)