10. Übung Algorithmen I

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

8 Diskrete Optimierung

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

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

Algorithmische Methoden zur Netzwerkanalyse

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

WS 2009/10. Diskrete Strukturen

Graphen: Datenstrukturen und Algorithmen

Fully dynamic algorithms for the single source shortest path problem.

Algorithmen II Vorlesung am

Sortierte Folgen 250

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

Algorithmen und Datenstrukturen 2

Breiten- und Tiefensuche in Graphen

4 Greedy-Algorithmen (gierige Algorithmen)

Algorithmen und Datenstrukturen (WS 2007/08) 63

Vorlesung 3 MINIMALE SPANNBÄUME

Anmerkungen zur Übergangsprüfung

Das Briefträgerproblem

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

Maximaler Fluß und minimaler Schnitt. Von Sebastian Thurm

Datenstrukturen. Mariano Zelke. Sommersemester 2012

16. All Pairs Shortest Path (ASPS)

Modelle und Statistiken

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

Praktikum Planare Graphen

Kapitel MK:IV. IV. Modellieren mit Constraints

Branch-and-Bound. Wir betrachten allgemein Probleme, deren Suchraum durch Bäume dargestellt werden kann. Innerhalb des Suchraums suchen wir

Die in den Suchverfahren konstruierten Graphen waren zusammenhängend und enthielten keine Kreise. Also vereinbaren wir:

Suchen und Sortieren Sortieren. Heaps

13. Binäre Suchbäume

Internet Routing. SS 2012 Grundlagen der Rechnernetze Internetworking

Teil III: Routing - Inhalt I. Literatur. Geometric Routing. Voraussetzungen. Unit Disk Graph (UDG) Geometric Routing 29

S=[n] Menge von Veranstaltungen J S kompatibel mit maximaler Größe J

Punktbeschriftung in Dynamischen Karten

Seminarvortag zum Thema Virtual Private Network Design im Rahmen des Seminars Network Design an der Universität Paderborn

Datenbankanwendung. Prof. Dr.-Ing. Sebastian Michel TU Kaiserslautern. Wintersemester 2014/15.

Grundlagen der Programmierung 2. Bäume

Algorithmen und Datenstrukturen Suchbaum

Algorithmische Methoden der Netzwerkanalyse

Algorithmen für Routenplanung

2 Lösungen "Peptide de novo Sequencing"

Lange Nacht der Wissenschaft. Ein Klassiker. Die Mathematik der Kürzesten Wege

Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche. Suche in Spielbäumen. KI SS2011: Suche in Spielbäumen 1/20

Algorithmen und Datenstrukturen 2

Algorithmentheorie Maximale Flüsse

2.5. VERBINDUNGSNETZWERKE GESTALTUNGSKRITERIEN DER NETZWERKE TOPOLOGIE ALS GRAPH. Vorlesung 5 TOPOLOGIE: DEFINITIONEN : Sei G = (V, E) ein Graph mit:

Datenstrukturen & Algorithmen

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen:

Klassische Themen der Computerwissenschaft Constraint Programming: Exercises. Gruppe: 100. Inhaltsverzeichnis

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

Algorithmen für Routenplanung 11. Vorlesung, Sommersemester 2012 Daniel Delling 6. Juni 2012

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Highway Hierarchies. Kristian Dannowski, Matthias Hoeschel

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

Interaktive Visualisierung der Projektmanagement-Prozesse

Scheduling und Lineare ProgrammierungNach J. K. Lenstra, D. B. Shmoys und É.

Kombinatorische Optimierung

Seminar Komplexe Objekte in Datenbanken

Übungsblatt 8- Lösungsvorschlag

Grundlagen der Künstlichen Intelligenz

Gliederung. Definition Wichtige Aussagen und Sätze Algorithmen zum Finden von Starken Zusammenhangskomponenten

Approximationsalgorithmen

Algorithmen und Datenstrukturen

Synergien aus Graph-Theorie und Data-Mining für die Analyse von Netzwerkdaten

Routing Information Protocol (RIP), Open Shortest Path First (OSPF)

Vorlesung Algorithmische Geometrie. Streckenschnitte. Martin Nöllenburg

Algorithmische Methoden zur Netzwerkanalyse

