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 14. Lösungsvorschlag 18. Februar 2005 Aufgabe 1 8 Punkte Aufgabe 1 a) 3 Punkte Finden Sie eine mögliche Lösung, oder geben Sie an, dass keine Lösung existiert, für folgendes System von Differenz-Bedingungen: x1 − x 2 x1 − x 4 x2 − x 3 x2 − x 5 x2 − x 6 x3 − x 6 x4 − x 2 x5 − x 1 x5 − x 4 x6 − x 3 ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ 1, −4, 2, 7, 5, 10, 2, −1, 3, −8 Lösung Eine Lösung ist: x1 = −5, x2 = −3, x3 = 0, x4 = −1, x5 = −6, x6 = −8 NB: Der zugehörige Graph ist in Abbildung 1 zu sehen. Aufgabe 1 b) 2 Punkte Geben Sie einen Weg an, wie Gleichheitsbedingungen der Art xi = xj +bk unterstüzt werden können. 1 Lösung Aus xi = xj + bk ⇐⇒ xi ≤ xj + bk ∧ xi ≥ xj + bk folgt, daß für jede Gleichheitsbedingung 2 Bedingungen eingefügt werden. Danach kann der Algorithmus unverändert ausgeführt werden. Aufgabe 1 c) 3 Punkte Drücken Sie das Single-Source-Shortest-Path-Problem als Lineares Programm aus. Lösung Nach Lemma 25.4 gilt zu jedem Relaxionsschritt: d[vj ] ≤ ω(vi , vj ) + d[vi ]. Daraus leitet sich für jede Kante (vi , vj ) die Differenzbedingung xi − xj ≤ ω(vi , vj ) ab, wobei xi := δ(s, vi ). Lemma 25.4. stellt sicher, daß keine der Bedingungen nach einem Relaxionsschritt verletzt wird. Für den Startknoten vs muß die Bedingung vs = 0 hinzugefügt werden. P | Das Optimierungskriterium lautet: max( |V i=1 xi ). Nach Lemma 25.12 liefert die Anwendung des Bellman-Ford-Algorithmus mit Startknoten vs die xi = δ(vs , vi ). Aufgabe 2 7 Punkte Führen Sie den Floyd-Warshall-Algorithmus auf dem gewichteten Graphen in Abbildung 1. Geben Sie die Matrix D (k) an, die nach jeder Iteration der äußeren Schleife resultiert. 1 1 −4 4 2 −1 7 2 3 2 5 3 10 5 −8 6 Abbildung 1: Graph Lösung D (0) = 0 ∞ ∞ ∞ −1 1 0 ∞ 2 ∞ ∞ 2 0 ∞ ∞ −4 ∞ ∞ 0 3 ∞ 7 ∞ ∞ 0 ∞ 5 10 ∞ ∞ 2 ∞ ∞ −8 ∞ ∞ 0 D (1) D (2) D (3) = = = 0 ∞ ∞ ∞ −1 ∞ 1 0 ∞ 2 0 ∞ ∞ 2 0 ∞ ∞ −8 −4 ∞ ∞ 0 −5 ∞ ∞ 7 ∞ ∞ 0 ∞ ∞ 5 10 ∞ ∞ 0 0 ∞ ∞ ∞ −1 ∞ 1 0 ∞ 2 0 ∞ 3 2 0 4 2 −8 −4 ∞ ∞ 0 −5 ∞ 8 7 ∞ 9 0 ∞ 6 5 10 7 5 0 0 ∞ ∞ ∞ −1 ∞ 1 0 ∞ 2 0 ∞ 3 2 0 4 2 −8 −4 ∞ ∞ 0 −5 ∞ 8 7 ∞ 9 0 ∞ 6 5 10 7 5 0 0 ∞ −2 0 0 2 (4) D = −4 ∞ 5 7 3 5 0 6 −2 0 0 2 (5) D = −4 2 5 7 3 5 0 6 −2 0 −5 −3 (6) D = −4 2 5 7 3 5 ∞ ∞ −1 ∞ ∞ 2 −3 ∞ 0 4 −1 −8 ∞ 0 −5 ∞ ∞ 9 0 ∞ 10 7 2 0 ∞ 8 −1 ∞ ∞ 2 −3 ∞ 0 4 −1 −8 ∞ 0 −5 ∞ ∞ 9 0 ∞ 10 7 2 0 ∞ 8 −1 ∞ ∞ 2 −3 ∞ 0 −1 −6 −8 ∞ 0 −5 ∞ ∞ 9 0 ∞ 10 7 2 0 Aufgabe 3 8 Punkte Es soll die Transitive Hülle G∗ = (V, E ∗ ) eines gerichteten Graphen G = (V, E) bezüglich dem Einfügen von Kanten in G gewartet werden. D.h. nach dem Einfügen einer Kante in G soll die Transitive Hülle aktualisiert werden. Die Transitive Hülle soll 3 als boolsche |V |×|V | Matrix repräsentiert werden. Gehen Sie bei den folgenden Teilaufgaben davon aus, daß der Ausgangsgraph keine Kanten enthält. Gehen Sie weiterhin davon aus, daß nur gültige Einfügeoperationen betrachtet werden, d.h. es werden nur gültige Kanten in G eingefügt und es wird keine Kante doppelt eingefügt. Aufgabe 3 a) 3 Punkte Wie kann G∗ in O(V 2 ) bezüglich dem Einfügen einer einzelnen Kante in G aktualisiert werden? Lösung Sei T = |V | × |V | die Matrix-Darstellung der Transitiven Hülle von G = (E, V ). Hierbei ist T [i, j] = 1, falls ein Pfad vom Knoten i zum Knoten j existiert. Existiert keine solcher Pfad so ist T [i, j] = 0. Zur Initialisierung wird für i = j, T [i, j] = 1 und für i 6= j, T [i, j] = 0 gesetzt. Zur Aktualisierung von T beim Einfügen einer Kante (u, v) in G dient der folgende Algorithmus. TRANSITIVE-CLOSURE-UPDATE(T,G,u,v) for i ← 1 to |V | do for j ← 1 to |V | do if T [i, u] = 1 and T [v, j] = 1 then T [i, j] ← 1 Aufgabe 3 b) 2 Punkte Geben Sie ein Beispiel für einen Graphen G und eine Kante e an, so daß die Aktualisierung von G∗ nach dem Hinzufügen von e eine Laufzeit von Ω(V 2 ) benötigt. Lösung Der Beispielgraph G = (V, E) besteht aus einem einfachen Pfad hv1 → v2 , . . . v|V | i, der alle Knoten der Knotenmenge enthält. In diesen Graphen soll die Kante (v|V | , v1 ) eingefügt werden. Vor der Aktualisierung sind n(n + 1)/2 Einträge in T gleich 1. Zur Aktualisierung müssen alle Einträge in T auf 1 gesetzt werden, da alle Knoten des Graphen nun Teil eines Zyklusses sind. Somit müssen n2 − (n(n + 1)/2) Einträge angepasst werden. Die Aktualisierung hat daher eine Laufzeit von Ω(V 2 ). Aufgabe 3 c) 3 Punkte Geben Sie einen Aktualisierungsalgorithmus an, der für jede Sequenz von n EinfügePn operationen eine Gesamtlaufzeit von i=1 ti = O(V 3 ) hat. Dabei ist ti die Zeit zum 4 Aktualisieren der transitiven Hülle, wenn die i-te Kante eingefügt wird. Beweisen Sie, daß die geforderte Gesamtlaufzeit erreicht wird. Lösung In einen Graph mit V Knoten können maximal |V |2 Kanten eingefügt werden. Somit würde bei Verwendung des Algorithmus aus Aufgabenteil (a), die Laufzeit O(V 2 ) · O(V 2 ) = O(V 4 ) betragen. Die geforderte Laufzeit von O(V 3 ) wird errreicht, in dem unnötige Durchläufe der inneren Schleife vermieden werden. Wenn Kante (u, v) neu eingefügt wird, dann kannt die Aktualisierung abegrochen werden, wenn Knoten v schon in der transitiven Hülle enthalten ist (T [i, v] = 1). Die aktualisierte Funktion lautet: TRANSITIVE-CLOSURE-UPDATE(T,G,u,v) for i ← 1 to |V | do if T [i, u] = 1 and T [i, v] = 0 then for j ← 1 to |V | do if T [v, j] = 1 then T [i, j] ← 1 Zu zeigen, eine Sequenz von Einfügeoperationen der Länge n hat eine Laufzeit von O(V 3 ). Begründung: • Da nicht mehr als |V |2 Kanten eingefügt werden können, gilt n ≤ |V |2 . • Bei n Einfügeoperationen wird die äußer Schleife O(nV ) = O(V 3 ) mal durchlaufen. • Die Anzahl der Durchläufe der inneren Schleife beträgt O(V 2 ), da ein Durchlauf nur stattfindet, falls T [i, v] = 0 ist und mit jedem Durchlauf die Anzahl der Einträge, die gleich 0 sind, verringert wird. Aufgabe 4 4 Punkte Sei q = 11, welche gültigen und ungültigen Treffer liefert der Rabin-Karp-Matcher beim Abgleich des Patterns P = 26 mit dem Text T = 314159263589793? Lösung Pattern: 26 mod 11 ≡ 4 Text 3 1 4 1 5 mod 11 9 3 8 4 Treffer u 9 4 u 2 6 3 5 8 9 7 9 3 4 4 8 2 3 1 9 2 5 u g 5 Aufgabe 5 4 Punkte Konstruieren Sie den Musterautomat für das Pattern P = abccba und das Alphabet Σ = {a, b, c}. Lösung Zustand 0 1 2 3 4 5 6 a 1 1 1 1 1 6 1 b 0 2 0 0 5 0 2 c 0 0 3 4 0 0 0 Aufgabe 6 4 Punkte Berechnen Sie die Präfixfunktion π für das Pattern P = ababbabbababbababbabb und das Alphabet Σ = {a, b}. Lösung Präfixfunktion: p[q]:a b a b π[q]:0 0 1 2 b a 0 1 b 2 b a 0 1 b a b 2 3 4 6 b a b a b 5 6 7 3 4 b a b 5 6 7 b 8