Teil III: Graphenalgorithmen

Größe: px
Ab Seite anzeigen:

Download "Teil III: Graphenalgorithmen"

Transkript

1 Teil III: Graphenalgorithmen Anwendungen Definitionen Datenstrukturen für Graphen Elementare Algorithmen Topologisches Sortieren Kürzeste Wege Minimal aufspannende Bäume Flüsse in Netzwerken Zusammenhangskomponenten Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

2 Kommunikationsnetze () Menge von Rechnern, die mit Leitungen verbunden sind. Beispiele Knoten (Rechner) Kante (Leitung) Vollständig vernetzte Struktur Sternstruktur Ringstruktur Busstruktur Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

3 Kommunikationsnetze () Zuverlässigkeit von Kommunikationsnetzen lässt sich bemessen durch: Verbindungszusammenhang: Minimale Anzahl von Verbindungen, bei deren Ausfall die Kommunikation zwischen irgendwelchen Knotenpaaren unterbrochen wird. Knotenzusammenhang: Minimale Anzahl von Knoten, bei deren Ausfall die Kommunikation zwischen irgendwelchen Knotenpaaren unterbrochen wird. Algorithmus Flüsse in Netzwerken. Routing-Problem Bestimme von einem Rechnerknoten den günstigsten Weg zum Zielknoten. Die Güte einer Verbindungskante ist dabei beispielsweise durch seine Paketkapazität definiert. Algorithmus kürzeste Wege in Graphen Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

4 Problemstellung Routenplanung Finde in einem Straßennetz die kürzeste Verbindung (Länge bzw. Fahrtzeit) von einer Stadt A zu einer Stadt B Algorithmus kürzeste Wege in Graphen Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

5 Problemstellung Netzplanung Zwischen n Orten soll ein Versorgungsnetz (Kommunikation, Strom, Wasser, etc.) aufgebaut werden, so dass je Orte direkt oder indirekt miteinander verbunden sind. Die Verbindungskosten zwischen Orte seien bekannt. Gesucht ist ein Versorgungsnetz mit den geringsten Kosten Orte mit Verbindungskosten Günstigstes Versorgungsnetz Algorithmus minimal aufspannende Bäume Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-5

6 Zyklenfreiheit bei gerichteten Graphen () Beispiel: Ausschnitt aus Vererbungsgraph für stream-klassen in C++ ios istream ostream iostream fstream strstream Beispiel: include-graph in C mod.h Dictionary.h set.h string.h Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-6

7 Zyklenfreiheit bei gerichteten Graphen () Beispiel: Montageanleitung für Schrank Füße an Boden montieren Linke Seitenwand montieren Rechte Seitenwand montieren Decke montieren Scharniere an Türen montieren Linke Türe an linke Seitenwand montieren Rechte Türe an rechte Seitenwand montieren Algorithmus topologische Sortierung Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-7

8 Internet-Suchmaschinen () Web-Seiten mit ihren Verweisen A C B D Problemstellung: Indexierung Besuche alle Internetseiten, extrahiere Schlüsselwörter und speichere diese in einen Index. Algorithmus Tiefensuche Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-8

9 Internet-Suchmaschinen () Problemstellung: Relevanz von Internetseiten Bei Eingabe eines Suchbegriffs durchsuchen die Suchmaschinen ihren Index. Die gefundenen Internetseiten werden üblicherweise nach Relevanz sortiert ausgegeben. Problem: Stelle die Relevanz von Internetseiten fest. PageRank-Algorithmus von Page und Prin (s. [Turau]) ) Berechne für jede Internetseite w den PageRank r(w) nach folgender Formel: r w = α + α * r(v) l(v) :; < l(v) = Anzahl der ausgehenden Links von v a Î [0,] ist Dämpfungsfaktor v w v n ) Wiederhole Schritt ) solange, bis r(w) für alle Seiten hinreichend konvergiert. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-9

10 Internet-Suchmaschinen () Beispiel: Für das Beispiel-Netz ergeben sich mit a = 0.5 folgende Gleichungen: r(a) = *r(B) r(b) = *r(A)/ r(c) = *(r(A)/ + r(d)) r(d) = *r(C) Beginnt man mit den Initialisierungswerten r(w) = und wendet man die Gleichungen iterativ an, ergeben sich bereits nach Iterationen stabile Werte: A B C D Iterationen r(a) r(b) r(c) r(d) Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-0

11 Teil III: Graphenalgorithmen Anwendungen Definitionen Datenstrukturen für Graphen Elementare Algorithmen Topologisches Sortieren Kürzeste Wege Minimal aufspannende Bäume Flüsse in Netzwerken Zusammenhangskomponenten Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

