9. Übungsblatt zu Algorithmen I im SoSe 2016

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

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

Algorithmen II Vorlesung am

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

4. Kreis- und Wegeprobleme Abstände in Graphen

Effiziente Algorithmen und Datenstrukturen: Kürzeste Wege

Algorithmen und Datenstrukturen 2

Aufgabe 4.2 Sei G = (V, E, l) ein ungerichteter, gewichteter und zusammenhängender Graph.

Das Briefträgerproblem

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

Datenstrukturen & Algorithmen

Kombinatorische Optimierung

Algorithmen und Datenstrukturen in der Bioinformatik Viertes Übungsblatt WS 05/06 Musterlösung

Wiederholung zu Flüssen

Identifizierung negativer Zyklen in gerichteten Graphen

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.

SS11 Effiziente Algorithmen 5. Kapitel: Dynamische Programmierung

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

11. Übungsblatt zu Algorithmen I im SS 2010

ADS: Algorithmen und Datenstrukturen 2

Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6

Minimal spannende Bäume

3. Musterlösung. Problem 1: Boruvka MST

Routing Algorithmen. Begriffe, Definitionen

1. Einleitung wichtige Begriffe

Effiziente Algorithmen I

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

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

Minimal spannender Baum

Grundbegriffe der Informatik

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

Westfählische Wilhelms-Universität. Eulersche Graphen. Autor: Jan-Hendrik Hoffeld

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

Grundbegriffe der Informatik

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

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

6. Übung zur Linearen Optimierung SS08

Kapitel 3: Untere Schranken für algorithmische Probleme Gliederung

Algorithmen II Vorlesung am

DATENSTRUKTUREN UND ALGORITHMEN

Universität des Saarlandes

Übung zur Vorlesung Algorithmische Geometrie

Minimal spannende Bäume

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Übung zur Vorlesung Berechenbarkeit und Komplexität

Algorithmen und Datenstrukturen 2

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

Vollständige Induktion

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

WS 2009/10. Diskrete Strukturen

Hackenbusch und Spieltheorie

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

Graphen: Datenstrukturen und Algorithmen

Vorlesung 4 BETWEENNESS CENTRALITY

Graphentheorie. Maximale Flüsse. Maximale Flüsse. Maximale Flüsse. Rainer Schrader. 31. Oktober Gliederung. sei G = (V, A) ein gerichteter Graph

Anmerkungen zur Übergangsprüfung

Christian Schulz und Johannes Singler

Graphalgorithmen 2. Oleksiy Rybakov. 3. Juni Betreuer: Tobias Werth, Daniel Brinkers

Klausur Informatik B April Teil I: Informatik 3

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

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung

16. All Pairs Shortest Path (ASPS)

Kapitel 3. Natürliche Zahlen und vollständige Induktion

Vorkurs Mathematik und Informatik Mengen, natürliche Zahlen, Induktion

Guten Morgen und Willkommen zur Saalübung!

Single Source Sortest Path Negative Kreise All-Pair Shortest Path Problem Minimum Mean Cycle Zusammenfassung. Shortest Paths

ADS: Algorithmen und Datenstrukturen 2

Maximale s t-flüsse in Planaren Graphen

Mathematik II für Studierende der Informatik. Wirtschaftsinformatik (Analysis und lineare Algebra) im Sommersemester 2016

Dynamische Programmierung. Problemlösungsstrategie der Informatik

2 Tiefen- und Breitensuche

Algorithmen und Datenstrukturen Kapitel 10

Algorithmentheorie Maximale Flüsse

WS 2009/10. Diskrete Strukturen

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Fully dynamic algorithms for the single source shortest path problem.

Wir betrachten das folgende nicht gerichtete Netzwerk:

Datenstrukturen. Mariano Zelke. Sommersemester 2012

14. Rot-Schwarz-Bäume

Universität Karlsruhe Institut für Theoretische Informatik. Klausur: Informatik III

Technische Universität München Sommer 2016 Prof. J. Esparza / Dr. M. Luttenberger, S. Sickert 2. Mai HA-Lösung. TA-Lösung

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

Proseminar Online Algorithmen, Prof. Dr. Rolf Klein

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

4.7 Der Algorithmus von Dinic für maximalen Fluss

Probeklausur zur Vorlesung Berechenbarkeit und Komplexität

Prüfungsklausur Operations Research,