Kostenmaße. F3 03/04 p.188/395

Netzwerkmodelle. Seminar Netzwerkanalyse. Sommersemester 2005 Jasmine Metzler

Maximizing the Spread of Influence through a Social Network

Einführung in die Informatik

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum

Data Cube. Aggregation in SQL. Beispiel: Autoverkäufe. On-line Analytical Processing (OLAP) 1. Einführung. 2. Aggregation in SQL, GROUP BY

Verteilte Systeme. Routing. Leon Aaron Kaplan ICT. (Funkfeuer) Institut für Computertechnik. Institute of Computer Technology

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf

Guten Morgen und Willkommen zur Saalübung!

Die k kürzesten Wege in gerichteten Graphen

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

3. Übung Algorithmen I

Kapitel MK:IV. IV. Modellieren mit Constraints

Motivation. Formale Grundlagen der Informatik 1 Kapitel 10. Motivation. Motivation. Bisher haben wir mit TMs. Probleme gelöst/entschieden/berechnet.

1 Induktiver Aufbau von Graphen

Grundbegriffe der Informatik

Property Testing in Graphen mit beschränktem Maximalgrad

Methoden der Netzwerkanalyse

Kapitel 6: Graphalgorithmen Gliederung

1 topologisches Sortieren

Grundbegriffe der Informatik

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

Formale Systeme. Binary Decision Diagrams. Prof. Dr. Bernhard Beckert WS 2010/2011 KIT INSTITUT FÜR THEORETISCHE INFORMATIK

Graphen. Seminar Bioinformatik. Franziska Schwabe. 3. Juli Fakultät Statistik TU Dortmund 1 / 45

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

HEUTE. Datenstrukturen im Computer. Datenstrukturen. Rekursion. Feedback Evaluation. abstrakte Datenstrukturen

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

Das Dilemma des Einbrechers Wer die Wahl hat, hat die Qual!

Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9

SS 2005 FAU Erlangen Eine Wegeplanungs-Strategie. Jeremy Constantin, Michael Horn, Björn Gmeiner

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Transkript:

INSTITUT FÜR THEORETISCHE INFORMATIK 1 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft Institut für Theoretische www.kit.edu Informatik

Bäume 2

Charakterisierung von Bäumen Definition: Ein ungerichteter Graph heißt Baum, wenn es von jedem Knoten zu jedem anderen Knoten genau einen Kantenweg gibt. Satz: Für einen ungerichteten Graphen G = (V, E) sind äquivalent: 1 G ist ein Baum. 2 G ist zusammenhängend und E = V 1. 3 G ist zusammenhängend und kreislos. 4 G ist kreislos und E = V 1. 5 G ist maximal kreislos: G ist kreislos und jede zusätzliche Kante zwischen nicht-adjazenten Knoten ergibt einen Kreis. 6 G ist minimal zusammenhängend: G ist zusammenhängend und bei Entfernen einer beliebige Kante zerfällt G. 3

Satz von Cayley Ist G = (V, E) ein zusammenhängender ungerichteter Graph, dann heißt ein Untergraph (V, E ) mit E E ein G aufspannender Baum, wenn dieser ein Baum ist. Satz von Cayley Im vollständigen Graph K n gibt es genau n n 2 verschiedene K n aufspannende Bäume. Beispiel: K 4 hat folgende 16 aufspannende Bäume: 4

Kürzeste Wege in Graphen 5

Bellman-Ford-Algorithmus Wiederholung Ausgehend von einem Knoten s berechne kürzesten Wege-Baum 1: procedure BellmanFord(s : NodeId) : NodeArray NodeArray 2: d =,..., : NodeArray of R {, } 3: parent =,..., : NodeArray of NodeId 4: d[s] := 0; parent[s] := s 5: for i := 1 to n 1 do 6: forall e E do relax(e) 7: 8: forall e = (u, v) E do 9: if d[u] + c(e) < d[v] then Error: "Graph contains negative cycle" 10: return (d, parent) Erinnerung Kante (u, v) relaxieren: 1 wenn d[u] + c(u, v) < d[v] dann d[v] := d[u] + c(u, v), parent[v] := u 6

