8. Übung zu Algorithmen I 15. Juni 2016

Ähnliche Dokumente
9. Übung Algorithmen I

9. Übung Algorithmen I

Graphentheorie Graphentheorie. Grundlagen Bäume Eigenschaften von Graphen Graphen-Algorithmen Matchings und Netzwerke

Programmierkurs Python

Programmierkurs Python II

Diskrete Strukturen Kapitel 4: Graphentheorie (Grundlagen)

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

15. Elementare Graphalgorithmen

Algorithmen und Datenstrukturen SS09. Foliensatz 16. Michael Brinkmeier. Technische Universität Ilmenau Institut für Theoretische Informatik

WS 2008/09. Diskrete Strukturen

WS 2009/10. Diskrete Strukturen

Für die Anzahl der Kanten in einem vollständigen Graphen (und damit für die maximale Anzahl von Kanten in einem einfachen Graphen) gilt:

Exkurs: Graphtraversierung

Algorithmen und Datenstrukturen 2-1. Seminar -

Customization (Zuschneiden)

Graphen und Bäume. A.1 Graphen

Algorithmen und Datenstrukturen 2

Bemerkung: Der vollständige Graph K n hat n(n 1)

Graphenalgorithmen I

10. Übungsblatt zu Algorithmen I im SS 2010

8 Diskrete Optimierung

Programmiertechnik II

Definition Gerichteter Pfad. gerichteter Pfad, wenn. Ein gerichteter Pfad heißt einfach, falls alle u i paarweise verschieden sind.

Programmiertechnik II

Digraphen, DAGs und Wurzelbäume

Graphentheorie. Eulersche Graphen. Eulersche Graphen. Eulersche Graphen. Rainer Schrader. 14. November Gliederung.

Grundbegriffe der Informatik

Relationen und DAGs, starker Zusammenhang

Quicksort ist ein Divide-and-Conquer-Verfahren.

Grundbegriffe der Informatik

Breitensuche BFS (Breadth First Search)

Nachbarschaft, Grad, regulär, Inzidenz

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Massive Parallelität : Neuronale Netze

Wintersemester 2004/ Januar Aus der Vorlesung sind Datenstrukturen zur Repräsentation von Wäldern disjunkter Mengen bekannt.

= n (n 1) 2 dies beruht auf der Auswahl einer zweielementigen Teilmenge aus V = n. Als Folge ergibt sich, dass ein einfacher Graph maximal ( n E = 2

Kap. 5: Graphen. Carsten Gutwenger Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund. 17. VO DAP2 SS

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

Karlsruher Institut für Technologie Institut für Theoretische Informatik. Klausur Algorithmen I

Lösungen zu Kapitel 5

1. Übung Algorithmen I

Felix Brandt, Jan Johannsen. Vorlesung im Wintersemester 2008/09

2. Repräsentationen von Graphen in Computern

Graphalgorithmen I. Simon Regnet. May 16, Universität Erlangen. Simon Regnet (Universität Erlangen) Graphalgorithmen I May 16, / 56

Übung Algorithmen I

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

Motivation Kap. 6: Graphen

Übung Algorithmen und Datenstrukturen

10. Übung Algorithmen I

Graphalgorithmen 2. Dominik Paulus Dominik Paulus Graphalgorithmen / 47

Übung Algorithmen I

WS 2008/09. Diskrete Strukturen

Codes und Informationsgehalt

Grundbegriffe der Informatik

Grundlagen Algorithmen und Datenstrukturen TUM Sommersemester 2011 (2) Dozent: Hanjo Täubig

Grundlagen: Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Tutorium Übungsaufgaben

Kapitel 5: Graphen und Graphalgorithmen

Ferienkurs Propädeutikum Diskrete Mathematik

Einheit 11 - Graphen

Übung Algorithmen I

Tutoraufgabe 1 (Suchen in Graphen):

Zweizusammenhang und starker Zusammenhang

Graphen. Graphen und ihre Darstellungen

Mergeable Heaps. C. Komusiewicz 7.1 Fibonacci-Heaps: Überblick 117

Das Briefträgerproblem

Kapitel 1. Einführung

Graphen. Leonhard Euler ( )

Grundbegriffe der Informatik

Das Heiratsproblem. Definition Matching

Tutorium 23 Grundbegriffe der Informatik (7. Sitzung)

2. Entsprechende Listen P i von Vorgängern von i 3. for i := 1 to n do. (ii) S i = Knoten 2 + 1}

