7 Graphen 7.1 Graphen 7 7.2 Arten von Graphen 7.3 Graph als Datenstruktur 97 7 Graphen Teil VII Graphen Überblick Graphen Arten von Graphen Graph als Datenstruktur Saake/Schallehn Algorithmen & Datenstrukturen II 7–1 Graphen ◮ Netzwerke aus Knoten und Kanten ◮ vielfältiger Einsatz ◮ ◮ ◮ ◮ ◮ Verbindungsnetzwerke: Bahnnetz, Flugverbindungen, Strassenkarten, ... Verweise: WWW, Literaturverweise, Wikipedia, symbolische Links, ... technische Modelle: Platinen-Layout, finite Elemente, Computergraphik, ... Software-Dokumentation Bäume und Listen sind spezielle Graphen ! Saake/Schallehn 98 Algorithmen & Datenstrukturen II 7–2 Uni Magdeburg, WS 2005/06 7 Graphen Arten von Graphen ◮ Ungerichtete Graphen ◮ Gerichtete Graphen ◮ ◮ ◮ ◮ Förderanlagen, Kontrollfluss in Programmen, ... Gewichtete Graphen 7 ◮ Strassenverbindungen, Telefonnetz, Nachbarschaft, .. Bahnnetz mit Kosten, Strassennetz mit Kilometern, ... Multi-Graphen, Hyper-Graphen, ... Saake/Schallehn Algorithmen & Datenstrukturen II 7–3 Ungerichteter Graph Gu 1 2 Saake/Schallehn 3 4 5 6 Algorithmen & Datenstrukturen II 7–4 Ungerichtete Graphen formal ◮ Graph als Zweitupel G = (V , E) ◮ ◮ endliche Menge V von Knoten (V für englisch vertices) Menge E von Kanten (E für englisch edges) ◮ ◮ ◮ ◮ e ∈ E ist zweielementige Teilmenge der Knotenmenge V . keine Schleifen, d.h. Kanten von einem Knoten zu sich selbst keine mehrfachen Kanten zwischen zwei Knoten (Parallelkanten) oft: alternative Definition mit e ∈ E als ein- oder zweielementige Teilmenge Saake/Schallehn Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 7–5 99 7 Graphen Beispiel für ungerichteten Graph Gu ◮ Gu = (Vu , Eu ) ◮ Vu = {1, 2, 3, 4, 5, 6} ◮ Eu = {{1, 2}, {1, 3}, {1, 4}, {2, 6}, {4, 6}, {3, 6}, {5, 6}, {3, 4}, {3, 5}} 1 2 Saake/Schallehn 3 4 5 6 Algorithmen & Datenstrukturen II 7–6 Gerichteter Graph Gg 1 2 Saake/Schallehn 3 4 5 6 Algorithmen & Datenstrukturen II 7–7 Gerichtete Graphen formal ◮ Zweitupel G = (V , E) mit ◮ ◮ V , einer endlichen Menge von Knoten, und E, einer Menge von Kanten. ◮ jedes e ∈ E ist nun ein Tupel (a, b) mit a, b ∈ V ◮ Schleifen (a, a) sind erlaubt Saake/Schallehn 100 Algorithmen & Datenstrukturen II 7–8 Uni Magdeburg, WS 2005/06 7 Graphen Gerichtete Graphen am Beispiel Gg ◮ Gg = (Vg , Eg ) ◮ Vg = {1, 2, 3, 4, 5, 6} Eg = {(1, 2), (1, 3), (3, 1), (4, 1), (3, 4), (3, 6), (5, 3), (5, 5), (6, 5), (6, 2), (6, 4)} 7 ◮ 1 2 3 4 5 6 Saake/Schallehn Algorithmen & Datenstrukturen II 7–9 Gewichtete Graphen ◮ Graph + ◮ Kantengewichte γ, etwa natürliche Zahlen ◮ G = (V , E, γ) mit ◮ gerichtet oder ungerichtet möglich γ: E → N Saake/Schallehn Algorithmen & Datenstrukturen II 7–10 Gewichteter Graph 1 7 3 3 5 2 2 2 0 1 4 6 2 3 5 6 1 Saake/Schallehn Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 7–11 101 7 Graphen Realisierung von Graphen ◮ dynamische Datenstruktur ◮ Kanten- und Knotenlisten ◮ Matrixdarstellung Saake/Schallehn Algorithmen & Datenstrukturen II 7–12 Direkte Realisierung ◮ analog zu Bäumen ◮ Knoten mit Zeiger-Liste ◮ unüblich da komplexe Strukturen mit vielen Fehlermöglichkeiten Saake/Schallehn Algorithmen & Datenstrukturen II 7–13 Kanten- und Knotenlisten ◮ einfache Realisierung bei durchnummerierten Knoten ◮ historisch erste verwendete Datenstruktur ◮ als Austauschfomat geeignet ◮ Auflistung nach Knoten oder nach Kanten sortiert Saake/Schallehn 102 Algorithmen & Datenstrukturen II 7–14 Uni Magdeburg, WS 2005/06 7 Graphen Kantenlisten ◮ Kantenliste für Gg : 6, 11, 1, 2, 1, 3, 3, 1, 4, 1, 3, 4, 3, 6, 5, 3, 5, 5, 6, 5, 6, 2, 6, 4 1 4 5 6 Saake/Schallehn 7 2 3 Algorithmen & Datenstrukturen II 7–15 Knotenlisten ◮ Gg als Knotenliste: 6, 11, 2, 2, 3, 0, 3, 1, 4, 6, 1, 1, 2, 3, 5, 3, 2, 4, 5 ◮ Teilfolge 2, 2, 3 bedeutet ◮ „Knoten 1 hat Ausgangsgrad 2 und herausgehende Kanten zu den Knoten 2 und 3“ 1 2 Saake/Schallehn 3 4 5 6 Algorithmen & Datenstrukturen II 7–16 Kanten- versus Knotenlisten ◮ Knotenlisten benötigen weniger Speicherbedarf als Kantenlisten ◮ Kantenlisten: ◮ Knotenlisten: 2 + 2 · |E| 2 + |V | + |E| Saake/Schallehn Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 7–17 103 7 Graphen Adjazenzmatrix ◮ ◮ ◮ Adjazenzmatrix: Adjazenz bedeutet Berühren, Aneinandergrenzen Darstellung des Graphen als Boole´sche Matrix Einträge für Nachbarschaft / direkte Erreichbarkeit durch Kanten ◮ ungerichtete Graphen: Halb-Matrix (Dreieck) reicht aus gewichtete Graphen: ◮ einige Graphoperationen als Matrixoperationen möglich ◮ ◮ ◮ Gewichte statt Boole´sche Werte Ereichbarkeit durch iterierte Matrix-Multiplikation Saake/Schallehn Algorithmen & Datenstrukturen II 7–18 Adjazenzmatrix: gerichtet Gg = 0 0 1 1 0 0 1 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 1 2 3 4 5 6 Saake/Schallehn Algorithmen & Datenstrukturen II 7–19 Adjazenzmatrix: ungerichtet Gu = 0 1 1 1 0 0 1 0 0 0 0 1 1 0 0 1 1 1 1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 1 1 0 1 2 Saake/Schallehn 104 3 4 5 6 Algorithmen & Datenstrukturen II 7–20 Uni Magdeburg, WS 2005/06 7 Graphen Adjazenzmatrix: ungerichtet als Dreiecksmatrix Gu = ◮ 0 1 1 1 0 0 0 0 0 0 1 0 1 0 1 0 0 1 1 1 0 7 Diagonale kann ebenfalls weggelassen werden wenn Schleifen verboten sind Saake/Schallehn Algorithmen & Datenstrukturen II 7–21 Dynamisch mit Adjazenzlisten ◮ Liste der Knoten (alternativ: Array) ◮ pro Knoten die von ihm ausgehenden Kanten ◮ ◮ ◮ als Liste oder Array von Zeigern als Adjazenzliste Graph durch |V | + 1 verkettete Listen realisiert Saake/Schallehn Algorithmen & Datenstrukturen II 7–22 Graph mit Adjazenzlisten 1 2 3 3 1 4 4 1 5 3 5 6 2 4 2 Saake/Schallehn 6 5 Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 7–23 105 7 Graphen Speicherbedarf bei Adjazenzlisten ◮ seien n = |V | und m = |E| ◮ benötigt werden insgesamt n+ n X ag(i) = n + m i=1 Listenelemente Saake/Schallehn Algorithmen & Datenstrukturen II 7–24 Transformation zwischen den Darstellungen ◮ die vorgestellten Realisierungsvarianten sind äquivalent ◮ ◮ ◮ ◮ jede Darstellung kann also in jede andere ohne Informationsverlust transformiert werden Auslesen der einen Darstellung und anschließend das Erzeugen der jeweils anderen Darstellung Aufwand dieser Transformationen variiert von O(n + m) bis O(n2 ), wobei im schlechtesten Fall m = n2 gilt n2 tritt immer auf, wenn eine Matrixdarstellung beteiligt ist Saake/Schallehn Algorithmen & Datenstrukturen II 7–25 Komplexitätsbetrachtungen Operation Einfügen Kante Löschen Kante Einfügen Knoten Löschen Knoten ◮ Knotenliste O(n + m) O(n + m) O(1) O(n + m) Adjazenzmatrix O(1) O(1) O(n2 ) O(n2 ) Adjazenzliste O(1) / O(n) O(n) O(1) O(n + m) Löschen eines Knotens erfordert Löschen der zugehörigen Kanten! Saake/Schallehn 106 Kantenliste O(1) O(m) O(1) O(m) Algorithmen & Datenstrukturen II 7–26 Uni Magdeburg, WS 2005/06 7 Graphen Komplexitätsbetrachtungen II Kantenlisten ◮ ◮ ◮ ◮ Knotenlisten ◮ ◮ Einfügen von Kanten (Anhängen zweier Zahlen) und von Knoten (Erhöhung der ersten Zahl um 1) besonders günstig Löschen von Kanten: Zusammenschieben in einer Liste Löschen von Knoten: Durchnummerierung der Knoten Einfügen von Knoten (Erhöhung der ersten Zahl und Anhängen einer 0) günstig Matrixdarstellung ◮ ◮ Manipulieren von Kanten sehr effizient ausführbar Aufwand bei Knoteneinfügung hängt von Realisierung ab ◮ ◮ 7 ◮ eventuell Kopieren der Matrix in eine größere Matrix Adjazenzliste ◮ unterschiedlicher Aufwand, je nachdem ob die Knotenliste als Feld (mit Direktzugriff) oder als verkettete Liste (mit sequenziellem Durchlauf) realisiert Saake/Schallehn Algorithmen & Datenstrukturen II Uni Magdeburg, WS 2005/06 7–27 107