Diskrete Strukturen Kapitel 1: Einleitung

Durchschnitt von Matroiden

Kapiteltests zum Leitprogramm Binäre Suchbäume

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

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

Vorlesung 3 MINIMALE SPANNBÄUME

Proseminar Kodierverfahren bei Dr. Ulrich Tamm Sommersemester 2003 Thema: Codierung von Bäumen (Prüfer Codes...)

Randomisierte Algorithmen 2. Erste Beispiele

Überblick. TSP Vergleich der Lösungen. Das Travelling Salesman Problem. Nearest-Neighbor Heuristik für TSP

Algorithmische Bioinformatik 1

Vervollständigung Lateinischer Quadrate

Dank. Grundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I. Probleme über Sprachen. Teil II.

Institut für Mathematik Geometrie und Lineare Algebra J. Schönenberger-Deuel. Aufgabe 1. Wir geben nur zwei von sehr vielen möglichen Strategien.

Transkript:

Karlsruher Institut für Technologie Institut für Theoretische Informatik Prof. Dr. Dennis Hofheinz Lukas Barth, Lisa Kohl 9. Übungsblatt zu Algorithmen I im SoSe 06 https//crypto.iti.kit.edu/index.php?id=algo-sose6 {lisa.kohl,lukas.barth}@kit.edu Aufgabe (Dijkstra, 4 Punkte) Musterlösungen Wir beschäftigen uns mit dem Algorithmus von Dijkstra aus der Vorlesung. Sei ein Graph G = (V, E) wie unten dargestellt. Führen Sie Dijkstras Algorithmus auf G aus. Sie können die Darstellung von G benutzen, um die Ergebnisse nach der Ausführung darin einzutragen. Schreiben Sie dazu in jeden Knoten v V rechts vom Doppelpunkt die Länge des kürzesten Pfads vom Startknoten s aus gesehen und links vom Doppelpunkt den Vorgänger auf diesem kürzesten Pfad. Zeichnen Sie den Baum der kürzesten Wege von s zu allen anderen Knoten aus V in G ein. Geben Sie die Reihenfolge der Knoten an, in der sie als scanned markiert werden. Geben Sie außerdem für jeden Knoten v V alle Zwischenwerte d[v] und parent[v] an, die während Ausführung des Algorithmus angenommen werden. Darstellung von G a 0 s b 7 c d 6 6e e f Musterlösung Die Knoten werden in der Reihenfolge s, d, c, e, f, b, a als scanned markiert. Weiter gilt für die Werte von d und parent d[s] = 0 und parent[s] = s während der gesamten Ausführung d[a] = und parent[s] = nach Initialisierung, d[a] = 0 und parent[s] = s nach Relaxieren der von s ausgehenden Kanten, d[a] = 9 und parent[s] = c nach Relaxieren der von c ausgehenden Kanten und schließlich d[a] = 8 und parent[s] = b nach Relaxieren der von b ausgehenden Kanten d[b] =,, 7 und parent[b] =, c, e

d[c] =,, 4 und parent[b] =, s, d d[d] =, und parent[b] =, s d[e] =, 7, und parent[b] =, d, c d[f] =, 7, 6 und parent[b] =, d, e a b8 0 s s0 b e7 7 c d4 d s 6 6e e c f e6 Aufgabe (Unzuverlässige Kommunikation, 4 Punkte) Sie sind Administrator eines Computernetzwerks bestehend aus n Rechnern und Netzwerkverbindungen zwischen diesen. Leider sind die Netzwerkverbindungen nicht absolut zuverlässig Jede Verbindung zwischen zwei Rechnern a und b hat eine Wahrscheinlichkeit 0 < p (a,b) <, dass ein auf dieser Verbindung gesendetes Paket nicht ankommt. Die Verbindungen sind gerichtet, das heißt es kann sein, dass p (a,b) p (b,a) gilt. Ihre Aufgabe ist es nun, zwischen zwei gegebenen Rechnern einen möglichst zuverlässigen Pfad zu finden. Geben Sie hierfür einen möglichst effizienten Algorithmus an, und begründen Sie kurz, warum dieser funktioniert. Musterlösung Das Problem wird natürlich als Graph modelliert Hier stehen Knoten für Rechner und Kanten für Verbindungen zwischen Rechnern. Die Kantengewichte c E (0, ) symbolisieren dabei die Wahrscheinlichkeit, dass ein Paket auf der entsprechenden Kante erfolgreich versendet wird, also c((a, b)) = p (a,b). Sei nun ein Startrechner S und ein Zielrechner T gegeben. Wir führen einen modifizierten Algorithmus von Dijkstra aus Die vorläufigen Distanzen d[v] stehen nun für die Zuverlässigkeit des vorläufig besten gefundenen Pfades von S nach v und werden mit 0 (statt mit ) initialisiert (Ausnahme d[s] = ). Das parent-feld funktioniert wie in Dijkstras Algorithmus und speichert den Vorgänger im vorläufig besten Pfad. Eine Kante (u, v) wird relaxiert, indem die vorläufige Zuverlässigkeit von S nach u mit c((u, v)) multipliziert wird, und die vorläufige Zuverlässigkeit von S nach v (zusammen mit dem parent-zeiger) aktualisiert wird, falls ein besserer Pfad gefunden wurde, also d[v] = max{d[v], d[u] c((u, v))}