Freie Bäume und Wälder

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

\ E) eines Graphen G = (V, E) besitzt die gleiche Knotenmenge V und hat als Kantenmenge alle Kanten des vollständigen Graphen ohne die Kantenmenge E.

Algorithmen und Datenstrukturen

Kap. 6.3: Traversieren von Graphen Kap. 6.4: Elementare Graphalgorithmen

Verkettete Datenstrukturen: Bäume

Einführung in die Informatik 2

2. November Gradfolgen Zusammenhang Kürzeste Wege. H. Meyerhenke: Algorithmische Methoden zur Netzwerkanalyse 37

Grundlagen: Algorithmen und Datenstrukturen

Diskrete Strukturen und Logik WiSe 2007/08 in Trier. Henning Fernau Universität Trier

Algorithmen und Datenstrukturen, FS17 Prof Dr Christian Tschudin

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 2

Am Dienstag, den 16. Dezember, ist Eulenfest. 1/45

Anwendungen von Graphen

Informatik I WS 07/08 Tutorium 24

Algorithmen und Datenstrukturen (WS 2007/08) 63

3. Die Datenstruktur Graph

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

Traversierung 1 / 16. P.F. Stadler & S. Will (Bioinf, Uni LE) ADS 2, V3 23. April / 16

Übungen zu Kombinatorik und Graphentheorie

6. Planare Graphen und Färbungen

Satz 324 Sei M wie oben. Dann gibt es für ein geeignetes k Konstanten c i > 0 und Permutationsmatrizen P i, i = 1,...

11. Übung zu Algorithmen I 6. Juli 2016

Algorithmen I - Tutorium 28 Nr. 11

Kürzeste Wege in Graphen. Orte mit Straßenverbindungen. Coma I Rolf Möhring

3 Klassifikation wichtiger Optimierungsprobleme

Grundbegriffe der Informatik

Transkript:

8. Übung zu Algorithmen I 15. Juni 2016 Lisa Kohl Lisa.Kohl@kit.edu (mit Folien von Julian Arz, Timo Bingmann, Sebastian Schlag, Christian Staudt und Christoph Striecks)

Nachtrag: Quicksort, alternative Partitionierung Function dpartition(a : Array of Element, l, r, k : N) : N p:= a[k], i:= l, j:= r swap(a[k], a[i]) while i j do if i < j then assert t < i : a[t] p t > j : a[t] > p while a[j] > p and i j do j if i j then swap(a[i], a[j]), swap(i, j), j + + else assert t < j : a[t] p t > i : a[t] > p while a[j] p and i j do j + + if i j then swap(a[i], a[j]), swap(i, j), j return i

Grundlagen der Graphentheorie

Graphen und Relationen Relation: M Menge, R M M Relation Schreibweise: x R y, falls (x, y) R Eigenschaften: reflexiv, symmetrisch, transitiv,... Gerichteter/Ungerichteter Graph: V Knoten E V V /E {{x, y} x, y V x y} Kanten G = (V, E) gerichteter/ungerichteter Graph

Teilbarkeitsgraph V = {1,..., 9} E = {(x, y) x, y V, x y und x y} 9 1 2 8 3 7 4 6 5

Der Hyperwürfel Q 3 V = {{0, 1} 3 } E = {{x, y} x, y V und x y {100, 010, 001}} 011 111 010 110 001 101 000 100 {x, y} E genau eine Ziffer von x und y verschieden

Knotengrad Knotengrad gerichtete Graphen Ausgangsgrad deg + (x) = {y V (x, y) E} Eingangsgrad deg (x) = {y V (y, x) E} Knotengrad ungerichtete Graphen Knotengrad deg(x) = {y V {x, y} E}

Handshaking Lemma Lemma: Ist G = (V, E) ein ungerichteter Graph, dann gilt deg(x) = 2 E. x V Beweis: betrachte M x = {(x, e) e E mit x e} 1. es gilt deg(x) = M x 2. es gilt M x M y = für x y 3. es gilt M x = 2 E x V deg(x) = 1. M x = 2. x V x V x V M x 3. = 2 E.

