Programm heute Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser 7 Fortgeschrittene Datenstrukturen Graphen Bäume Computer Aided Medical Procedures Technische Universität München 3 Übersicht: Graphen Definition: Ungerichteter Graph Klassen von Graphen: Definition: Ungerichteter Graph • ungerichteter Graph Ein ungerichteter Graph ist ein Paar G = (V , E ) mit • gerichteter Graph • V endliche Menge der Knoten • E ⊆ {u, v } : u, v ∈ V Zusätzliche Eigenschaften: Menge der Kanten • gewichteter Graph 6 K2 • auf Englisch: • Knoten = vertices • Kanten = edges K4 7 9 10 4 5 K1 1 2 • es ist {u, v } = {v , u}, d.h. Richtung der K5 Kante spielt keine Rolle 8 Beispiel: 4 2 3 1 5 3 K3 4 5 Ungerichteter Graph: Beispiel Definition: Gerichteter Graph Definition: Gerichteter Graph 4 Ein gerichteter Graph ist ein Paar G = (V , E ) mit 2 • V endliche Menge der Knoten 3 • E ⊆ V × V Menge der Kanten 1 5 • E ⊆ (u, v ) : u, v ∈ V =V ×V Beispiel: • es ist (u, v ) 6= (v , u), d.h. Richtung der • Graph Gu = (Vu , Eu ) 4 Kante spielt eine Rolle • Knoten Vu = {1, 2, 3, 4, 5} • hier sind Schleifen möglich, d.h. Kanten der • Kanten 2 3 1 5 Form (u, u) für u ∈ V Eu = {1, 2}, {1, 5}, {2, 3}, {2, 4}, {2, 5}, {3, 4}, {3, 5} 7 6 Gerichteter Graph: Beispiel Definition: Gewichteter Graph Definition: Gewichteter Graph 4 2 3 1 5 Ein gewichteter Graph ist ein Graph G = (V , E ) mit einer Gewichtsfunktion w : E → R. • der Graph G kann gerichtet oder ungerichtet Beispiel: sein 4 • je nach Anwendung kann ein verschiedener • Graph Gg = (Vg , Eg ) 1 Wertebereich für die Funktion w gewählt werden • Knoten Vg = {1, 2, 3, 4, 5} • z.B. R oder N0 • Kanten Eg = (1, 2), (2, 3), (2, 5), (3, 4), (3, 5), (4, 2), (5, 1), (5, 3) 2 3 3 8 9 1 8 7 2 5 5 9 Eigenschaften von Graphen I Eigenschaften von Graphen: Beispiel Sei G = (V , E ) ein Graph (gerichtet oder ungerichtet). Beispiel gerichteter Graph: • Ist (u, v ) ∈ E bzw. {u, v } ∈ E für u, v ∈ V , so heißt v 4 • Knoten 2 ist adjazent zu Knoten 1 adjazent zu u. • Knoten 1 ist adjazent zu Knoten 5 • Sei G gerichteter Graph, sei v ∈ V ein Knoten. • die Anzahl der eintretenden Kanten in v heißt Eingangsgrad (englisch: indegree) von v , indeg (v ) = v 0 : (v 0 , v ) ∈ E 2 3 1 5 • outdeg (2) = 2, indeg (2) = 2 • indeg (1) = 1, outdeg (1) = 1 • die Anzahl der austretetenden Kanten von v heißt Beispiel ungerichteter Graph: Ausgangsgrad (englisch: outdegree) von v , outdeg (v ) = v 0 : (v , v 0 ) ∈ E 4 • Knoten 4 ist adjazent zu Knoten 2 • Knoten 2 ist adjazent zu Knoten 4 2 3 1 5 • deg (2) = 4 • Sei G ungerichteter Graph, sei v ∈ V ein Knoten. • die Anzahl der eintretenden bzw. austretenden Kanten von v heißt Grad (englisch: degree) von v oder kurz deg (v ). • deg (1) = 2 11 10 Eigenschaften von Graphen II Eigenschaften von Graphen II: Beispiel Beispiel gerichteter Graph: 4 • (1, 2, 5) ist ein einfacher Pfad der Länge 2 Sei G = (V , E ) ein Graph (gerichtet oder ungerichtet). • Seien v , v 0 ∈ V . Ein Pfad von v nach v 0 ist eine Folge von Knoten (v0 , v1 , . . . , vk ) ⊂ V mit • (2, 3, 4, 2) ist ein Pfad der Länge 3, aber 2 3 1 5 nicht einfach • v0 = v , vk = v 0 • (vi , vi+1 ) ∈ E bzw. {vi , vi+1 } ∈ E für i = 0, . . . , k − 1 • 5 ist erreichbar von 1 k heißt Länge des Pfades. • Ein Pfad heißt einfach, falls alle Knoten des Pfades paarweise Beispiel ungerichteter Graph: verschieden sind. 4 • (5, 2, 4, 3, 2) ist ein Pfad der Länge 4, aber nicht einfach Gibt es einen Pfad von u nach v , so heißt v erreichbar von u. 2 3 1 5 • (1, 2, 3, 4) ist ein einfacher Pfad der Länge 3 • 3 ist erreichbar von 1 12 13 Eigenschaften von Graphen III Eigenschaften von Graphen III: Beispiel Sei G = (V , E ) gerichteter Graph. • Ein Pfad (v0 , . . . , vk ) heißt Zyklus, falls Beispiel gerichteter Graph: 4 • (1, 2, 5, 3, 5, 1) ist ein Zyklus, aber nicht • v0 = vk und • der Pfad mindestens eine Kante enthält einfach 2 3 1 5 • (1, 2, 5, 1) ist ein einfacher Zyklus • Ein Zyklus (v0 , . . . , vk ) heißt einfach, falls v1 , . . . , vk paarweise verschieden sind. Sei G = (V , E ) ungerichteter Graph. • Ein Pfad (v0 , . . . , vk ) heißt Zyklus, falls Beispiel ungerichteter Graph: 4 • (1, 2, 5, 1) ist ein Zyklus • v0 = vk • k ≥3 • v1 , . . . , vk paarweise verschieden • (2, 3, 4, 2) ist ein Zyklus Ein Graph ohne Zyklen heißt azyklisch. 2 3 1 5 15 14 Eigenschaften von Graphen IV Eigenschaften von Graphen IV: Beispiel Sei G = (V , E ) gerichteter Graph. Beispiel gerichteter Graph: • G heißt stark zusammenhängend, falls jeder Knoten von 4 • Graph ist nicht stark zusammenhängend jedem anderen Knoten aus erreichbar ist. • Eine starke Zusammenhangskomponente von G ist ein maximaler zusammenhängender Untergraph von G . (z.B. 3 nicht erreichbar von 4) 2 3 1 5 • starke Zusammenhangskomponenten: {1, 2, 3, 5} und {4} • alternativ: Äquivalenzklassen der Knoten bezüglich Relation “gegenseitig erreichbar” Sei G = (V , E ) ungerichteter Graph. Beispiel ungerichteter Graph: • G heißt zusammenhängend, falls jeder Knoten von jedem 4 • Graph ist zusammenhängend anderen Knoten aus erreichbar ist. • Eine Zusammenhangskomponente von G ist ein maximaler zusammenhängender Untergraph von G . • nur eine Zusammenhangskomponente: 2 3 1 5 {1, 2, 3, 4, 5} • alternativ: Äquivalenzklassen der Knoten bezüglich Relation “erreichbar von” 16 17 Darstellung von Graphen: Adjazenzmatrizen Adjazenzmatrizen: Beispiele Beispiel gerichteter Graph: 0 1 0 0 0 1 A= 0 0 0 0 1 0 1 0 1 Adjazenzmatrix Sei G = (V , E ) mit V = {v1 , . . . , vn }. Die Adjazenzmatrix von G speichert die vorhandenen Kanten in einer n × n Matrix A ∈ Rn×n mit 4 0 0 1 0 0 0 1 1 0 0 2 3 1 5 • A(i, j) = 1 falls Kante von Knoten vi zu vj existiert • A(i, j) = 0 falls keine Kante von Knoten vi zu vj existiert für i, j ∈ {1, . . . , n}. Beispiel ungerichteter 0 1 A= 0 0 1 Graph: 1 0 1 1 1 0 1 0 1 1 4 0 1 1 0 0 1 1 1 0 0 2 3 1 5 18 Adjazenzmatrizen: Eigenschaften 19 Darstellung von Graphen: Adjazenzlisten Adjazenzliste Eigenschaften von Adjazenzmatrizen zu Graph G = (V , E ) Sei G = (V , E ) gerichteter Graph. Eine Adjazenzliste von G sind |V | + 1 verkettete Listen, so daß • sinnvoll wenn der Graph nahezu vollständig ist (d.h. fast alle möglichen Kanten tatsächlich in E liegen) • die erste Liste alle Knoten enthält • Speicherkomplexität: O(|V |2 ) • für jeden Knoten v eine Liste angelegt wird mit allen Knoten, die durch eine von v austretende Kante zu erreichen sind • bei ungerichteten Graphen ist die Adjazenzmatrix symmetrisch • bei gewichteten Graphen kann man statt der 1 in der Matrix das Gewicht der Kante eintragen 20 21 Adjazenzliste: Beispiel Adjazenzliste: Eigenschaften Eigenschaften von Adjazenzlisten zu Graph G = (V , E ) Graph: Adjazenzliste: 1 2 • sinnvoll bei dünn besetzten Graphen mit wenigen Kanten 4 2 1 3 5 2 3 5 • Speicherkomplexität: O(|V | + |E |) 3 4 5 • bei ungerichteten Graphen gleiches Verfahren • allerdings muß jede Kante zweimal gespeichert werden 4 2 5 1 • bei gewichteten Graphen kann man die Gewichte mit in den verketteten Listen der jeweiligen Knoten speichern 3 23 22 Komplexität der Darstellungen Algorithmen auf Graphen Sei G = (V , E ) Graph. Operation Adjazenzmatrix Adjazenzliste Kante einfügen O(1) O(|V |) Kante löschen O(1) O(|V |) Knoten einfügen O(|V |2 ) O(1) Knoten löschen O(|V |2 ) O(|V | + |E |) Ausblick auf Algorithmen auf Graphen: • Traversierung (Durchlaufen) von allen Knoten • Depth-First Search (DFS) • Breadth-First Search (BFS) • kürzester Pfad zwischen Knoten in Graphen • minimaler Spannbaum (minimum spanning tree, MST) • falls Größe im Vorhinein bekannt, kann Knoten → siehe Kapitel 9! löschen/einfügen bei Adjanzenzmatrix effizienter implementiert werden • auch die Adjanzenzlisten lassen sich effizienter implementieren, z.B. auf Kosten von Speicher (sequentielle Liste statt verkettete Liste) • Löschen von Knoten ist immer aufwendig, da auch alle Kanten von/zu diesem Knoten gelöscht werden müssen 24 25 Programm heute Bäume Bäume sind alltägliches Mittel zur Strukturierung: • Stammbaum • Hierarchie in Unternehmen • Systematik in der Biologie 7 Fortgeschrittene Datenstrukturen • etc. Graphen Bäume In Informatik: • Bäume sind spezielle Graphen • Wurzel oben! 27 26 Definition Wald/Baum Eigenschaften von Bäumen Definition: Wald und Baum Sei G = (V , E ) ein Baum. • jedes Paar von Knoten u, v ∈ V ist durch einen einzigen Pfad • Ein azyklischer ungerichteter Graph heißt auch Wald. verbunden • Ein zusammenhängender, azyklischer ungerichteter Graph • G ist zusammenhängend, aber wenn eine Kante aus E heißt auch Baum. entfernt wird, ist G nicht mehr zusammenhängend • G ist azyklisch, aber wenn eine Kante zu E hinzugefügt wird, ist G nicht mehr azyklisch (1,1) (1,2) (2,2) (2,1) (1,3) (3,2) (3,1) (2,2) (2,3) (2,1) (3,2) (3,1) (1,3) (3,3) (2,3) • es ist |E | = |V | − 1 (2,2) (1,2) (2,1) (3,2) (3,1) (3,3) (3,3) Baum Wald kein Baum! 28 29 Wurzel von Bäumen Weitere Begriffe bei Bäumen I Sei G = (V , E ) ein Baum mit Wurzel w ∈ V . • jeder Knoten v ∈ V mit v 6= w ist mit genau einer Kante mit Sei G = (V , E ) ein Baum. • genau ein Knoten w ∈ V wird als Wurzel ausgezeichnet seinem Vaterknoten x ∈ V (oder: Vorgänger) verbunden • entfernt man w erhält man einen Wald von Teilbäumen • v wird dann als Kind (oder: Sohn, Nachfolger) von x ∈ V bezeichnet Wurzel • ein Knoten ohne Kinder heißt Blatt, alle anderen Knoten heißen innere Knoten w Teilbaum Wurzel w innerer Knoten Vater x Kind Hinweis: manchmal wird zwischen “freiem” und “gewurzeltem” Baum unterschieden! v Blätter 30 Weitere Begriffe bei Bäumen II 31 Bäume: Beispiele • arithmetischer Ausdruck Sei G = (V , E ) ein Baum mit Wurzel w ∈ V . • Länge des Pfades von Wurzel w zu Knoten x ∈ V heißt Tiefe (3 + 4) ∗ 5 + 2 ∗ 3 von x repräsentiert als Baum: • alle Knoten gleicher Tiefe bilden eine Ebene des Baumes G + • die Höhe des Baumes G ist die maximale Tiefe der Knoten von G * • Achtung: manchmal ist Höhe auch als Anzahl der Ebenen definiert + w Ebene 0 3 * 5 2 3 4 Ebene 1 Höhe = 3 • hierarchisches Dateisystem • Windows z.B. “C:\” • Unix “/” Ebene 2 Ebene 3 • Suchbaum → Kapitel 8 32 33 Besondere Bäume Beispiel: Binärbaum Sei G = (V , E ) ein Baum mit Wurzel w ∈ V . • sind die Kinder jedes Knotens in bestimmter Reihenfolge Ebene 0 angeordnet, heißt G geordneter Baum Ebene 1 • ist die Anzahl n der Kinder jedes Knotens vorgegeben, heißt G Höhe = 3 n-ärer Baum Ebene 2 Ebene 3 Wichtiger Spezialfall: • ist G geordnet und hat jeder Knoten maximal zwei Kinder, Binärbaum mit Höhe 3, 8 Blättern und 7 inneren Knoten. heißt G Binärbaum • Binärbaum heißt vollständig, wenn jede Ebene die maximal Anzahl an Knoten enthält • ein vollständiger Binärbaum der Höhe k hat 2k+1 − 1 Knoten, davon 2k Blätter 35 34 Darstellung von Bäumen: als Graph Darstellung von Bäumen: verkettete Liste Darstellung mit angepassten verketteten Listen: Bäume sind Graphen → Darstellung als Wurzel • Adjazenzmatrix • Adjazenzliste Kind Wert Bruder → leider meist nicht effizient (sowohl Laufzeit als auch Speicher) Kind Wert Bruder Kind Wert Bruder Kind Kind Wert Wert Bruder Bruder Kind Wert Bruder Nachteil: nur Navigation “nach unten” möglich 36 37 Darstellung von Bäumen: doppelt verkettete Liste Darstellung von Binärbäumen Darstellung mit angepassten doppelt verketteten Listen: Darstellung direkt mit linkem/rechtem Kind (doppelt verkettet): Wurzel Wurzel Vater Vater Kind Wert links Bruder Vater Kind Wert Kind Wert links Wert Vater rechts links Kind Wert Vater Bruder Kind Wert Vater Bruder Wert rechts Bruder Vater Vater Vater rechts Vater Vater Bruder Wert Kind Wert links Wert rechts links Wert Vater rechts links Wert rechts Bruder 38 Zusammenfassung 7 Fortgeschrittene Datenstrukturen Graphen Bäume 40 39