Die Prioritätswarteschlange ist in unserem Fall ein Max-Heap, der die vorläufige Zuverlässigkeit d[v] als Schlüssel verwendet. Der Korrektheitsbeweis funktioniert analog zu Dijkstras Algoritmus Zunächst ist es wichtig zu sehen, dass in dem Moment, in dem ein Knoten v aus der Prioritätswarteschlange entfernt wird, kein Pfad mit höherer Zuverlässigkeit als d[v] von S nach v mehr existieren kann. Wir beweisen dies mittels Induktion über die Länge des optmialen S v-pfades Für Länge ist die Behauptung trivialerweise wahr Der Pfad besteht nur aus S, d[s] =, und besser wird es nicht. Gelte nun also die Behauptung für eine beliebige, aber feste Pfadlänge l. Sei der Pfad P = S,..., u, v ein optimaler S v-pfad der Länge l +. Wenn zu dem Zeitpunkt, zu dem v aus dem Heap genommen wird, parent[v] = u gilt, dann ist d[v] per Definition optimal. Angenommen also, dass parent[v] = w u gilt, und dass d[v] = d[w] c((w, v)) < d[u] c((u, v)). Wir wissen, dass die Länge des optimalen S u-pfades P = S,... u hier l ist (da P eine Länge von l + hat). Nach Induktionsvorraussetzung wurde also d[u] korrekt berechnet, und insbesondere muss d[u] > d[v] gelten. Damit wurde aber u bereits vor v aus dem Max-Heap entfernt, die Kante (u, v) wurde relaxiert und d[v] wurde korrekterweise auf d[u] c((u, v)) gesetzt. Somit kann d[v] > d[u] c((u, v)) nicht mehr gelten. Mit dieser Einsicht ist es einfach, die Korrektheit des gesamten Algorithmus zu sehen Für jeden Knoten v gilt, dass falls es überhaupt einen S v-pfad gibt, v irgendwann in den Max-Heap eingefügt, und somit v auch irgendwann aus dem Max-Heap entfernt wird. Damit wird der optimale Pfad zu jedem von S erreichbaren Knoten errechnet. Für alle nicht erreichbaren Knoten bleibt d[v] = 0 gesetzt, was die Nichterreichbarkeit korrekt abbildet. Das Finden eines optimalen S T -Pfades beschränkt sich danach darauf, die parent-einträge korrekt von T zu S zurückzuverfolgen. Aufgabe (Verbesserter Bellman-Ford-Algorithmus, + 4 Punkte) Gegeben sei folgende Verbesserung des Bellman-Ford-Algorithmus Im gerichteten Graphen G = (V, E) weisen wir zunächst den Knoten eine beliebige aber feste Ordnung zu. Die Knoten seien nun V = v, v, v,... v n. Nun können wir E in zwei Teile E f E b = E aufteilen, sodass E f = {(v i, v j ) E i < j} und E b = {(v i, v j ) E i > j} gilt. Intuitiv enthält E f also alle Kanten, die von einem kleineren auf einen größeren Knoten zeigen (E b entsprechend umgekehrt). Weiterhin sei folgende Änderung des Bellman-Ford-Algorithmus gegeben Anstatt in jedem der n Durchläufe alle Kanten in irgendeiner Reihenfolge zu relaxieren, gehen wir in jedem Durchlauf wie folgt vor Wir betrachten die Knoten in der Reihenfolge v, v, v,... v n und relaxieren dabei für jeden Knoten alle Kanten in E f, die den Knoten verlassen. Danach betrachten wir alle Knoten in der Reihenfolge v n, v n,... v und relaxieren dabei für jeden Knoten alle Kanten in E b, die den Knoten verlassen. a) Zeigen Sie G f = (V, E f ) und G b = (V, E b ) sind jeweils DAGs. b) Zeigen Sie Die veränderte Version des Bellman-Ford-Algorithmus berechnet bereits nach n/ Schritten das Ergebnis, d.h. einen kürzesten s t-pfad oder (mindestens) einen negativen Kreis. Tipp Überlegen Sie sich, was der Algorithmus auf den folgenden zwei Graphen tut. Diese beiden Graphen sind nur als Hilfestellung angegeben. Zur Lösung dieser Aufgabe ist es nicht erforderlich, dass Sie den Algorithmus auf ihnen ausführen. Es hilft Ihnen aber hoffentlich. (a) Ein einfacher Pfadgraph V = {,,... n}, E = {(i, i + ) i {,... n }} (b) Zwei aufeinander zulaufende Pfadgraphen V = {,,... n} E = {(i, i + ) i {,... n }} {(i +, i) i { n... n, n}}