Handshaking Lemma Lemma: Ist G = (V, E) ein ungerichteter Graph, dann gilt deg(x) = 2 E. x V Beweis: betrachte M x = {(x, e) e E mit x e} 1. es gilt deg(x) = M x 2. es gilt M x M y = für x y 3. es gilt M x = 2 E x V deg(x) = 1. M x = 2. x V x V x V M x 3. = 2 E. Korollar: In jedem Graph gibt es eine gerade Anzahl von Knoten mit ungeradem Knotengrad.

Adjazenz- und Inzidenzmatrix G = (V, E) gerichteter Graph Adjazenzmatrix A {0, 1} V V mit a i,j = 1 (i, j) E Inzidenzmatrix 1 falls y V : j = (i, y) B {0, 1} V E mit b i,j = 1 falls x V : j = (x, i) 0 sonst

Beispiel Adjazenz- und Inzidenzmatrix 1 1 2 2 4 3 3 6 4 5 7 0 1 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 A = 0 1 0 1 0 1 0 0 0 0 B = 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 0 1 0 1 5

Beispiel Adjazenz- und Inzidenzmatrix 6 1 1 2 2 4 3 4 5 7 3 5 3 2 0 1 0 2 3 1 0 0 B B T = 0 1 3 1 1 1 0 1 3 1 0 0 1 1 2 B B T (i, j) = { deg + (i) + deg (i) {e E e = (i, j) e = (j, i)} falls i = j sonst

Graphen als Matrizen ungerichteter Graph symmetrische Adjazenzmatrix A = A T 3 1 2 0 1 0 1 A = 1 0 1 0 0 1 0 0 1 0 0 0 4

Wiederholung: DAG Directed Acyclic Graph G = (V, E) DAG G gerichtet und G enthält keine Zyklen 0 NEIN Schleife ist auch ein Kreis!

Wiederholung: DAG Directed Acyclic Graph G = (V, E) DAG G gerichtet und G enthält keine Zyklen 0 1 JA eine Wurzel, ein Blatt

Wiederholung: DAG Directed Acyclic Graph G = (V, E) DAG G gerichtet und G enthält keine Zyklen 3 2 0 1 NEIN Kreis!

Wiederholung: DAG Directed Acyclic Graph G = (V, E) DAG G gerichtet und G enthält keine Zyklen 6 3 2 4 0 1 5 JA sogar ein gewurzelter Baum: Knoten 4 Eingangsgrad 0, sonst Eingangsgrad 1

Wiederholung: DAG Directed Acyclic Graph G = (V, E) DAG G gerichtet und G enthält keine Zyklen 6 3 2 4 0 1 5 JA zwei Zusammenhangskomponenten, drei Wurzeln jeder DAG hat eine Wurzel!

Graphen als Matrizen G = (V, E) DAG G gerichtet und G enthält keine Zyklen DAGs lassen sich als obere Dreiecksmatrix repräsentieren 4 0 0 0 0 0 0 0 0 0 0 A = 1 1 0 0 0 0 0 1 0 1 3 5 1 1 0 0 0 1 2

Graphen als Matrizen G = (V, E) DAG G gerichtet und G enthält keine Zyklen DAGs lassen sich als obere Dreiecksmatrix repräsentieren 1 0 0 0 0 0 0 0 0 0 0 A = 1 1 0 0 0 0 0 1 0 1 2 3 1 1 0 0 0 0 1 1 0 0 0 0 0 1 1 4 5 A = 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0

Graphen als Matrizen pro Zusammenhangskomponente ein Block in der Matrix 0 0 0 0 0 1 0 0 0 0 1 0 A = 0 1 0 0 0 0 0 0 1 0 0 0 4 5 1 0 0 0 1 0 0 1 0 0 0 0 0 3 2 6

Graphen als Matrizen pro Zusammenhangskomponente ein Block in der Matrix 0 0 0 0 0 1 0 0 0 0 1 0 A = 0 1 0 0 0 0 0 0 1 0 0 0 4 1 5 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 3 2 6 A = 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0

Wege, Kreise und Zusammenhang G = (V, E) ungerichter Graph (v 0,..., v n ) Pfad {v i 1, v i } E für alle i {1,... n} x, y V verbindbar es existiert ein Pfad (x,..., y) G zusammenhängend alle x, y V verbindbar Pfad (v 0,..., v n ) Zyklus/Kreis v 0 = v n

Eulersche und Hamiltonsche Kreise Ein Zyklus heißt Eulersch, wenn er alle Kanten des Graphen genau einmal enthält. Ein Zyklus heißt Hamiltonsch, wenn er alle Knoten des Graphen genau einmal enthält (Beginn und Ende einmal gezählt). Ein Graph heißt Eulersch/Hamiltonsch, wenn er einen Eulerschen/Hamiltonschen Kreis enthält.

Eulersche und Hamiltonsche Kreise Ein Zyklus heißt Eulersch, wenn er alle Kanten des Graphen genau einmal enthält. Ein Zyklus heißt Hamiltonsch, wenn er alle Knoten des Graphen genau einmal enthält (Beginn und Ende einmal gezählt). Ein Graph heißt Eulersch/Hamiltonsch, wenn er einen Eulerschen/Hamiltonschen Kreis enthält.

Eulersche Kreise - Anwendungsbeispiel Gibt es einen Weg, der jede Brücke genau einmal verwendet?

Satz von Euler (Graphen) Satz: Ein ungerichteter Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben.

Satz von Euler (Graphen) Satz: Ein ungerichteter Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. Beweis: = G offensichtlich zusammenhängend

Satz von Euler (Graphen) Satz: Ein ungerichteter Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. Beweis: = G offensichtlich zusammenhängend Pfad muss jeden Knoten durch eine Kante betreten und durch andere Kante verlassen

Satz von Euler (Graphen) Satz: Ein ungerichteter Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. Beweis: = G offensichtlich zusammenhängend Pfad muss jeden Knoten durch eine Kante betreten und durch andere Kante verlassen jede Kante genau einmal verwendet Knotengrad gerade

Satz von Euler (Graphen) Satz: Ein ungerichteter Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. Beweis: = betrachte Pfad P = (v 0,..., v r ) maximaler Länge mit {v i 1, v i } {v j 1, v j } für alle i j {1,... n} (keine Kante zweifach) Behauptung 1: P ist ein Zyklus Annahme: v 0 v r {{v 0, v} v V, {v 0, v} Teil von P} ungerade es existiert e E mit e nicht Teil von P P kann mit e verlängert werden v 0 = v r

Satz von Euler (Graphen) Satz: Ein ungerichteter Graph G = (V, E) mit E ist genau dann Eulersch, wenn G zusammenhängend ist und alle Knoten geraden Knotengrad haben. Beweis: = betrachte Pfad P = (v 0,..., v r ) maximaler Länge mit (v i 1, v i ) (v j 1, v j ) für alle i j {1,... n} (keine Kante zweifach) Behauptung 2: P enthält alle Kanten aus E Annahme: E := {e E e nicht auf P} G := (V, E ) G zusammenhängend v V auf P mit deg G (v) > 0 alle Knoten in G haben geraden Knotengrad existiert Zyklus in G der v enthält (wie Behauptung 1) P kann um den Zyklus verlängert werden P ist Eulersch

Eulersche Kreise - Anwendungsbeispiel Gibt es einen Weg, der jede Brücke genau einmal verwendet? Nein!

Breitensuche 6 3 2 4 0 1 5 www.cs.usfca.edu/~galles/visualization/bfs.html

Breitensuche 6 3 2 4 0 1 5 www.cs.usfca.edu/~galles/visualization/bfs.html

Beispielanwendung Breitensuche Problem: Ist ein (zusammenhängender) Graph bipartit? Lösung in O( E ): Knoten schwarz oder rot einfärben während der Breitensuche

Beispielanwendung Breitensuche Procedure isbipartite(g=(v, E) : Graph, s: node) Q=[ ] : Queue set color to red Q.enqueue(s); label s as visited color s while Q is not empty do v = Q.dequeue() switch color foreach w : {v, w} E do if w not visited then Q.enqueue(w); label w as visited color w else if w has same color as v return false return true