Lehrstuhl für Praktische Informatik III Norman May

Werbung
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
Herunterladen