Musterlösung Zunächst sei angemerkt, dass diese Variante von Bellman-Ford bekannt ist als Yen s Improvement on Bellman-Ford. a) Angenommen, es gäbe einen Kreis in G f. Wir laufen (n + ) Schritte in diesem Kreis und schreiben die Indizes der hierbei gesehenen Knoten als Folge auf. Da alle Kanten in G f von einem kleineren auf einen größeren Index zeigen, muss diese Folge streng monoton steigend sein. In G f gibt es aber nur n Knoten, und somit nur n verschiedene Knotenindizes. Dies ist ein Widerspruch. Der Beweis für G b funktioniert analog. b) Sei P = S,... T ein optimaler S T -Pfad. Jede Kante in P liegt entweder in E f oder in E b. Die Idee ist nun, P in (maximale) Teilpfade zu zerlegen, die jeweils vollständig in G f bzw. G b liegen O.b.d.A. gehen wir davon aus, dass die erste Kante von P in E f und die letzte Kante von P in E b liegt. Dann lässt sich P schreiben als eine Folge von Teilpfaden P, P, P, P,..., P k, P k, wobei alle P i in G f, und alle P i in G b liegen. Es ist einfach zu sehen, dass k n gelten muss Ein Paar ( P i, P i ) enthält immer mindestens zwei Kanten, und P kann insgesamt maximal n Kanten enthalten. Wir zeigen nun, dass i Iterationen des veränderten Bellman-Ford-Algorithmus ausreichend sind, um den Teilpfad von P bis S,... P i, P i korrekt zu finden. Damit ist klar, dass nach k Iterationen P korrekt gefunden wurde. Dies zeigen wir induktiv Für i = 0 ist die Behauptung trivial wahr Der Teilpfad von P mit 0 ( P i, P i )-Paaren besteht nur aus S. Sei nun also i beliebig aber fest, und der Pfad P = S,... P i, P i somit korrekt gefunden. In der ersten Hälfte von Iteration i + betrachten wir nun die Knoten in Reihenfolge aufsteigender Indizes und relaxieren ihre ausgehenden Kanten in E f. Damit werden alle Kanten in P i+ in der Reihenfolge, in der sie in P i+ auftreten, relaxiert, und somit wird P um P i+ erweitert. In der zweiten Hälfte betrachten wir alles Knoten in umgekehrter Indexreihenfolge und relaxieren die eingehenden Kanten in E b. Damit werden nun alle Kanten in P i+ in der korrekter Reihenfolge relaxiert, und P um P i+ erweitert. Am Ende von Iteration i + wurde der Pfad P = S,... P i+, P i+ korrekt gefunden. Die Erkennung von negativen Kreisen funktioniert analog zum unveränderten Bellman-Ford- Algorithmus Sollte sich nach k Schritten noch eine vorläufige Distanz verändern, so liegt ein negativer Kreis vor. Aufgabe 4 (Doktor Meta, 6 Punkte) Als der ebenso orientierungsschwache wie unermüdliche Untersuperbösewicht Røbøt endlich in Doktor Metas geheimer Basis ankommt, ist Doktor Meta über die Verspätung und die übrige Ausbeute von -Cent-Stücken alles andere als erfreut. Um ihn in bessere Laune zu versetzen, erzählt Røbøt von den Begegnungen mit verschiedenen Bösewichten auf seinen Irrwegen durch das Tunnelsystem. Ein Superbösewicht hat genug von unzuverlässigen elektronischen Gehilfen und bietet deshalb eine große Menge von identischen Bauteilen vom Typ A für eine Preis von, Euro pro Bauteil zum Verkauf an. Ein Mittelbösewicht hat den Plan ein Roboterheer aufzubauen noch nicht aufgegeben hat und ist verzweifelt auf der Suche nach Bauteilen von Typ A. Er ist bereit je zwei Bauteile vom Typ A für je drei Bauteile vom Typ B, die er selbst noch übrig hat, zu tauschen. Ein vom gleichen Bausatz stammende und ähnlich fehlkonstruierte Unterbösewicht hat sich ebenso mit einer Menge Geld im Gepäck verlaufen. Sein Plan ist es einen Unterbösewichtsgehilfen zu bauen, der den Weg für ihn findet. Dazu möchte er Bauteile vom Typ B zum Preis von 0, 87 Euro pro Bauteil erwerben. Plötzlich ist Doktor Meta nicht mehr schlecht gelaunt, er rechnet nach, dass er so einen Euro ganz einfach in, 0 Euro verwandeln kann. Damit Røbøt beim nächsten Mal eine solche Gelegenheit von selbst erkennt, möchte Doktor Meta einen geeigneten Algorithmus entwerfen. 4