12 Gerichteter Graph Ein gerichteter Graph G = (V, E) besteht aus einer Menge V von Knoten (engl. vertices) und einer Menge E V V von Kanten (engl. edges). Eine Kante ist ein geordnetes Paar von Knoten (v,w). Die Kanten sind gerichtet: die Kante (v,w) geht von Knoten v nach Knoten w. In den graphischen Darstellungen werden Pfeile verwendet. Kanten der Form (v,v) heißen Schlingen. Gerichtete Graphen werden auch Digraphen genannt. v Knoten v v Kante v v 5 V = { v, v, v, v, v 5 E = { (v,v ), (v,v ), (v,v ), (v,v ), (v,v ), (v 5,v ) Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

13 Ungerichteter Graph Bei einem ungerichteter Graph G = (V, E) haben die Kanten keine Richtung. Eine Kante ist gegeben durch ein ungeordnetes Paar von Knoten (v,w). Es gilt (v,w) = (w,v). Ein ungeordnetes Paar von Knoten (v,w) ist dasselbe wie die -elementige Menge von Knoten {v, w. Es muss v w sein (keine Schlingen!). Die Darstellung soll jedoch einfach bleiben. Daher werden wir sowohl für gerichtete als auch ungerichtete Kanten dieselbe Notation (v,w) verwenden. v Knoten v v Kante v v 5 V = { v, v, v, v, v 5 E = { (v,v ), (v,v ), (v,v ), (v,v ), (v,v ), (v 5,v ) Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

14 Adjazenz und Grad Ein Knoten w ist adjazent zu (benachbart zu) einem Knoten v, falls (v,w) eine Kante des (gerichteten bzw. ungerichteten) Graphen ist. v v w w Bei einem ungerichteten Graphen ist die Adjazenzbeziehung immer symmetrisch. Bei einem gerichteten Grahen ist die Adjazenzbeziehung im allg. unsymmetrisch. Bei einer gerichteten Kante (v,w) wird w auch Nachfolger von v und v Vorgänger von w genannt. Bei einer ungerichteten Kante (v,w) heißen v und w auch Nachbarn. In einem ungerichteten Graphen ist der Grad eines Knoten die Anzahl seiner Nachbarn. Bei einem gerichteten Graphen wird die Anzahl der Vorgänger Eingangsgrad und die Anzahl der Nachfolger Ausgangsgrad genannt. v v - Der Knoten v hat 5 adjazente Knoten. - Der Grad von v ist damit 5. - Der Knoten v hat Vorgänger und Nachfolger. - Der Eingangsgrad von v ist damit und der Ausgangsgrad ist. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

15 Weg Ein Weg (engl. path) ist eine Folge von Knoten v, v,, v n, wobei n und (v i, v i+ ) für i < n Kanten im Graphen sind. Die Länge des Weges v, v,, v n ist gleich der Anzahl der Kanten und damit n-. n darf sein; dann hat der Weg die Länge 0. Ein Weg heißt einfacher Weg, falls alle Knoten bis auf Anfangs- und Endknoten unterschiedlich sind. v v v v v v v v 5 Ein einfacher Weg der Länge : v, v, v, v. v v 5 Ein (nicht einfacher) Weg der Länge 5: v, v, v 5, v, v, v Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-5

16 Zyklus Ein Weg v, v,, v n in einem gerichteten Graph heisst Zyklus (cycle), falls Anfangsknoten v und Endknoten v n identisch sind und n ist (d.h. wenigstens eine Kante). Ein Weg v, v,, v n in einem ungerichteten Graph heisst Zyklus (cycle), falls Anfangsknoten v und Endknoten v n identisch sind, n ist (d.h. wenigstens drei Kanten) und alle Kanten unterschiedlich sind. Zyklen sind einfach, wenn der Weg einfach ist. Zwei Zyklen sind gleich, falls sich ihre Wege (jeweils ohne Endknoten) durch eine zyklische Verschiebung unterscheiden. Zyklenfreie Graphen werden auch azyklisch (acyclic graph) genannt. v v v v v v v v v Ein einfacher Zyklus (in einem gerichteten Graph) der Länge : v, v, v v v 5 Ein einfacher Zyklus der Länge : v, v, v, v v v 5 Ein nicht-einfacher Zyklus der Länge 6: v, v, v, v, v 5, v, v Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-6

17 Teilgraph Ein Graph G' = (V', E') ist ein Teilgraph von Graph G = (V, E), falls V' Í V und E' Í E Enthält darüber hinaus G' alle Kanten aus E, die Knoten aus V' verbinden, dann heißt G' der durch V' induzierte Teilgraph von G, d.h. E' = {(u,v) Î E / u,v Î V' v 5 v v v v v v v v Graph G v v Teilgraph von G v v Der durch V = {v, v, v, v induzierte Teilgraph von G Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-7

18 Zusammenhang Ein ungerichteter Graph heißt zusammenhängend (connected), falls es von jedem Knoten einen Weg zu jeden anderen Knoten gibt. Eine Zusammenhangskomponente eines ungerichteten Graphen G ist ein maximal zusammenhängender Teilgraph. v Graph G = (E,V) ist zusammenhängend. Der durch V \ {v induzierte Teilgraph (d.h. G ohne Knoten v und ohne Kanten mit v als Endknoten) besteht aus genau zwei Zusammenhangskomponenten. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-8

19 Strenger und schwacher Zusammenhang Ein gerichteter Graph heißt streng zusammenhängend (strongly connected), falls es von jedem Knoten einen Weg zu jedem anderen Knoten gibt. Wenn bei einem gerichteter Graph G der entsprechende ungerichtete Graph zusammenhängend ist, dann wird G auch schwach zusammenhängend genannt. (weakly connected). Gerichteter Graph, der schwach aber nicht stark zusammenhängend ist. Strenge und schwache Zusammenhangskomponenten werden analog zu Zusammenhangskomponenten bei ungerichteten Graphen definiert. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-9

20 Wald und Baum Ein ungerichteter und azyklischer Graph heißt auch Wald. Ein zusammenhängender Wald heißt auch Baum. Wald Baum Ein Wurzelbaum ist ein gerichteter, azyklischer Graph, bei dem genau ein Knoten die sogenannte Wurzel den Eingangsgrad 0 hat und alle anderen Knoten den Eingangsgrad haben. Bei einer Kante (v,w) heisst v auch Elternknoten von w und w Kindknoten von v. Knoten ohne Kinder heißen auch Blätter. In der graphischen Darstellung zeigen die Kanten üblicherweise nach unten. Die im Kap. eingeführten Suchbäume sind Wurzelbäume. Wurzel w v Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-0

21 Gewichteter Graph Ist jeder Kante (v,w) eine reelle Zahl c(v,w) als Kosten oder Gewicht zugeordnet, spricht man von einem gewichteten Graphen. Sind darüber hinaus die Gewichte ³ 0, dann heißt der Graph auch Distanzgraph Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

22 Teil III: Graphenalgorithmen Anwendungen Definitionen Datenstrukturen für Graphen - Adjazenzmatrix - Adjazenzliste - Kantenliste - Implementierungshinweise für Java Elementare Algorithmen Topologisches Sortieren Kürzeste Wege Minimal aufspannende Bäume Flüsse in Netzwerken Zusammenhangskomponenten Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

23 Adjazenzmatrix für ungewichtete Graphen A[i][j] =, falls es eine Kante von v i und nach v j gibt 0 sonst v v v v v 0 v 0 v v v v [0] [] [] [] [] [0] [] [] [] [] [0] [] [] [] [] [0] [] [] [] [] Beachte: Die Adjazenzmatrizen sind bei einem ungerichteten Graphen symmetrisch und bei einem gerichteten Graphen im allgemeinen unsymmetrisch. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

24 Adjazenzmatrix für gewichtete Graphen A[i][j] = c(v,w), falls es eine Kante von Knoten v nach w gibt sonst v 7 v v 7 v v 0 6 v 0 6 v - v v - v [0] [] [] [] [] [0] [] [] [] [] [0] [] [] [] [] [0] [] [] [] [] Beachte: Die Adjazenzmatrizen sind bei einem ungerichteten Graphen symmetrisch und bei einem gerichteten Graphen im allgemeinen unsymmetrisch. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

25 Adjazenzliste bei einem ungerichteten Graphen wird für jeden Knoten eine linear verkettete Liste mit allen Nachbarknoten (Adjazenzliste) abgespeichert. ungerichtete Kanten werden bei beiden Endknoten eingetragen. v v [0] v 0 [] [] 0 [] v v [] 0 Bei einem gerichteten Graphen werden zwei getrennte Listen verwaltet: eine Vorgänger-Liste und eine Nachfolger-Liste. Bei einem gewichteten Graphen wird noch zusätzlich das Kantengewicht eingetragen. Um die Dynamisierbarkeit der Datenstruktur zu verbessern, kann statt eines Feldes auch eine dynamische Datenstruktur wie ein binärer Suchbaum verwendet werden. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-5

26 Kantenliste Speichere die Menge aller Kanten in einer sortierten Suchstruktur (sortiertes Feld oder Suchbaum). Als Ordnungsrelation auf Kanten ist eine lexikographische Ordnung naheliegend: (v, v') (w, w') falls v < w oder v = w und v' w' Beispiel: sortiertes Kanten-Feld v v v 0 i j [0] [] [] [] v v Alle Nachbarknoten zu v sind effizient auffindbar. Bei einem ungerichten Graphen wird für eine Kante von v nach w sowohl (v,w) als auch (w,v) gespeichert. Bei einem gerichteten Graphen wird die Kantenliste in Vorgänger- und Nachfolger-Liste aufgeteilt. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-6

27 Dünn- und dichtbesetzte Graphen Falls E = O( V ) (dünnbesetzter Graph; sparse graph), dann ist die Speicherung als Adjazenzliste oder Kantenliste Speicherplatz sparender und effizienter in der Laufzeit. Falls E = O( V ) (dichtbesetzter Graph; dense graph), dann ist die Speicherung als Adjazenzmatrix Speicherplatz sparender und effizienter in der Laufzeit. Vollständiger Graph (alle Knotenpaare sind durch eine Kante verbunden) ist dichtbesetzt. Es gilt: E = V *( V -)/ = O( V ). Manhattan-Graph (Graph für Mahattan mit Kreuzungen als Knoten und Strassen als Kanten) ist dünnbesetzt. Es gilt: E * V = O( V ). Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-7

28 Implementierungshinweise: Adjazenzmatrizen Knoten sind durchnummeriert: 0,,,..., n- Nehme Knotennummer als Index eines zweidimensionalen Felds Beispiel: ungerichteter und gewichteter Graph int n = 0; // Anzahl der Knoten double [ ][ ] adjcencymatrix = new double[n][n]; adjcencymatrix[][] =.5; // Kante von nach mit Gewicht.5 eintragen adjcencymatrix[][] =.5; // Kante von nach mit Gewicht.5 eintragen Bei ungewichteten Graphen sind Gewichte 0 oder. Bei gerichteten Graphen ist Matrix i.a. nicht symmetrisch. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-8

29 Implementierungshinweise: Feld von Adjazenzlisten Knoten sind durchnummeriert: 0,,,..., n-. Beispiel: ungerichter Graph: int n = 0; // Anzahl der Knoten List<List<Integer>> adjacencylist = new ArrayList<>(n); for (int i = 0; i < n; i++) adjacencylist.add( new LinkedList<>() ); adjacencylist.get().add(); // Kante von nach eintragen adjacencylist.get().add(); // Kante von nach eintragen adjacencylist[0] [] []... [8] [9] Gewichte können bei den Knoten abgespeichert werden. Bei gerichteten Graphen werden Nachfolger und Vorgänger in separate Listen gehalten. Statt die adjazenten Knoten in Listen zu speichern, ließen sich sich auch Sets (bei ungewichteten Graphen) oder Maps (bei gewichteten Graphen) einsetzen. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-9

30 Implementierungshinweise: interne Nummerierung für Graphknoten In der Praxis kommt es häufig vor, dass die Graph-Knoten nicht von 0 bis n- nummeriert sind, sondern beispielsweise als Strings gegeben sind. Stuttgart 90 km Ulm 50km München Die Schlüssel können dann mit Hilfe einer Map (TreeMap oder HashMap) in eine interne Nummerierung von 0 bis n- umgerechnet werden: - Stuttgart à 0 - Ulm à - München à Die inverse Umrechnung von interner Nummerierung in den Schlüssel lässt sich mit einem einfachen Feld realisieren: - Stuttgart ß 0 - Ulm ß - München ß Mittels der internen Nummerierung lässt sich dann eines der indizierten Zugriffsverfahren von der vorhergehenden Seite verwenden. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-0

31 Implementierungshinweise: Graph als Map () Eine Map ordnet jedem Knoten eine Adjazenzliste zu. Die Adjazenzlisten sind ebenfalls Maps und ordnen jedem adjazenten Knoten ein Gewicht zu (bei ungewichteten Graphen könnten dagegen einfachheitshalber Sets verwendet werden). Knoten können vom Typ Integer (Knoten sind nummeriert) oder von einem anderen Typ sein (z.b. String). Maps können entweder HashMaps oder TreeMaps sein (siehe Beispiel nächste Seite). Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

32 Beispiel: ungerichteter und gewichteter Graph als Map int n = 7; // Anzahl Knoten Map< Integer, Map<Integer, Double> > adjacencylist = new TreeMap<>(); for (int i = 0; i < n; i++) adjacencylist.put(i, new TreeMap<>()); adjacencylist.get().put(,.); // Kante von nach mit Gewicht. eintragen adjacencylist.get().put(,.); adjacencylist.get().put(6,.5); // Kante von nach 6 mit Gewicht.5 eintragen adjacencylist.get(6).put(,.5); adjacencylist.get().put(, 0.5); // Kante von nach mit Gewicht 0.5 eintragen adjacencylist.get().put(, 0.5); Graph als TreeMap Mit Knoten als Schlüssel und Adjazenzliste als Nutzdaten Die Adjazenzlisten sind ebenfalls TreeMaps. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

33 Darstellung der Algorithmen in Pseudo-Code () Um einfach und von der konkreten Datenstruktur für Graphen unabhängig zu bleiben, wird bei der Formulierung der Algorithmen folgender Pseudo- Code benutzt: Ungerichtete und gerichtete Graphen: for ( jeden adjazenten Knoten w von v ) { for ( jeden Knoten v ) { for ( jede Kante (v,w) ) { Ungerichtete Graphen: for ( jeden Nachbarn w von v ) { Gerichtete Graphen: for ( jeden Nachfolger w von v ) { for ( jeden Vorgänger w von v ) { Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

34 Darstellung der Algorithmen in Pseudo-Code () Die hier in Pseudo-Code dargestellten Schleifen lassen sich in Java mit den besprochenen Datenstrukturen (Adjazenzmatrix, Adjazenzliste und Kantenliste) einfach realisieren. Pseudo-Code: for ( jeden Knoten v ) { Java: // Map-basierte Adjazenzliste für ungewichteten Graphen: Map<Vertex, Set<Vertex>> adjacencylist = new TreeMap<>(); for (Vertex v : adjacencylist.keyset() ) {... for ( jeden Nachfolger w von v ) { // adjacencylist wie oben definiert for (Vertex w : adjacencylist.get(v) ) {... Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

35 Darstellung der Algorithmen in Pseudo-Code () Bei der Formulierung der Algorithmen sollen auch die Datenstrukturen möglichst einfach gehalten werden. Oft muss für jeden Knoten eine Information gespeichert werden. Im Pseudo-Code werden einfachheitshalber Felder und Indizierung gewählt. Sind die Knoten durchnummeriert, dann kann der Pseudo-Code direkt in Java übernommen werden. Bei einem beliebigen Knotentyp kann eine Map gewählt werden. Pseudo-Code: int[ ] indegree;... for ( jeden Knoten v ) { indegree[v] = Anzahl der Vorgänger; if (indegree[v] == 0)... for ( jeden Nachfolger w von v ) { if (--indegree[w] == 0)... Java: Map<Vertex, Integer> indegree = new...;... for ( jeden Knoten v ) { indegree.put(v, Anzahl der Vorgänger); if (indegree.get(v) == 0)... for ( jeden Nachfolger w von v ) { indegree.put(w, indegree.get(w)-); if (indegree.get(w) == 0)... Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-5

36 Teil III: Graphenalgorithmen Anwendungen Definitionen Datenstrukturen für Graphen Elementare Algorithmen - Tiefensuche - Breitensuche Topologisches Sortieren Kürzeste Wege Minimal aufspannende Bäume Flüsse in Netzwerken Zusammenhangskomponenten Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-6

37 Rekursive Tiefensuche (depth-first search) void visitdf(vertex v, Graph g) { Set<Vertex> besucht = { ; visitdf(v, g, besucht); void visitdf(vertex v, Graph g, Set<Vertex> besucht) { besucht.add(v); // Bearbeite v: println(v); visitdf(v,g) startet von Knoten v eine Tiefensuche im Graph g. besucht ist die Menge aller bereits besuchten Knoten. Wichtig zur Vermeidung von Endlosschleifen. visitdf(v, g, besucht) besucht Knoten v im Graphen g und ist rekursiv. for ( jeden adjazenten Knoten w von v ) if (! besucht.contains(w) ) // w noch nicht besucht visitdf(w, g, besucht); Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-7

38 Beispiel für rekursive Tiefensuche Tiefensuche mit Start bei Knoten Aufrufstruktur Besuchsreihenfolge:, 0,,,, die Nachbarn eines Knoten werden in lexikographischer Reihenfolge durchlaufen. Bereits besuchte Nachbarknoten sind durch eine gestrichelte Kante verbunden und gehören nicht zur Aufrufstruktur. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-8

39 Tiefensuchbaum Die Aufrufstruktur bildet mit den besuchten Knoten den sogenannten Tiefensuchbaum. Aufrufstruktur Tiefensuchbaum Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-9

40 Iterative Tiefensuche mit einem Keller void visitdf(vertex v, Graph g) { Set<Vertex> besucht = { ; visitdf(v, g, besucht); void visitdf(vertex v, Graph g, Set<Vertex> besucht) { Stack<Vertex> stk; stk.push(v); while(! stk.empty() ) { v = stk.pop(); if ( besucht.contains(v) ) continue; besucht.add(v); // Bearbeite v: println(v); for ( jeden adjazenten Knoten w von v ) if (! besucht.contains(w) ) stk.push(w); visitdf startet von Knoten v eine Tiefensuche. visitdf besucht Knoten v im Graphen g, wobei die bereits besuchten Knoten in besucht abgespeichert werden. Im Keller stk werden alle Knoten verwaltet, die als nächstes zu besuchen sind. Die Tiefensuche wird erreicht durch die LIFO- Organisation des Kellers. Um die gleiche Besuchsreihenfolge wie bei der rekursiven Funktion zu erreichen, müssen in der for- Schleife die Nachbarn in umgekehrter Reihenfolge bearbeitet werden. Beachte: Gleiche Knoten können mehrfach eingekellert werden. Das ließe sich durch eine weitere Knotenmarkierung verhindern: - nicht besucht, - nicht besucht und im Keller, - besucht. Allerdings würde sich eine andere Besuchsreihenfolge wie bei der rekursiven Funktion ergeben. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-0

41 Breitensuche - Beispiel ) Beginne mit Knoten. 5 ) Besuche alle Knoten, die über genau eine Kante von Knoten erreichbar sind. 0 Besuchsreihenfolge:, 0,,,, 5 5 ) Besuche alle Knoten, die über genau Kanten von Knoten erreichbar sind. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

42 Breitensuche (breadth-first search) mit einer Schlange void visitbf(vertex v, Graph g) { Set<Vertex> besucht = { ; visitbf(v, g, besucht); void visitbf(vertex v, Graph g, Set<Vertex> besucht) { Queue<Vertex> q; q.add(v); while(! q.empty() ) { v = q.remove(); if ( besucht.contains(v)) continue; visitbf startet von Knoten v eine Breitensuche im Graphen g. visitbf besucht Knoten v im Graphen g, wobei die bereits besuchten Knoten im Feld besucht abgespeichert werden. In der Schlange q werden alle Knoten verwaltet, die als nächstes zu besuchen sind. Die Breitensuche wird erreicht durch die FIFO- Organisation der Schlange besucht.add(v); // Bearbeite v: println(v); for ( jeden adjazenten Knoten w von v ) if (! besucht.contains(w) ) q.add(w); Beachte: Gleiche Knoten können mehrfach in die Schlange eingereiht werden. Das ließe sich durch eine weitere Knotenmarkierung verhindern: - nicht besucht, - nicht besucht und in der Schlange, - besucht. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

43 Tiefen- bzw. Breitensuche bei mehreren Zusammenhangskomponenten Hat ein Graph mehrere (strenge) Zusammenhangskomponenten, dann ist es nicht garantiert, dass es von jedem Knoten v einen Weg zu jedem anderen Knoten w gibt. Sollen alle Knoten besucht werden, dann muss visitdf (Tiefensuche) bzw. visitbf (Breitensuche) mehrere Male mit allen noch nicht besuchten Knoten als Startknoten aufgerufen werden. void visitallnodes() { Set<Vertex> besucht = { ; for (jeden Knoten v) if (! besucht.contains(v) ) visit(v, g, besucht); visit kann visitdf oder visitbf sein. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

44 Tiefensuchwald bei Tiefensuche mit mehreren Zusammenhangskomponenten Bei der Tiefensuche in einem Graphen mit mehreren Zusammenhangskomponenten entsteht dann der sogenannte Tiefensuchwald. void visitdfallnodes() { Set<Vertex> besucht; Gerichteter Graph (mit mehreren strengen Zusammenhangskomponenten): for (jeden Knoten v) if (! besucht.contains(v)) visitdf(v, g, besucht); 5 6 Tiefensuchwald (Knoten werden nach ihrer Nummerierung aufsteigend besucht): 6 5 Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08 -

45 Analyse Hier: Analyse der Tiefensuche über den kompletten Graphen. Bei der Breitensuche ergibt sich dieselbe Komplexität. Jeder Knoten wird genau -mal besucht. Jede Kante wird genau -mal bei ungerichteten Graphen bzw. genau -mal bei gerichteten Graphen in einer der for-schleifen besucht. Wird die Menge besucht als boolsches Feld implementiert und werden Adjazenzlisten verwendet, ist der Aufwand für den Durchlauf aller for- Schleifen höchtens O( E ). Damit ergibt sich insgesamt: T = O( V + E ) void visitdfallnodes() { Set<Vertex> besucht = { ; for (jeden Knoten v) if (! besucht.contains(v) ) visitdf(v, g, besucht); void visitdf(vertex v, Graph g, Set<Vertex> besucht) { besucht.add(v); // Bearbeite v: println(v); for ( jeden adjazenten Knoten w von v ) if (! besucht.contains(w) ) visitdf(w, g, besucht); Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-5

46 Teil III: Graphenalgorithmen Anwendungen Definitionen Datenstrukturen für Graphen Elementare Algorithmen Topologisches Sortieren Kürzeste Wege Minimal aufspannende Bäume Flüsse in Netzwerken Zusammenhangskomponenten Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-6

47 Definition topologische Sortierung Eine Folge v 0, v, v,, v n- aller Knoten eines gerichteten Graphen G heißt topologische Sortierung, falls für alle Knoten u, v folgende Bedingung gilt: falls (u,v) eine Kante in G ist, dann steht u vor v in der Folge v 0, v, v,, v n-. Beispiel: topologisch sortiert: Anschaulich: Unter Einhaltung der Adjazenzbeziehung lässt sich der Graph so auf eine Linie verbiegen, dass die Pfeile nur nach rechts gehen. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-7

48 Eigenschaften und Anwendungen Eigenschaften: Falls der Graph einen Zyklus enthält, dann existiert keine topologische Sortierung. Falls ein Graph topologisch sortiert werden kann, dann ist im allgemeinen die topologische Sortierung nicht eindeutig. Beispiele für Anwendungen: Stelle fest, ob es eine Durchführungsreihenfolge für die Aktivitäten oder auch Prozesse in einem Vorranggraphen gibt. Prüfe, ob Vererbungsgraph oder include-graph zyklenfrei ist. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-8

49 Algorithmus für topologische Sortierung topsort liefert zu einem gerichteten List<Vertex> topsort(digraph g) { Graphen g eine topologische Sortierung. List<Vertex> ts; // topologisch sortierte Folge int[ ] indegree; // Anz. noch nicht besuchter Vorgänger Queue<Vertex> q; Idee: for (jeden Knoten v) { indegree[v] = Anzahl der Vorgänger; if (indegree[v] == 0) q.add(v); while (! q.empty() ) { v = q.remove(); ts.add(v); for ( jeden Nachfolger w von v ) if (--indegree[w] == 0) q.add(w); if (ts.size()!= Anzahl Knoten in g) return null; // Graph zyklisch; else return ts; Speichere für jeden Knoten v: indegree[v] = Anzahl der noch nicht besuchten Vorgänger. Speichere alle noch nicht besuchten Knoten v, für die InDegree[v] == 0 gilt, in einer Schlange q. q enthält also alle Knoten, die als nächstes besucht werden dürfen. Besuche als nächstes den vordersten Knoten in der Schlange q und entferne ihn aus q Topologische sortierte Folge wird in Liste ts abgespeichert. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-9

50 Analyse Für jeden Knoten w kann indegree[w] höchstens einmal gleich 0 werden. Damit kommen in die Queue q höchstens V Knoten. Die while-schleife läuft damit höchstens V -mal. Jede Kante wird höchstens einmal in einer der for-schleifen besucht. Verwendet man die Adjazenzlistendarstellung, ist damit der Aufwand für den Durchlauf aller for-schleifen höchtens O( E ). Damit ergibt sich mit Adjazenzlistendarstellung insgesamt: T = O( V + E ) List<Vertex> topsort(digraph g) { List<Vertex> ts; // topologisch sortierte Folge int[ ] indegree; // Anz. noch nicht besuchter Vorgänger Queue<Vertex> q; for (jeden Knoten v) { indegree[v] = Anzahl der Vorgänger; if (indegree[v] == 0) q.add(v); while (! q.empty() ) { v = q.remove(); ts.add(v); for ( jeden Nachfolger w von v ) if (--indegree[w] == 0) q.add(w); if (ts.size()!= Anzahl Knoten in g) return null; // Graph zyklisch; else return ts; Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-50

51 Teil III: Graphenalgorithmen Anwendungen Definitionen Datenstrukturen für Graphen Elementare Algorithmen Topologisches Sortieren Kürzeste Wege - Problemstellung - Ungewichtete Graphen und erweiterte Breitensuche - Distanzgraphen und Dijkstra-Algorithmus - Gewichtete Digraphen und Moore-Ford-Algorithmus - Netzpläne und erweiterte topologische Sortierung - Alle kürzeste Wege in gewichteten Digraphen mit Floyd-Algorithmus Minimal aufspannende Bäume Flüsse in Netzwerken Zusammenhangskomponenten Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-5

52 Problemstellung kürzeste Wege () Im allgemeinen gibt es zwischen zwei Knoten u und v mehrere Wege. Ein Weg von u nach v heißt kürzester Weg, falls der Weg minimale Länge hat. Weglänge bei gewichtetem Graph ist Summe der Kantengewichte. Weglänge bei ungewichtetem Graph ist Anzahl der Kanten. Die Distanz d(u,v) zwischen u und v wird als die Länge eines kürzesten Weges definiert. Falls es keinen Weg von u nach v gibt, ist d(u,v) = Weg von nach 7 mit Länge 5. Kürzester Weg von nach 7 mit Länge. 0 Damit ist Distanz d(,7) =. 5 Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-5

53 Problemstellung kürzeste Wege () Länge eines Weges muss nicht die wörtliche Bedeutung haben. Die Gewichte (Kosten) der Kanten und damit die Weglängen können in Abhängigkeit von der Anwendung ganz unterschiedliche Bedeutungen haben. Beispiele: - Streckenlänge - Zeitspannen - Kosten - Profit: Gewinn/Verlust (Gewichte können positiv und negativ sein) - Wahrscheinlichkeiten Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-5

54 Verschiedene Problemvarianten () Single pair shortest path: Kürzeste Wege zwischen zwei Knoten: () Single-source shortest-path problem: Kürzeste Wege zwischen einem Knoten und allen anderen Knoten () All pairs shortest path: Kürzeste Wege zwischen allen Knotenpaaren. Für Problem () kennt man keine bessere Lösung, als einen Algorithmus für Lösung () zu nehmen, der abgebrochen wird, sobald der Zielknoten erreicht wird. Problem () kann auf Problem () zurückgeführt werden. Bei dicht besetzten Graphen (d.h. viele Kanten) gibt es jedoch eine effizientere Lösung, die zudem auch negative Kantengewichte zulässt. Problemstellungen lassen sich für verschiedene Graphtypen (gerichtet oder ungerichtet, gewichtet oder ungewichtet) algorithmisch unterschiedlich lösen. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-5

55 Verschiedene Algorithmen A B C D E Problemvariante Single-source shortest-path für ungewichtete Graphen Single-source shortest-path für Distanz-Graphen (nur positive Gewichte) Single-source shortest-path für gewichtete Digraphen (auch negative Gewichten) Single-source shortest-path für gewichtete, azyklische Digraphen mit einem Start- und einem Endknoten (Netzpläne) All pairs shortest path für gewichtete Digraphen (auch negative Gewichte) Algorithmus Erweiterte Breitensuche Algorithmus von Dijkstra; A*-Verfahren Algorithmus von Moore und Ford Erweiterte topologische Sortierung Algorithmus von Floyd A ist ein Spezialfall von B. Wendet man den Dijkstra-Algorithmus auf Graphen mit Kantengewichten an, ergibt sich eine Breitensuche. D ist ein Spezialfall von C. Der auf Variante D zugeschnittene Algorithmus ist jedoch wesentlich effizienter als der Algorithmus für Variante C. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-55

56 Teil III: Graphenalgorithmen Anwendungen Definitionen Datenstrukturen für Graphen Elementare Algorithmen Topologisches Sortieren Kürzeste Wege - Problemstellung - Ungewichtete Graphen und erweiterte Breitensuche - Distanzgraphen und Dijkstra-Algorithmus - Gewichtete Digraphen und Moore-Ford-Algorithmus - Netzpläne und erweiterte topologische Sortierung - Alle kürzeste Wege in gewichteten Digraphen mit Floyd-Algorithmus Minimal aufspannende Bäume Flüsse in Netzwerken Zusammenhangskomponenten Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-56

57 Erweiterte Breitensuche Single-source shortest-path: Gesucht sind alle kürzesten Wege von einem Startknoten s zu allen anderen Knoten. Beginne bei s und durchlaufe Graph mit Breitensuche. Speichere für jeden besuchten Knoten v die Distanz d[v] zu Startknoten s. Speichere Vorgängerknoten p[v] im kürzesten Weg nach v. p stellt ein Baum mit Wurzel s dar. Der kürzeste Weg von s nach v ergibt sich in umgekehrter Reihenfolge: v, p[v], p[p[v]],, p[ p[p[v]] ] = s Beispiel: Startknoten s = v d[v] p[v] () () () 0 7 v d[v] 0 p[v] v d[v] 0 p[v] - 5 () () () Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-57

58 Algorithmus für erweiterte Breitensuche Eingabe: Startknoten s und ungewichteter Graph G Ausgabe: Distanzfeld d und Vorgängerfeld p void shortestpath (Vertex s, Graph G, int[ ] d, Vertex[ ] p) { for ( jeden Knoten v ) { d[v] = ; p[v] = undef; d[s] = 0; // Distanz für Startknoten v d[v] 0 p[v] Queue<Vertex> q; q.add(s); while (! q.empty() ) { v = q.remove(); for ( jeden adjazenten Knoten w von v ) { if (d[w] == ) { // w noch nicht registriert d[w] = d[v] + ; p[w] = v; q.add(w); v d[v] 0 p[v] v d[v] 0 7 p[v] - 5 Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-58

59 Analyse der Breitensuche Für jeden Knoten w kann d[w] höchstens einmal von auf einen endlichen Wert gesetzt werden. Damit kommen in die Queue q höchstens V Knoten. Die while-schleife läuft damit höchstens V -mal. Jede Kantenrichtung wird höchstens einmal in einer der for-schleifen besucht. Verwendet man die Adjazenzlistendarstellung, ist damit der Aufwand für den Durchlauf aller for-schleifen gleich O( E ). Damit ergibt sich mit Adjazenzlistendarstellung insgesamt: T = O( V + E ) Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-59

60 Teil III: Graphenalgorithmen Anwendungen Definitionen Datenstrukturen für Graphen Elementare Algorithmen Topologisches Sortieren Kürzeste Wege - Problemstellung - Ungewichtete Graphen und erweiterte Breitensuche - Distanzgraphen und Dijkstra-Algorithmus - Gewichtete Digraphen und Moore-Ford-Algorithmus - Netzpläne und erweiterte topologische Sortierung - Alle kürzeste Wege in gewichteten Digraphen mit Floyd-Algorithmus Minimal aufspannende Bäume Flüsse in Netzwerken Zusammenhangskomponenten Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-60

61 Algorithmus von Dijkstra Idee () Single-source shortest-path: Gesucht sind alle kürzesten Wege von einem Startknoten s zu allen anderen Knoten im einem Distanz-Graphen (Gewichte müssen 0 sein). Ähnlich wie bei der Breitensuche werden alle Knoten, die als nächstes besucht werden können, in einer Liste K (Kandidatenliste) gehalten. Aus der Kandidatenliste wird immer der Knoten mit der kleinsten Distanz als nächster besucht v d[v] 0 6 p[v] Kandidatenliste Bereits besucht Als nächstes wird Knoten mit Distanzwert besucht. d[v] Distanz zwischen v und Startknoten s = 0 p[v] Vorgängerknoten im kürzesten Weg nach v Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-6

62 Algorithmus von Dijkstra Idee () Wird ein neuer Knoten v besucht, dann kommen eventuell neue Nachbarknoten zur Kandidatenliste. Bei allen Nachbarknoten wird geprüft, ob ein Weg über v einen kürzeren Weg ergibt d() = Knoten wird besucht Knoten wird besucht v d[v] 0 6 p[v] v d[v] p[v] Knoten 5 ist zur Kandidatenliste neu dazu gekommen. Der Distanzwert von Knoten hat sich von 6 auf 5 verbessert, da der Weg über Knoten kürzer ist als der bisherige. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-6

63 Algorithmus von Dijkstra void shortestpath (Vertex s, DistanzGraph G, double[ ] d, Vertex[ ] p ) { kl = { ; // leere Kandidatenliste for (jeden Knoten v) { d[v] = ; p[v] = undef; d[s] = 0; // Startknoten () kl.insert(s); while (! kl.empty() ) { () lösche Knoten v aus kl mit d[v] minimal; for ( jeden adjazenten Knoten w von v ) { if (d[w] == ) // w noch nicht besucht und nicht in Kandidatenliste () kl.insert(w); if (d[v] + c(v,w) < d[w]) { p[w] = v; () d[w] = d[v] + c(v,w); Eingabe: Startknoten s und Distanzgraph G Ausgabe: Distanzfeld d und Vorgängerfeld p In der Kandidatenliste sind alle Knoten abgespeichert, die als nächstes besucht werden können. Die Zugriffsoperationen auf die Kandidatenliste sind rot gekennzeichnet. Mögliche Implementierungen werden auf der nächsten Folie diskutiert. Distanzwert für w verbessert sich. Kürzester Weg nach w geht nun über v. Falls in Zeile () w neu in kl eingefügt wurde, wird d[w] von zu einem endlichen Wert verbessert. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-6

64 Eigenschaften Die d-werte der besuchten Knoten in Zeile () sind monoton steigend. Begründung: die d-werte der anderen Kandidaten sind und bleiben d[v]. In Zeile () wird zwar für einen adjazenten Knoten w von v der d-wert verringert. Dennoch gilt d[w] d[v], da die Gewichte der Kanten c(v,w) 0 sind. while (! kl.empty() ) { () lösche Knoten v aus kl mit d[v] minimal; Knoten v wird besucht. for ( jeden adjazenten Knoten w von v ) { if (d[w] == ) // w noch nicht besucht und nicht in Kandidatenliste () kl.insert(w); if (d[v] + c(v,w) < d[w]) { p[w] = v; () d[w] = d[v] + c(v,w); Sobald ein Knoten v besucht wird (Zeile ()), ist sein kürzester Weg bekannt. Wird ein kürzester Weg von einem Startknoten s zu einem bestimmten Zielknoten z gesucht, dann kann das Verfahren abgebrochen werden, sobald v = z besucht wird. Ein Knoten wird höchstens einmal in die Prioritätsliste eingefügt. Daher kl.size() V. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-6

65 Kandidatenliste als Index-Heap Analyse () Speichere Kandidaten in einem Index-Heap (siehe Kap., Prioritätslisten), wobei als Priorität der Distanzwert aus Feld d genommen wird. Ein Index-Heap bietet eine effiziente Realisierung folgender Operationen an: - insert(v, d) in O(log V ): fügt Element v mit Priorität d ein. Aufruf in () und (). - v = delmin() in O(log V ): löscht Element mit kleinster Priorität. Aufruf in (). - change(v, dneu) in O(log V ): ändert den Vorrangwert des Elements v in dneu. Aufruf in (). Analyse des Dijkstra-Algorithmus mit Kandidatenliste als Index-Heap Jede Kantenrichtung wird genau einmal in einer der for-schleifen betrachtet. Da () und () in O(log V ) geht, ist für alle for-schleifen insgesamt O( E log V ) notwendig. Hinzu kommt höchstens V -mal die Ausführung von (), was O( V log V ) bedeutet. Insgesamt: T = O( E log V ) Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-65

66 Analyse () Kandidatenliste als unsortiertes Feld Speichere Kandidaten in einem unsortierten Feld. Damit benötigt die Operation in Zeile () (Minimum bestimmen) O( V ) und die Operationen in (), () und () benötigen O(). Analyse des Dijkstra-Algorithmus mit Kandidatenliste als unsortiertes Feld Die while-schleife wird höchstens V -mal durchgeführt. Für () ist O( V ) notwendig. Jede Kantenrichtung wird genau einmal in einer der for-schleifen betrachtet. Da () und () in O() geht, ist für alle for-schleifen insgesamt O( E ) notwendig. Insgesamt: T = O( V ) Fazit: Ist der Graph dicht besetzt, d.h. E = O( V ), dann ist die Variante mit Kandidatenliste als unsortiertes Feld besser. Ist der Graph dünn besetzt, d.h. E = O( V ), dann ist die Variante mit Kandidatenliste als Prioritätsliste besser. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-66

67 Beispiel zu Dijkstra-Algorithmus () Knoten 0 wird besucht v d[v] 0 p[v] v d[v] 0 6 p[v] Knoten wird besucht Knoten wird besucht v d[v] p[v] Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-67

68 Beispiel zu Dijkstra-Algorithmus () Knoten wird besucht v d[v] p[v] v d[v] p[v] Knoten 6 wird besucht Knoten 7 wird besucht v d[v] p[v] Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-68

69 Beispiel zu Dijkstra-Algorithmus () Kürzeste Wege für Startknoten s = 0 sind nun bekannt für die Zielknoten:,,, 6, 7. Kürzester Weg von 0 nach 7 ist 0,, 6, 7 mit Distanz d =. v d[v] p[v] Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-69

70 A*-Algorithmus: Verbesserung des Dijkstra-Algorithmus Ist der kürzeste Weg zu genau einem Zielknoten z gesucht und lässt sich die Distanz von einem Knoten v zum Zielknoten z durch eine Schätzfunktion h(v,z) abschätzen, dann lässt sich der Algorithmus von Dijkstra optimieren. Statt den Knoten v mit d[v] minimal als nächstes zu besuchen zu besuchen, wird der Knoten v besucht mit d[v] + h(v,z) minimal. Damit werden Knoten v bevorzugt, die näher zum Zielknoten liegen. Sind die Knoten des Graphen Punkte in der Euklidischen Ebene und die Gewichte gleich den Euklidischen Abständen (Luftlinienabstand), dann lässt sich als Schätzfunktion h(v,z) der Euklidische Abstand zwischen v und z wählen. z s h(,z) h(,z) Wird der kürzeste Weg von s nach z gesucht, wird zuerst Knoten besucht, weil dieser näher zu z liegt. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-70

71 A*- Algorithmus boolean shortestpath (Vertex s, Vertex z, DistanzGraph G, double[ ] d, Vertex[ ] p ) { kl = { ; // leere Kandidatenliste for (jeden Knoten v) { d[v] = ; p[v] = undef; d[s] = 0; // Startknoten kl.insert(s); Ausgabe: Distanzfeld d und Vorgängerfeld p Eingabe: Startknoten s, Zielknoten z und Distanzgraph G while (! kl.empty() ) { lösche Knoten v aus kl mit d[v] + h(v,z) minimal; Änderungen gegenüber if (v == z) // Zielknotenz erreicht dem Diskstra-Algorithmus return true; sind blau gekennzeichnet. for ( jeden adjazenten Knoten w von v ) { if (d[w] == ) // w noch nicht besucht und nicht in Kandidatenliste kl.insert(w); if (d[v] + c(v,w) < d[w]) { p[w] = v; d[w] = d[v] + c(v,w); return false; Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-7

72 Korrektheit des A*- Algorithmus Das A*-Verfahren liefert immer einen kürzesten Weg, falls der Zielknoten z erreichbar ist und die Schätzfunktion h folgende Eigenschaften erfüllt: () h ist zulässig: 0 h(u,v) d(u,v) für alle Knoten u, v (h ist positiv und unterschätzt die Distanz d) () h ist monoton: h(u,v) c(u,w) + h(w,v) für alle Knoten u, v, w v h(u,v) h(w,v) u c(u,w) w Die Euklidische Abstandsfunktion erfüllt die beiden oberen Bedingungen. Die Schätzfunktion h(u,v) = 0 erfüllt trivialerweise beide Bedingungen. Man erhält dann genau den Algorithmus von Dijkstra. In der Literatur wird die Schätzfunktion auch Heuristik genannt (Heuristik = Strategie zur Lösungssuche) Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-7

73 Vergleich A*- und Dijkstra-Algorithmus Dijkstra-Algorithmus A*-Algorithmus s 8 z s z 6 Schätzfunktion h und Kantengewicht c sind als Euklidischer Abstand definiert. Im Beispiel wird kürzester Weg von Startknoten s nach Zielknoten z berechnet. Reihenfoge der besuchten Knoten in rot. Berechnete kürzeste Wege sind blau markiert. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-7

74 Schlechtes Verhalten von A* bei Sackgassen A* geht direkt auf das Ziel z zu, läuft aber in eine Sackgasse. s z A* besucht nun einen Weg, der sich anfangs vom Ziel entfernt und daher nicht früher betrachtet wurde. s z Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-7

75 Teil III: Graphenalgorithmen Anwendungen Definitionen Datenstrukturen für Graphen Elementare Algorithmen Topologisches Sortieren Kürzeste Wege - Problemstellung - Ungewichtete Graphen und erweiterte Breitensuche - Distanzgraphen und Dijkstra-Algorithmus - Gewichtete Digraphen und Moore-Ford-Algorithmus - Netzpläne und erweiterte topologische Sortierung - Alle kürzeste Wege in gewichteten Digraphen mit Floyd-Algorithmus Minimal aufspannende Bäume Flüsse in Netzwerken Zusammenhangskomponenten Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-75

76 Graphen mit negativen Gewichten () Hat ein Graph auch negative Gewichte, dann ist die Existenz eines kürzesten Weges nicht gesichert, da Zyklen mit negativer Länge existieren können. Durch mehrfaches Ablaufen solcher Zyklen kann die Weglänge beliebig klein (negativ) werden. u - v Zyklus mit Länge = + + = - Damit kann die Weglänge von u nach v beliebig klein werden. Die Eindeutigkeit kürzester, einfacher Wege ist jedoch garantiert (d.h. Knoten dürfen nicht mehrfach auftreten). Jedoch sind bis heute hierfür keine effizienten Algorithmen bekannt. Daher: Einschränkung auf beliebig gewichtete Digraphen ohne Zyklen negativer Länge. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-76

77 Graphen mit negativen Gewichten () Der Algorithmus von Dijkstra arbeitet bei Graphen mit negativ gewichteten Kanten im allgemeinen nicht korrekt: Mit Algorithmus von Dijkstra berechneter Weg mit Länge = s= z= Kürzester Weg von s nach z mit Länge = -6. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-77

78 Algorithmus von Moore und Ford - Idee Single-source shortest-path: Gegeben ist ein gewichteter Digraph (Gewichte können negativ sein). Gesucht sind alle kürzesten Wege zwischen einem Startknoten s und allen anderen Knoten, sofern der Graph keine negativen Zyklen enthält. Ausgangspunkt ist der Algorithmus von Dijkstra. Beim Algorithmus von Dijkstra wird jeder Knoten v höchstens einmal besucht und zwar dann, wenn der kürzeste Weg zu v bekannt ist. Kommen aber negative gewichtete Kanten vor, dann muss jeder Knoten im allgemeinen mehrere Male besucht werden und zwar immer dann, wenn sich ein noch kürzerer Weg ergibt. Die Reihenfolge, in der die Knoten besucht werden, spielt nun keine Rolle mehr. Es wird daher eine Schlange statt einer Vorrangswarteschlange gewählt. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-78

79 Algorithmus von Moore und Ford void shortestpath (Vertex s, WeightedDiGraph G, double[ ] d, Vertex[ ] p) { Queue<Vertex> kl = { ; for (jeden Knoten v) { d[v] = ; p[v] = undef; d[s] = 0; // Startknoten kl.add(s); while (! kl.empty()) { v = kl.remove(); for ( jeden adjazenten Knoten w von v ) { () if (d[v] + c(v,w) < d[w]) { () p[w] = v; () d[w] = d[v] + c(v,w); () if (! kl.contains(w) ) (5) kl.add(w); Ausgabe: Distanzfeld d und Vorgängerfeld p Eingabe: Startknoten s und gewichteter und gerichteter Graph g In der Kandidatenliste sind alle Knoten abgespeichert, die als nächstes besucht werden können. Die Zugriffsoperationen auf die Kandidatenliste sind rot gekennzeichnet. Distanzwert für w verbessert sich. Kürzester Weg nach w geht nun über v. w muss evtl. nochmals besucht werden. Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-79

80 Beispiel zu Moore- Ford-Algorithmus s= Nächster besuchter Knoten ist rot gekennzeichnet. v d[v] v p[v] Kandiatenliste kl,,,, 8, 8, 5 8, 5, 6 5, 6, 9 6, 9, 8 9, 8,, 7, 7, 9 7, 9, 5 9, 5, Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-80

81 Analyse des Moore- Ford-Algorithmus Enthält der Graph keine Zyklen mit negativer Länge, dann wird jeder Knoten maximal ( V -)-mal in die Schlange kl eingefügt (Zeile (5) im Algorithmus). (Begründung siehe [Turau]). Wird ein Knoten V -mal eingefügt, dann muss es ein Zyklus mit negativer Länge geben und es könnte im Algorithmus eine entsprechende Ausgabe erfolgen. Würde jeder Knoten genau einmal in die Schlange kl eingefügt werden, wäre der Aufwand für alle for-schleifen gerade O( E ). Denn jede Kante im Graph wird genau einmal in einer der for-schleifen betrachtetet. (Zeile (5) kl.contains(w) kann mit Hilfe eines Booleschen Felds in O() realisiert weden). Da nun aber jeder Knoten bis zu ( V -)-mal in die Schlange kl eingefügt werden kann, erhält man insgesamt: T = O( E * V ). Prof. Dr. O. Bittel, HTWG Konstanz Algorithmen und Datenstrukuren Graphenalgorithmen SS 08-8

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.

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

Mehr

Definition Ein gerichteter Graph G = (V, E) ist ein Graph von geordneten Paaren (u, v) mit u V und v V.

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.

Mehr

Routing Algorithmen. Begriffe, Definitionen

Routing Algorithmen. Begriffe, Definitionen Begriffe, Definitionen Routing (aus der Informatik) Wegewahl oder Verkehrslenkung bezeichnet in der Telekommunikation das Festlegen von Wegen für Nachrichtenströme bei der Nachrichtenübermittlung über

Mehr

Graphen: Datenstrukturen und Algorithmen

Graphen: Datenstrukturen und Algorithmen Graphen: Datenstrukturen und Algorithmen Ein Graph G = (V, E) wird durch die Knotenmenge V und die Kantenmenge E repräsentiert. G ist ungerichtet, wenn wir keinen Start- und Zielpunkt der Kanten auszeichnen.

Mehr

Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen 2 Algorithmen und Datenstrukturen 2 Sommersemester 2007 4. Vorlesung Peter F. Stadler Universität Leipzig Institut für Informatik studla@bioinf.uni-leipzig.de Traversierung Durchlaufen eines Graphen, bei

Mehr

ADS: Algorithmen und Datenstrukturen 2

ADS: Algorithmen und Datenstrukturen 2 ADS: Algorithmen und Datenstrukturen Der Tragödie IV. Theyl Peter F. Stadler & Konstantin Klemm Bioinformatics Group, Dept. of Computer Science & Interdisciplinary Center for Bioinformatics, University

Mehr

Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen 2 Algorithmen und Datenstrukturen 2 Sommersemester 2006 3. Vorlesung Peter F. Stadler Universität Leipzig Institut für Informatik studla@bioinf.uni-leipzig.de Algorithmen für Graphen Fragestellungen: Suche

Mehr

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (20 Graphen) T. Lauer

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (20 Graphen) T. Lauer Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 Graphen) T. Lauer 1 Motivation Wie komme ich am besten von Freiburg nach Ulm? Was ist die kürzeste Rundreise durch eine gegebene Menge von Städten?

Mehr

Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen 2 Algorithmen und Datenstrukturen 2 Sommersemester 2006 5. Vorlesung Peter F. Stadler Universität Leipzig Institut für Informatik studla@bioinf.uni-leipzig.de Wdhlg.: Dijkstra-Algorithmus I Bestimmung der

Mehr

8 Diskrete Optimierung

8 Diskrete Optimierung 8 Diskrete Optimierung Definition 8.1. Ein Graph G ist ein Paar (V (G), E(G)) besteh aus einer lichen Menge V (G) von Knoten (oder Ecken) und einer Menge E(G) ( ) V (G) 2 von Kanten. Die Ordnung n(g) von

Mehr

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen Fachschaft Informatik Informatik 11 Kapitel 2 - Rekursive Datenstrukturen Michael Steinhuber König-Karlmann-Gymnasium Altötting 15. Januar 2016 Folie 1/77 Inhaltsverzeichnis I 1 Datenstruktur Schlange

Mehr

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 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

Mehr

Kürzeste Wege in Graphen. Maurice Duvigneau Otto-von-Guericke Universität Fakultät für Informatik

Kürzeste Wege in Graphen. Maurice Duvigneau Otto-von-Guericke Universität Fakultät für Informatik Kürzeste Wege in Graphen Maurice Duvigneau Otto-von-Guericke Universität Fakultät für Informatik Gliederung Einleitung Definitionen Algorithmus von Dijkstra Bellmann-Ford Algorithmus Floyd-Warshall Algorithmus

Mehr

4. Kreis- und Wegeprobleme Abstände in Graphen

4. Kreis- und Wegeprobleme Abstände in Graphen 4. Kreis- und Wegeprobleme Abstände in Graphen Abstände in Graphen Definition 4.4. Es sei G = (V,E) ein Graph. Der Abstand d(v,w) zweier Knoten v,w V ist die minimale Länge eines Weges von v nach w. Falls

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Binäre Suchbäume Einführung und Begriffe Binäre Suchbäume 2 Binäre Suchbäume Datenstruktur für dynamische Mengen

Mehr

3. Musterlösung. Problem 1: Boruvka MST

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

Mehr

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c) 5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c) mit V = {1,...,n} und E {(v, w) 1 apple v, w apple n, v 6= w}. c : E!

Mehr

Universität Bremen. Graphenalgorithmen. Thomas Röfer. Begriffe Repräsentationen Kürzeste Wege Minimale spannende Bäume

Universität Bremen. Graphenalgorithmen. Thomas Röfer. Begriffe Repräsentationen Kürzeste Wege Minimale spannende Bäume Graphenalgorithmen Thomas Röfer Begriffe Repräsentationen Kürzeste Wege Minimale spannende Bäume Rückblick Geometrische Algorithmen Scan-Line-Prinzip Graham-Scan Divide and Conquer Voronoi-Diagramm Eigenschaften

Mehr

Klausur Informatik B April Teil I: Informatik 3

Klausur Informatik B April Teil I: Informatik 3 Informatik 3 Seite 1 von 8 Klausur Informatik B April 1998 Teil I: Informatik 3 Informatik 3 Seite 2 von 8 Aufgabe 1: Fragekatalog (gesamt 5 ) Beantworten Sie folgende Fragen kurz in ein oder zwei Sätzen.

Mehr

Grundlagen Datenstrukturen Transitive Hülle Traversierung Kürzeste Wege Spannender Baum Max. Fluss Zuordnungen. 6. Graphen

Grundlagen Datenstrukturen Transitive Hülle Traversierung Kürzeste Wege Spannender Baum Max. Fluss Zuordnungen. 6. Graphen . Graphen viele praktische (Optimierungs-)Probleme sind als graphentheoretische Probleme formulierbar z.b. in Produktionsplanung, Personaleinsatzplanung,.... Grundlagen gerichteter, ungerichteter und gewichteter

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Kapitel 15: Graphen Thomas Worsch KIT, Institut für Theoretische Informatik Wintersemester 2015/2016 GBI Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik

Mehr

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke Theoretische Informatik 1 WS 2007/2008 Prof. Dr. Rainer Lütticke Inhalt der Vorlesung Grundlagen - Mengen, Relationen, Abbildungen/Funktionen - Datenstrukturen - Aussagenlogik Automatentheorie Formale

Mehr

Vorlesung Datenstrukturen

Vorlesung Datenstrukturen Vorlesung Datenstrukturen Binärbaum Suchbaum Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 356 Datenstruktur Binärbaum Strukturrepräsentation des mathematischen Konzepts Binärbaum

Mehr

Breiten- und Tiefensuche in Graphen

Breiten- und Tiefensuche in Graphen Breiten- und Tiefensuche in Graphen Inhalt Theorie. Graphen. Die Breitensuche in der Theorie am Beispiel eines ungerichteten Graphen. Die Tiefensuche in der Theorie am Beispiel eines gerichteten Graphen

Mehr

Graphen. Leonhard Euler ( )

Graphen. Leonhard Euler ( ) Graphen Leonhard Euler (1707-1783) 2 Graph Ein Graph besteht aus Knoten (nodes, vertices) die durch Kanten (edges) miteinander verbunden sind. 3 Nachbarschaftsbeziehungen Zwei Knoten heissen adjazent (adjacent),

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder Programmieren in PASCAL Bäume 1 1. Baumstrukturen Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder 1. die leere Struktur oder 2. ein Knoten vom Typ Element

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 11: Graphen Thomas Worsch Karlsruher Institut für Technologie, Fakultät für Informatik Wintersemester 2010/2011 1/59 Graphische Darstellung von Zusammenhängen schon

Mehr

Vorlesung 4 BETWEENNESS CENTRALITY

Vorlesung 4 BETWEENNESS CENTRALITY Vorlesung 4 BETWEENNESS CENTRALITY 101 Aufgabe! Szenario: Sie arbeiten bei einem sozialen Online-Netzwerk. Aus der Netzwerk-Struktur Ihrer Benutzer sollen Sie wichtige Eigenschaften extrahieren. [http://www.fahrschule-vatterodt.de/

Mehr

Minimal spannende Bäume

Minimal spannende Bäume http://www.uni-magdeburg.de/harbich/ Minimal spannende Fakultät für Informatik Otto-von-Guericke-Universität 2 Inhalt Definition Wege Untergraphen Kantengewichtete Graphen Minimal spannende Algorithmen

Mehr

Binary Decision Diagrams (Einführung)

Binary Decision Diagrams (Einführung) Binary Decision Diagrams (Einführung) Binary Decision Diagrams (BDDs) sind bestimmte Graphen, die als Datenstruktur für die kompakte Darstellung von booleschen Funktionen benutzt werden. BDDs wurden von

Mehr

Lernmodul 2 Graphen. Lernmodul 2: Geoobjekte und ihre Modellierung - Graphen

Lernmodul 2 Graphen. Lernmodul 2: Geoobjekte und ihre Modellierung - Graphen Folie 1 von 20 Lernmodul 2 Graphen Folie 2 von 20 Graphen Übersicht Motivation Ungerichteter Graph Gerichteter Graph Inzidenz, Adjazenz, Grad Pfad, Zyklus Zusammenhang, Trennende Kante, Trennender Knoten

Mehr

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert Inhalt Einführung 1. Arrays 1. Array unsortiert 2. Array sortiert 3. Heap 2. Listen 1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert 3. Bäume

Mehr

Customization (Zuschneiden)

Customization (Zuschneiden) Customization (Zuschneiden) Anpassen der (Graph)Datenstruktur an die Anwendung. I Ziel: schnell, kompakt. I benutze Entwurfsprinzip: make the common case fast I Listen vermeiden Mögliches Problem: Software-Engineering-Alptraum

Mehr

Graphen. Formale Methoden der Informatik WiSe 2010/2011 teil 2, folie 1 (von 60)

Graphen. Formale Methoden der Informatik WiSe 2010/2011 teil 2, folie 1 (von 60) Graphen Formale Methoden der Informatik WiSe 2010/2011 teil 2, folie 1 (von 60) Teil II: Graphen 1. Einführung 2. Wege und Kreise in Graphen, Bäume 3. Planare Graphen / Traveling Salesman Problem 4. Transportnetzwerke

Mehr

Fully dynamic algorithms for the single source shortest path problem.

Fully dynamic algorithms for the single source shortest path problem. Fully dynamic algorithms for the single source shortest path problem. Michael Baur Wintersemester 2001/2002 Zusammenfassung Im folgenden Paper werde ich Algorithmen für das dynamische Kürzeste-Wege-Problem

Mehr

Diskrete Mathematik. Sebastian Iwanowski FH Wedel. Kap. 6: Graphentheorie

Diskrete Mathematik. Sebastian Iwanowski FH Wedel. Kap. 6: Graphentheorie Referenzen zum Nacharbeiten: Diskrete Mathematik Sebastian Iwanowski FH Wedel Kap. 6: Graphentheorie Lang 6 Beutelspacher 8.1-8.5 Meinel 11 zur Vertiefung: Aigner 6, 7 (7.4: Algorithmus von Dijkstra) Matousek

Mehr

Effiziente Algorithmen und Datenstrukturen: Kürzeste Wege

Effiziente Algorithmen und Datenstrukturen: Kürzeste Wege Effiziente Algorithmen und Datenstrukturen: Kürzeste Wege Kürzeste Wege Zentrale Frage: Wie komme ich am schnellsten von A nach B? B A Kürzeste Wege Zentrale Frage: Wie komme ich am schnellsten von A nach

Mehr

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. 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.

Mehr

Grundlagen der Pfadplanung

Grundlagen der Pfadplanung Grundlagen der Pfadplanung Überblick Kürzeste Wege in Graphen: Konfigurations- und Arbeitsraum Prof. Dr. O. Bittel, HTWG Konstanz Autonome Roboter - Grundlagen der Pfadplanung SS 2016 4-1 Kartenbasierte

Mehr

Algorithmen und Datenstrukturen Graphen - Einführung

Algorithmen und Datenstrukturen Graphen - Einführung Algorithmen und Datenstrukturen Graphen - Einführung Matthias Teschner Graphische Datenverarbeitung Institut für Informatik Universität Freiburg SS 12 Überblick Definition / Eigenschaften Anwendungen Repräsentation

Mehr

DATENSTRUKTUREN UND ALGORITHMEN

DATENSTRUKTUREN UND ALGORITHMEN DATENSTRUKTUREN UND ALGORITHMEN 2 Ist die Datenstruktur so wichtig??? Wahl der Datenstruktur wichtiger Schritt beim Entwurf und der Implementierung von Algorithmen Dünn besetzte Graphen und Matrizen bilden

Mehr

Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch

Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch verschiedene Datenstrukturen: lineare Datenstrukturen: Array,

Mehr

Was bisher geschah. 1. Zerlegung in monotone Polygone 2. Triangulierung der monotonen Teilpolygone

Was bisher geschah. 1. Zerlegung in monotone Polygone 2. Triangulierung der monotonen Teilpolygone Was bisher geschah Motivation, Beispiele geometrische Objekte im R 2 : Punkt, Gerade, Halbebene, Strecke, Polygon, ebene Zerlegung in Regionen (planare Graphen) maschinelle Repräsentation geometrischer

Mehr

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete Kapitel 4: Dynamische Datenstrukturen Algorithmen und Datenstrukturen WS 2012/13 Prof. Dr. Sándor Fekete 4.4 Binäre Suche Aufgabenstellung: Rate eine Zahl zwischen 100 und 114! Algorithmus 4.1 INPUT: OUTPUT:

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens aw@awilkens.com Überblick Grundlagen Definitionen Elementare Datenstrukturen Rekursionen Bäume 2 1 Datenstruktur Baum Definition eines Baumes

Mehr

Effiziente Algorithmen und Datenstrukturen I. Kapitel 9: Minimale Spannbäume

Effiziente Algorithmen und Datenstrukturen I. Kapitel 9: Minimale Spannbäume Effiziente Algorithmen und Datenstrukturen I Kapitel 9: Minimale Spannbäume Christian Scheideler WS 008 19.0.009 Kapitel 9 1 Minimaler Spannbaum Zentrale Frage: Welche Kanten muss ich nehmen, um mit minimalen

Mehr

2. Übungsblatt zu Algorithmen II im WS 2016/2017

2. Übungsblatt zu Algorithmen II im WS 2016/2017 Karlsruher Institut für Technologie Institut für Theoretische Informatik Prof. Dr. Peter Sanders Dr. Christian Schulz, Dr. Simon Gog Michael Axtmann. Übungsblatt zu Algorithmen II im WS 016/017 Aufgabe

Mehr

Algorithmen und Datenstrukturen Suchbaum

Algorithmen und Datenstrukturen Suchbaum Algorithmen und Datenstrukturen Suchbaum Matthias Teschner Graphische Datenverarbeitung Institut für Informatik Universität Freiburg SS 12 Motivation Datenstruktur zur Repräsentation dynamischer Mengen

Mehr

Programmiertechnik II

Programmiertechnik II 2007 Martin v. Löwis Priority Queues and Heapsort 2007 Martin v. Löwis 2 Priority Queue Abstrakter Datentyp Inhalt: Elemente mit Priorität Operationen: Einfügen: Angabe des Elements und seiner Priorität

Mehr

Anmerkungen zur Übergangsprüfung

Anmerkungen zur Übergangsprüfung DM11 Slide 1 Anmerkungen zur Übergangsprüfung Aufgabeneingrenzung Aufgaben des folgenden Typs werden wegen ihres Schwierigkeitsgrads oder wegen eines ungeeigneten fachlichen Schwerpunkts in der Übergangsprüfung

Mehr

Uninformierte Suche in Java Informierte Suchverfahren

Uninformierte Suche in Java Informierte Suchverfahren Uninformierte Suche in Java Informierte Suchverfahren Stephan Schwiebert WS 2009/2010 Sprachliche Informationsverarbeitung Institut für Linguistik Universität zu Köln Suchprobleme bestehen aus Zuständen

Mehr

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Datenstrukturen. Mariano Zelke. Sommersemester 2012 Datenstrukturen Mariano Zelke Sommersemester 2012 Prioritätswarteschlangen Mariano Zelke Datenstrukturen 2/28 Der abstrakte Datentyp Prioritätswarteschlange : Füge Elemente (mit Prioritäten) ein und entferne

Mehr

WS 2009/10. Diskrete Strukturen

WS 2009/10. Diskrete Strukturen WS 2009/10 Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws0910

Mehr

SS11 Effiziente Algorithmen 5. Kapitel: Dynamische Programmierung

SS11 Effiziente Algorithmen 5. Kapitel: Dynamische Programmierung SS11 Effiziente Algorithmen 5. Kapitel: Dynamische Programmierung Martin Dietzfelbinger Juni/Juli 2011 FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 Kapitel 5: Dynamische Programmierung Typische

Mehr

Algorithmen II Vorlesung am

Algorithmen II Vorlesung am Algorithmen II Vorlesung am 0..0 Minimale Schnitte in Graphen INSTITUT FÜR THEORETISCHE INFORMATIK PROF. DR. DOROTHEA WAGNER KIT Universität des Landes Baden-Württemberg und Algorithmen nationales Forschungszentrum

Mehr

Teil II: Prioritätslisten (Priority Queues)

Teil II: Prioritätslisten (Priority Queues) Teil II: Prioritätslisten (Priority Queues)! Definition und Anwendungen! Binäre Heaps! Index-Heaps mit change- und remove-operation! Binomiale Heaps mit merge-operation Prof. Dr. O. Bittel, HTWG Konstanz

Mehr

Graphenalgorithmen I

Graphenalgorithmen I enalgorithmen I Tobias Pröger 21. Dezember 2016 Erklärung: Diese Mitschrift ist als Ergänzung zur Vorlesung gedacht. Wir erheben keinen Anspruch auf Vollständigkeit und Korrektheit. Wir sind froh über

Mehr

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen 5. Compiler Gliederung 1. Struktur eines Compilers 2. Syntaxanalyse durch rekursiven Abstieg 3. Ausnahmebehandlung 4. Arrays und Strings 6. Sortieren und Suchen 1. Grundlegende Datenstrukturen 2. Bäume

Mehr

14. Rot-Schwarz-Bäume

14. Rot-Schwarz-Bäume Bislang: Wörterbuchoperationen bei binären Suchbäume effizient durchführbar, falls Höhe des Baums klein. Rot-Schwarz-Bäume spezielle Suchbäume. Rot-Schwarz-Baum mit n Knoten hat Höhe höchstens 2 log(n+1).

Mehr

MafI I: Logik & Diskrete Mathematik (F. Hoffmann)

MafI I: Logik & Diskrete Mathematik (F. Hoffmann) Lösungen zum 14. und letzten Aufgabenblatt zur Vorlesung MafI I: Logik & Diskrete Mathematik (F. Hoffmann) 1. Ungerichtete Graphen (a) Beschreiben Sie einen Algorithmus, der algorithmisch feststellt, ob

Mehr

κ(k) k K S Algorithmus zur Bestimmung eines spannenden Baumes mit minimalen Kosten (Kruskal, 1965).

κ(k) k K S Algorithmus zur Bestimmung eines spannenden Baumes mit minimalen Kosten (Kruskal, 1965). 5. Graphenprobleme Im folgenden bezeichnen G = (E, K) einen endlichen Graphen mit der Eckenmenge E und der Kantenmenge K. G kann ungerichtet, gerichtet, schlicht oder nicht schlicht sein. 5.1 Spannende

Mehr

C++, LEDA und STL Visualisierung minimal/maximal aufspannender Bäume

C++, LEDA und STL Visualisierung minimal/maximal aufspannender Bäume Fachbereich IV, Informatik Softwarepraktikum C++, LEDA und STL Visualisierung minimal/maximal aufspannender Bäume Wintersemester 2004/2005 Dokumentation Algorithmen zur Lösung von MST - Problemen Nicolas

Mehr

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2009 Grundlagen: Algorithmen und Datenstrukturen Übungsblatt 11 Prof. Dr. Helmut Seidl, S. Pott,

Mehr

Effiziente Algorithmen I

Effiziente Algorithmen I H 10. Präsenzaufgabenblatt, Wintersemester 2015/16 Übungstunde am 18.01.2015 Aufgabe Q Ein Reiseveranstalter besitzt ein Flugzeug, das maximal p Personen aufnehmen kann. Der Veranstalter bietet einen Flug

Mehr

Grundlagen der Programmierung 2. Bäume

Grundlagen der Programmierung 2. Bäume Grundlagen der Programmierung 2 Bäume Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 24. Mai 2006 Graphen Graph: Menge von Knoten undzugehörige (gerichtete oder ungerichtete)

Mehr

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1 3.2 Binäre Suche Beispiel 6.5.1: Intervallschachtelung (oder binäre Suche) (Hier ist n die Anzahl der Elemente im Feld!) Ein Feld A: array (1..n) of Integer sei gegeben. Das Feld sei sortiert, d.h.: A(i)

Mehr

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume. Universität Osnabrück 1 Bäume 3 - Objektorientierte Programmierung in Java Vorlesung 10: Collections 4 Einführung Bäume sind verallgemeinerte Listenstrukturen Lineare Liste Jedes Element hat höchstens

Mehr

Vollständiger Graph. Definition 1.5. Sei G =(V,E) ein Graph. Gilt {v, w} E für alle v, w V,v w, dann heißt G vollständig (complete).

Vollständiger Graph. Definition 1.5. Sei G =(V,E) ein Graph. Gilt {v, w} E für alle v, w V,v w, dann heißt G vollständig (complete). Vollständiger Graph Definition 1.5. Sei G =(V,E) ein Graph. Gilt {v, w} E für alle v, w V,v w, dann heißt G vollständig (complete). Mit K n wird der vollständige Graph mit n Knoten bezeichnet. Bemerkung

Mehr

Dynamische Mengen. Realisierungen durch Bäume

Dynamische Mengen. Realisierungen durch Bäume Dynamische Mengen Eine dynamische Menge ist eine Datenstruktur, die eine Menge von Objekten verwaltet. Jedes Objekt x trägt einen eindeutigen Schlüssel key[x]. Die Datenstruktur soll mindestens die folgenden

Mehr

Literatur. Dominating Set (DS) Dominating Sets in Sensornetzen. Problem Minimum Dominating Set (MDS)

Literatur. Dominating Set (DS) Dominating Sets in Sensornetzen. Problem Minimum Dominating Set (MDS) Dominating Set 59 Literatur Dominating Set Grundlagen 60 Dominating Set (DS) M. V. Marathe, H. Breu, H.B. Hunt III, S. S. Ravi, and D. J. Rosenkrantz: Simple Heuristics for Unit Disk Graphs. Networks 25,

Mehr

Proseminar Online Algorithmen, Prof. Dr. Rolf Klein

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

Mehr

9. Heuristische Suche

9. Heuristische Suche 9. Heuristische Suche Prof. Dr. Rudolf Kruse University of Magdeburg Faculty of Computer Science Magdeburg, Germany rudolf.kruse@cs.uni-magdeburg.de S Heuristische Suche Idee: Wir nutzen eine (heuristische)

Mehr

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie Gliederung 1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. äume / Graphen. Hashing 6. Algorithmische Geometrie 4/6, Folie 1 2014 Prof. Steffen Lange - HDa/FbI

Mehr

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen 1 Kapitel 9 Komplexität von Algorithmen und Sortieralgorithmen Ziele 2 Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:

Mehr

11.1 Grundlagen - Denitionen

11.1 Grundlagen - Denitionen 11 Binärbäume 11.1 Grundlagen - Denitionen Denition: Ein Baum ist eine Menge, die durch eine sog. Nachfolgerrelation strukturiert ist. In einem Baum gilt: (I) (II) 1 Knoten w ohne VATER(w), das ist die

Mehr

Fortgeschrittene Programmiertechnik Klausur WS 2014/15 Angewandte Informatik Bachelor

Fortgeschrittene Programmiertechnik Klausur WS 2014/15 Angewandte Informatik Bachelor Fortgeschrittene Programmiertechnik Klausur WS 2014/15 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 6 2 8 3 16 4 14 5 12 56 6 16 7 18 8 20 9 10 Summe

Mehr

Kombinatorische Optimierung

Kombinatorische Optimierung Juniorprof. Dr. Henning Meyerhenke 1 Henning Meyerhenke: KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Vorlesung 4 Programm des

Mehr

ADS: Algorithmen und Datenstrukturen 2

ADS: Algorithmen und Datenstrukturen 2 ADS: Algorithmen und Datenstrukturen 2 Teil 5 Prof. Peter F. Stadler & Dr. Christian Höner zu Siederdissen Bioinformatik/IZBI Institut für Informatik & Interdisziplinäres Zentrum für Bioinformatik Universität

Mehr

Einführung in Heuristische Suche

Einführung in Heuristische Suche Einführung in Heuristische Suche Beispiele 2 Überblick Intelligente Suche Rundenbasierte Spiele 3 Grundlagen Es muss ein Rätsel / Puzzle / Problem gelöst werden Wie kann ein Computer diese Aufgabe lösen?

Mehr

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie Gliederung 1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie 4/2, Folie 1 2014 Prof. Steffen Lange - HDa/FbI

Mehr

MB2-ALG, SS15 Seite 1 Hauptklausur, geschrieben am

MB2-ALG, SS15 Seite 1 Hauptklausur, geschrieben am MB-ALG, SS1 Seite 1 Hauptklausur, geschrieben am.07.01 Vorname Nachname Matrikel-Nr Diese Klausur ist mein letzter Prüfungsversuch (bitte ankreuzen): Ja Nein Ihre Lösung für Aufgabe 1 können Sie direkt

Mehr

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort. Name: Seite 2 Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort. Aufgabe 1 (8 Punkte) 1. Wie viele negative Zahlen (ohne 0) lassen sich im 4-Bit-Zweierkomplement darstellen?

Mehr

Ausarbeitung zum Modulabschluss. Graphentheorie. spannende Bäume, bewertete Graphen, optimale Bäume, Verbindungsprobleme

Ausarbeitung zum Modulabschluss. Graphentheorie. spannende Bäume, bewertete Graphen, optimale Bäume, Verbindungsprobleme Universität Hamburg Fachbereich Mathematik Seminar: Proseminar Graphentheorie Dozentin: Haibo Ruan Sommersemester 2011 Ausarbeitung zum Modulabschluss Graphentheorie spannende Bäume, bewertete Graphen,

Mehr

Graph Paar (V,E) V: nichtleere Menge von Knoten (vertex) E: Menge von Kanten (edges): Relation (Verbindung) zwischen den Knoten

Graph Paar (V,E) V: nichtleere Menge von Knoten (vertex) E: Menge von Kanten (edges): Relation (Verbindung) zwischen den Knoten Graphentheorie Graph Paar (V,E) V: nichtleere Menge von Knoten (vertex) E: Menge von Kanten (edges): Relation (Verbindung) zwischen den Knoten gerichteter Graph (DiGraph (directed graph) E: Teilmenge E

Mehr

Programmiertechnik II

Programmiertechnik II Bäume Symboltabellen Suche nach Werten (items), die unter einem Schlüssel (key) gefunden werden können Bankkonten: Schlüssel ist Kontonummer Flugreservierung: Schlüssel ist Flugnummer, Reservierungsnummer,...

Mehr

Einführung in die Graphentheorie. Monika König

Einführung in die Graphentheorie. Monika König Einführung in die Graphentheorie Monika König 8. 11. 2011 1 Vorwort Diese Seminararbeit basiert auf den Unterkapiteln 1.1-1.3 des Buches Algebraic Graph Theory von Chris Godsil und Gordon Royle (siehe

Mehr

Algorithmen und Datenstrukturen (WS 2007/08) 63

Algorithmen und Datenstrukturen (WS 2007/08) 63 Kapitel 6 Graphen Beziehungen zwischen Objekten werden sehr oft durch binäre Relationen modelliert. Wir beschäftigen uns in diesem Kapitel mit speziellen binären Relationen, die nicht nur nur besonders

Mehr

Das Briefträgerproblem

Das Briefträgerproblem Das Briefträgerproblem Paul Tabatabai 30. Dezember 2011 Inhaltsverzeichnis 1 Problemstellung und Modellierung 2 1.1 Problem................................ 2 1.2 Modellierung.............................

Mehr

Teil XII. Datenstrukturen: Bäume, Stacks und Queues. Scientific Computing in Computer Science, Technische Universität München

Teil XII. Datenstrukturen: Bäume, Stacks und Queues. Scientific Computing in Computer Science, Technische Universität München Teil XII Datenstrukturen: Bäume, Stacks und Queues IN8008, Wintersemester 2011/2012 251 Stacks (Kellerspeicher/Stapel) Funktioniert wie ein natürlicher Stapel (z.b. Papierstapel auf dem Schreibtisch) Elemente

Mehr

f h c 7 a 1 b 1 g 2 2 d

f h c 7 a 1 b 1 g 2 2 d ) Man bestimme mit Hilfe des Dijkstra-Algorithmus einen kürzesten Weg von a nach h: c 7 a b f 5 h 3 4 5 i e 6 g 2 2 d Beim Dijkstra-Algorithmus wird in jedem Schritt von den noch unmarkierten Knoten jener

Mehr

Algorithmen und Datenstrukturen 2-2. Seminar -

Algorithmen und Datenstrukturen 2-2. Seminar - Algorithmen und Datenstrukturen 2-2. Seminar - Dominic Rose Bioinformatics Group, University of Leipzig Sommersemster 2010 Outline 2. Übungsserie: 3 Aufgaben, insgesamt 30 Punkte A4 Flußnetzwerk, Restgraphen

Mehr

Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 3: Minimal aufspannende Bäume und Matroide

Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 3: Minimal aufspannende Bäume und Matroide Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 3: Minimal aufspannende Bäume und Matroide Dipl-Math. Wolfgang Kinzner 3.4.2012 Kapitel 3: Minimal aufspannende Bäume und Matroide Minimal aufspannende

Mehr

13. Binäre Suchbäume

13. Binäre Suchbäume 1. Binäre Suchbäume Binäre Suchbäume realiesieren Wörterbücher. Sie unterstützen die Operationen 1. Einfügen (Insert) 2. Entfernen (Delete). Suchen (Search) 4. Maximum/Minimum-Suche 5. Vorgänger (Predecessor),

Mehr

2. Repräsentationen von Graphen in Computern

2. Repräsentationen von Graphen in Computern 2. Repräsentationen von Graphen in Computern Kapitelinhalt 2. Repräsentationen von Graphen in Computern Matrizen- und Listendarstellung von Graphen Berechnung der Anzahl der verschiedenen Kantenzüge zwischen

Mehr

Undirected Single-Source Shortest Paths with Positive Integer Weights in Linear Time

Undirected Single-Source Shortest Paths with Positive Integer Weights in Linear Time Universität Konstanz Mathematisch-naturwissenschaftliche Sektion Fachbereich Mathematik und Statistik Wintersemester 2001/02 Mikkel Thorup: Undirected Single-Source Shortest Paths with Positive Integer

Mehr

Algorithmen und Datenstrukturen 1

Algorithmen und Datenstrukturen 1 Algorithmen und Datenstrukturen 1 7. Vorlesung Peter F. Stadler Universität Leipzig Institut für Informatik studla@informatik.uni-leipzig.de aufbauend auf den Kursen der letzten Jahre von E. Rahm, G. Heyer,

Mehr

Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor

Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 6 2 8 3 12 4 18 5 20 64 6 9 7 17 8 18 9 12 Summe 120

Mehr

Konzepte der Informatik

Konzepte der Informatik Konzepte der Informatik Vorkurs Informatik zum WS 2011/2012 26.09. - 30.09.2011 17.10. - 21.10.2011 Dr. Werner Struckmann / Christoph Peltz Stark angelehnt an Kapitel 1 aus "Abenteuer Informatik" von Jens

Mehr