Bellman-Ford vs Dijkstra Dijkstra: greedy wählt Knoten mit minimaler Distanz und relaxiert ausgehende Kanten Bellman-Ford: nicht greedy relaxiert alle Kanten n 1 mal Bellman-Ford funktioniert mit negativen Kantengewichten Bellman-Ford funktioniert nicht, falls G negativen Kreis enthält aber detektiert solche Kreise und bricht ab 7

Durchmesser ungerichteter Graphen 8

Durchmesser ungerichteter Graphen Intuitiv: Größter Abstand zweier Knoten im Graph. Frage: Was ist der Abstand zweier Knoten im Graph? Antwort: Länge des kürzesten Pfades zwischen zwei Knoten. Frage: Was ist die Länge eines Pfades? Antwort: Die Anzahl Kanten des Pfades. H B G A D E F C I 9

Durchmesser ungerichteter Graphen Intuitiv: Größter Abstand zweier Knoten im Graph. Frage: Was ist der Abstand zweier Knoten im Graph? Antwort: Länge des kürzesten Pfades zwischen zwei Knoten. Frage: Was ist die Länge eines Pfades? Antwort: Die Anzahl Kanten des Pfades. H B G A D E F C Ein Pfad von C nach G, Länge = 4 I 9

Durchmesser ungerichteter Graphen Intuitiv: Größter Abstand zweier Knoten im Graph. Frage: Was ist der Abstand zweier Knoten im Graph? Antwort: Länge des kürzesten Pfades zwischen zwei Knoten. Frage: Was ist die Länge eines Pfades? Antwort: Die Anzahl Kanten des Pfades. H B G A D E F C Kürzester Pfad von C nach G, Länge = 3 I 9

Durchmesser ungerichteter Graphen Intuitiv: Größter Abstand zweier Knoten im Graph. Frage: Was ist der Abstand zweier Knoten im Graph? Antwort: Länge des kürzesten Pfades zwischen zwei Knoten. Frage: Was ist die Länge eines Pfades? Antwort: Die Anzahl Kanten des Pfades. H B G A D E F C Abstand von C und G, Länge = 3 I 9

Durchmesser ungerichteter Graphen Intuitiv: Größter Abstand zweier Knoten im Graph. Frage: Was ist der Abstand zweier Knoten im Graph? Antwort: Länge des kürzesten Pfades zwischen zwei Knoten. Frage: Was ist die Länge eines Pfades? Antwort: Die Anzahl Kanten des Pfades. H B G A D E F C Kürzester Pfad von I nach H, Länge = 4 I 9

Durchmesser ungerichteter Graphen Intuitiv: Größter Abstand zweier Knoten im Graph. Frage: Was ist der Abstand zweier Knoten im Graph? Antwort: Länge des kürzesten Pfades zwischen zwei Knoten. Frage: Was ist die Länge eines Pfades? Antwort: Die Anzahl Kanten des Pfades. H B G A D E F C Kürzester Pfad von I nach H, Länge = 4 Abstand von I und H = 4 I 9

Durchmesser ungerichteter Graphen Intuitiv: Größter Abstand zweier Knoten im Graph. Frage: Was ist der Abstand zweier Knoten im Graph? Antwort: Länge des kürzesten Pfades zwischen zwei Knoten. Frage: Was ist die Länge eines Pfades? Antwort: Die Anzahl Kanten des Pfades. H B G A D E F Kürzester Weg von I nach H, Länge = 4 Abstand von I und H = 4 Größter Abstand Durchmesser = 4 C I 9

Durchmesser ungerichteter Graphen Mathematische Definition mit ( ) Durchmesser := max min P u,v V P P(u,v) P(u, v) ist Menge aller Pfade zwischen u und v P ist Anzahl der Kanten eines Pfades P 10

Durchmesser ungerichteter Graphen Algorithmus Idee: 1: D = 0 : N 0 2: for each u V do 3: Berechne kürzeste Pfade von u zu allen v V \{u} 4: D := max{d, größte gefundene Pfadlänge} 5: return D Laufzeit: O(n Laufzeit Zeile 3) 11

Durchmesser ungerichteter Graphen Teilalgorithmus: Alle kürzesten Pfade von u nach v V \{u} in ungewichteten Graphen: Breitensuche plus Nachbearbeitung: 1: function maxabstand(u: NodeID): Abstand 2: (, d) := bfs(u) 3: result := max v V \{u} d[v] 4: return result 12