Seien dazu Allgemein eine Menge von angebotenen Objekten a,..., a n (im vorliegenden Fall Euros, Bauteile vom Typ A und Bauteile vom Typ B) gegeben und weiter eine Tabelle T, wobei T [i, j] jeweils angibt wieviele Einheiten von Objekt a j für ein Objekt a i angeboten werden. Im vorliegenden Fall ergibt sich also T [, ] = 0, 8, T [, ] =, und T [, ] = 0, 87 und damit T [, ] T [, ] T [, ] =, 0 >. Modellieren Sie das Problem mit Hilfe von einem geeigneten Graphen und konstruieren Sie einen effizienten Algorithmus, der entscheidet ob es eine Folge von Objekten a i,..., a ik gibt, sodass T [i, i ] T [i, i ] T [i k, i ] >. Analysieren Sie die Laufzeit Ihres Algorithmus. Musterlösung Wir möchten das Problem mit Hilfe des Bellman-Ford-Algorithmus lösen. Dazu modellieren wir jeden Typ von Objekten (also Euros und Bauteilen) als einen Knoten des Graphen G = (V, E), und jede Tauschmöglichkeit zwischen zwei Typen von Objekten als eine Kante zwischen den entsprechenden Knoten. Würden wir die Tauschkurse zwischen den Objekten direkt als Kantengewichte verwenden, müssten wir nun einen positiven Kreis finden, was Bellman-Ford nicht kann. Wir beobachten aber, dass T [i, i ] T [i, i ] T [i k, i ] > gleichbedeutend ist zu T [i, i ] T [i, i ] T [i k, i ] < Wenn wir nun beide Seiten logarithmieren ergibt sich log T [i, i ] + log T [i, i ] + log T [i k, i ] < 0 Wir definieren daher das Kantengewicht c E R als c((i j, i k )) = log T [i j,i k ] = log T [i j, i k ]. Ein Kreis mit negativem Gewicht in diesem Graphen entspricht einer gesuchten Folge von Objekttypen, mit der sich Gewinn durch Im-Kreis-Tauschen erzielen lässt. Fraglich ist noch, von welchem Knoten aus Bellman-Ford gestartet werden muss. Es ist nicht klar, dass ein Knoten existieren muss, von dem aus ein Pfad zu jedem negativen Kreis existiert. Daher fügen wir einen weiteren Knoten v 0 und Kanten (v 0, v i ) für alle v i V hinzu, und setzen c((v 0, v i )) = 0 für alle v i V. Wir starten Bellman-Ford auf v 0. Sei n die Anzahl der Arten Objekten, dann hat G n Knoten und bis zu n Kanten. Die Zeitkomplexität von Bellman-Ford liegt dann in O ( n ).