Lehrstuhl für Praktische Informatik III Norman May B6, 29, Raum C0.05 68131 Mannheim Telefon: (0621) 181–2517 Email: [email protected] Matthias Brantner B6, 29, Raum C0.05 68131 Mannheim Telefon: (0621) 181–2517 Email: [email protected] Algorithmen und Datenstrukturen Wintersemester 2004/05 13. Lösungsvorschlag 11. Februar 2005 Aufgabe 1 5 Punkte Sei die Menge {1, . . . , |V |} der Wertebereich der Kantengewichte in einem Graphen G = (V, E). Aufgabe 1 a) 3 Punkte Welche Laufzeit läßt sich zur Berechnung eines minimalen Spannbaums durch Modifikation des Kruskal-Algorithmus erreichen? Lösung Aufwand Kruskal: • Make-Set Operationen: O(V ) • Sortieren: O(E lg E) • Find-Set und Union Operationen: O(Eα(E, V )), zur Erinnerung: wegen O(α(E, V )) = O(lg∗ V ) folgt für diesen Schritt: O(E lg∗ V ), lg∗ ist die iterierte Logarithmus-Funktion. • Gesamtaufwand: O(E lg E) Falls die Kantengewichte den Wertebereich {1, . . . , |V |} haben, lassen sich die Kanten mittels Counting-Sort sortieren. Der Aufwand hierfür beträgt O(E). Ausgehend von der Annahme, daß der Graph verbunden ist, beträgt der Aufwand: • Make-Set Operationen: O(V ) • Sortieren: O(E) • Find-Set und Union Operationen: O(E lg ∗ V ) • Gesamtaufwand: O(E lg∗ V ) 1 Aufgabe 1 b) 2 Punkte Welche Laufzeit kann erreicht werden, wenn der Wertebereich der Kantengewichte gleich der Menge {1, . . . , W }, für eine beliebige ganzzahlige Konstante W ist? Lösung Falls die Kantengewichte den Wertebereich {1, . . . , W } haben, kann wiederum CountingSort verwendet werden. Auch hier beträgt der Gesamtaufwand O(E lg∗ V ). Aufgabe 2 5 Punkte Sei G = (V, E) ein gewichteter ungerichteter Graph. Sei SG die Menge aller Kanten von G. Sei A eine Teilmenge von E, dann ist A ∈ lG genau dann, wenn A azyklisch ist. Das heißt, eine Menge von Kanten A ist unabhängig genau dann, wenn der Teilgraph GA = (V, A) einen Wald formt. Aufgabe 2 a) 4 Punkte Zeigen Sie, daß MG = (SG , lG ) einen Matroiden definiert. Lösung Überprüfe die Matroideneigenschaften: 1. Z.Z.: SG ist endlich. Das ist offensichtlich der Fall, weil E endlich ist. 2. Z.Z.: lG ist eine nicht-leere Familie von unabhängigen Teilmengen von S. Das trifft zu, weil das Entfernen einer Kante aus einem azyklischen Graphen keine Zyklen hinzufügen kann. 3. Z.Z.: Wenn A ∈ lG , B ∈ lG und |A| < |B|, dann gibt es ein Element x ∈ B − A, so daß A ∪ {x} ∈ lG . Angenommen GA = (V, A) und GB = (V, B) sind Wälder von G und |B| > |A|, d.h. A und B sind azyklische Mengen von Kanten, und B enthält mehr Kanten als A. Es gilt, daß ein Wald mit k Kanten genau |V | − k Bäume enthält. Daher enthält GA |V | − |A| Bäume, und GB besteht aus |V | − |B| Bäumen. Weil Wald GB weniger Bäume enthält als Wald GA , muß GB einen Baum T enthalten, dessen Kanten in zwei verschiedenen Bäumen in GA enthalten sind. Weil T verbunden ist, muß es eine Kante (u, v) geben, so daß u und v in verschiedenen Bäumen in GA sind. Weil die Kante (u, v) Knoten in verscheidenen Teilbäumen in Wald GA verbindet, kann diese Kante zum Wald GA hinzugefügt werden, ohne einen Zyklus zu erzeugen. Also befolgt MG die Austauscheigenschaft. 2 Aufgabe 2 b) 4 Punkte Zeigen Sie, daß minimale Spannbäume eine optimale Teilmenge auf einem gewichteten Matroiden definieren, wenn die Definition des Matroiden aus Teilaufgabe a) verwendet wird und die Kantengewichte geeignet verwendet werden. Lösung Zu zeigen: (1) Spannbäume sind maximal, (2) die maximale Teilmenge, deren Summe der Kantengewichte minimal ist, ist eine optimale Teilmenge von A. zu (1) Jeder Spannbaum enthält |V | − 1 Kanten. zu (2) Wir definieren die Gewichtsfunktion für eine Kante e mit Gewicht w(e) als w 0 (e) = w0 − w(e), wobei w0 > maxe∈E w(e). In dem Matroid MG mit Gewichtsfunktion w 0 sind alle Kantengewichte positiv. Da w 0 (A) = (|V | − 1)w0 − w(A) für eine maximal unabhängige Teilmenge A eine unabhängige Teilmenge ist, die w 0 (A) maximiert, wird w(A) minimiert. Also kann jeder Algorithmus, der eine optimale Teilmenge A in einem beliebigen Matroiden findet, auch minimale Spannbäume finden. Der Algorithmus Generic-Mst ist daher eine Instanz des allgemeinen Greedy-Algorithmus für gewichtete Matroiden. Aufgabe 3 4 Punkte Sei G = (V, E) ein gewichteter, gerichteter Graph. G enthält keine Zyklen mit negativem Gewicht. Sei s ∈ V der Ausgangsknoten und sei G durch einen Aufruf von Initialize-Single-Source(G,s) initialisiert. Zeigen Sie, daß eine Sequenz von |V | − 1 Relaxationsschritten existiert, nach deren Durchführung für alle v ∈ V d[v] = δ(s, v) gilt. Lösung Es sei Gπ der Shortest-Path Tree mit der Wurzel s. Falls wir wissen, daß der kürzeste Pfad von s nach v die Form s ; u → v hat und d[u] = δ(v, u), so können wir den kürzesten Pfad von s nach v mit einer Relaxation ermitteln. Relaxieren wir nun die Kanten in Gπ entsprechend der Reihenfolge, die aus einer Tiefensuche resultiert, gilt für alle v ∈ V , d[v] = δ(s, v). Da Gπ |V | − 1 Kanten enthält, erhalten wir die gesuchte Sequenz. Aufgabe 4 6 Punkte Sei G = (V, E) ein gerichteter Graph. Zu jeder Kante (u, v) ∈ E ist ein Wert r(u, v) assoziiert, mit 0 < r(u, v) ≤ 1, der die Zuverlässigkeit einer Kommunikationsverbindung zwischen den Knoten u und v beschreibt. Die Zuverlässigkeit einer Kommunikationsverbindung läßt sich als Wahrscheinlichkeit einer erfolgreichen Kommunikation 3 interpretieren. Die Wahrscheinlichkeiten sollen voneinander unabhängig sein. Geben Sie einen effizienten Algorithmus an, der den zuverlässigsten Pfad zwischen zwei Knoten findet. Lösung Zur Lösung des Problems verwenden wir den Dijkstra-Algorithmus. Aufgrund der Unabhängigkeit der Wahrscheinlichkeiten ist die Zuverlässigkeit eines Pfades das Produkt der Wahrscheinlichkeiten der im Pfad enthaltenen Kanten. Um den Dijkstra-Algorithmus anwenden zu können, führen wir die Gewichtsfunktion w(u, v) = − lg(r(u, v)) ein. Da 0 < r(u, v) ≤ 1, ist für alle Kanten (u, v), w(u, v) ≥ 0. Seien x und y zwei Knoten, zwischen denen der zuverlässigste Pfad gefunden werden soll. Zu zeigen, der Dijkstra-Algorithmus bestimmt den zuverlässigsten Pfad zwischen x und y. Beweis: Der Dijkstra-Algorithmus bestimmt den Pfad p = hv0 , v1 , . . . , vk i mit dem geringsten Gewicht aus der Menge der Pfade, die vom Knoten x zum Knoten y führen. Das Gewicht des Pfades wird wie folgt berechnet. w(p) = k X w(vi−1 , vi ) i=1 Setzen wir die Definition der Kantengewichtsfunktion ein, so erhalten wir w(p) = − k X lg(r(vi−1 , vi )) i=1 = − lg k Y i=1 r(vi−1 , vi ) ! Somit ist das Pfadgewicht genau dann minimal, wenn das Produkt der Wahrscheinlichkeiten maximal ist. 4