Durchmesser ungerichteter Graphen Teilalgorithmus: Alle kürzesten Pfade von u nach v V \{u} Breitensuche plus Nachbearbeitung: 1: function maxabstand(u: NodeID): Abstand 2: (, d) := bfs(u) 3: result := max v V \{u} d[v] 4: return result Laufzeit: BFS braucht O(m) Maximum berechenen braucht O(n) Gesamt O(n + m), falls zusammenhängend = O(m), da n m 13

Durchmesser ungerichteter Graphen Algorithmus Fertiger Algorithmus: 1: D = 0 : N 0 2: for each u V do 3: D := max{d, maxabstand(u)} 4: return D Laufzeit: O(n Laufzeit Zeile 3) = O(nm), für zusammenhängende, ungewichtete Graphen 14

k-core Decomposition 15

k-core Der größte knoteninduzierte Teilgraph G = (V, E ) von G mit v V : Grad(v) k ist der k-core von G. 4 4 5 3 5 3 6 2 6 2 1 ist 2-core von 1 16

k-core Der größte knoteninduzierte Teilgraph G = (V, E ) von G mit v V : Grad(v) k ist der k-core von G. 4 5 3 5 3 6 2 6 2 ist 3-core von 1 16

k-core Der größte knoteninduzierte Teilgraph G = (V, E ) von G mit v V : Grad(v) k ist der k-core von G. 4 5 3 6 2 ist 4-core von 1 16

k-core Core Decomposition source: http://journal.frontiersin.org/article/10.3389/fnagi.2012.00013/ 17

Berechnung des k-cores Procedure core(g = (V, E), k : N) G = (V, E ) := G while ( v V with Grad G (v) < k) Remove v from V and all its incident edges from E return G Frage: Laufzeit für diesen Algorithmus? a) O(n + m) b) O(n log n + m) c) O ( n 2 + m ) 18

Berechnung des k-cores Procedure core(g = (V [1..n + 1], E[1..m]), k : N) // Adjazenzfeld Q : FIFO d : Array[1..n] of N for (v := 1; v n; + + v) d[v] := V [v + 1] V [v] if (d[v] < k) Q.pushBack(v) while (!Q.empty()) v := Q.popFront() for (e := V [v]; e < V [v + 1]; + + e) w := E[e] d[w] if (d[w] = k 1) Q.pushBack(w) return subgraph induced by the nodes v with d[v] k 19

Berechnung des k-cores Procedure core(g = (V [1..n + 1], E[1..m]), k : N) // Adjazenzfeld Q : FIFO d : Array[1..n] of N for (v := 1; v n; + + v) d[v] := V [v + 1] V [v] if (d[v] < k) Q.pushBack(v) while (!Q.empty()) v := Q.popFront() for (e := V [v]; e < V [v + 1]; + + e) w := E[e] d[w] if (d[w] = k 1) Q.pushBack(w) return subgraph induced by the nodes v with d[v] k Laufzeit: O(n + m) 19

k-core Decomposition Procedure coredec(g = (V, E)) deg : Array[1..n] of N // Array für den Knotengrad, mit 0 initialisiert active : Array[1..n] of {0, 1} // Array für aktive Knoten, mit 1 initialisiert C : Array[1..n] of N // Array für die Core-Struktur, mit 0 initialisiert Q : Addressable Priority Queue foreach {u, v} E do // Knotengrad berechnen deg(u) += 1 deg(v) += 1 foreach v V do // Prioritätsliste initialisieren Q.insert(v, deg(v)) while (!Q.empty()) v := Q.extractMin() C[v] := deg(v) // Core-Nummer zuweisen active(v) := 0 // Knoten wurde entfernt foreach {v, u} E and active[v] do // Knotengrad der Nachbarn updaten deg[u] -= 1 Q.decreaseKey(u, deg[u]) return C 20

k-core Decomposition: Laufzeit O((n + m) log(n)) mit Binary Heap als Priority Queue aber: Keys sind ganzzahlig (Knotengrade) und beschränkt (< n) also Implementierung mit Bucket Priority Queue in O(n + m) möglich Details siehe Lösung zu Übungsblatt 7 21