Grundlegende Algorithmen WS 2009 ¨Ubungsblatt 7

Werbung
Prof. Dr. Christian Scheideler
Universität Paderborn
Paderborn, 29. Januar 2010
Grundlegende Algorithmen
WS 2009
Übungsblatt 7
Aufgabe 1 (5 Punkte):
Geben Sie an, ob die folgenden Aussagen wahr oder falsch sind.
a) Ein binärer Heap kann aus einer unsortierten Liste von n Elementen in O(n) Zeit aufgebaut
werden.
b) Der Radix Heap ist für eine beliebige Folge von insert, decreaseKey und deleteMin Operationen anwendbar.
c) Das Kuckuckshashing kann so erweitert werden, dass jede insert, delete und lookup Operation in worst case konstanter Zeit (mit hoher Wahrscheinlichkeit) arbeitet.
d) Die starken Zusammenhangskomponenten eines Graphen können in linearer Zeit berechnet
werden.
e) In jedem Graphen, der als Adjazenzmatrix dargestellt ist, können die find(i, j), insert(e)
und remove(i, j) Operationen in worst case konstanter Zeit durchgeführt werden.
f) Wenn wir die Knoten eines DAGs absteigend nach der finishTime eines DFS-Durchlaufs
sortieren, dann erhalten wir eine topologische Sortierung.
g) Dijkstras Algorithmus kann kürzeste Wege für beliebige Graphen berechnen.
h) Ein Knoten kann nur dann eine Distanz von −∞ zu einer Quelle s haben, wenn er auf
einem negativen Kreis liegt.
i) Ein maximales Matching ist immer auch ein Matching maximaler Kardinalität.
j) Der Ford-Fulkerson Algorithmus errechnet für jede Eingabe und jede Wahl der augmentierenden Pfade einen maximalen Fluss.
Aufgabe 2:
a) Geben Sie die Arrayrepräsentation des binären Heaps am Ende der folgenden Einfügesequenz
an:
8 20 7 5 1 3 6 10 4
Führen Sie danach zwei deleteMin Operationen aus und geben Sie die Arrayrepräsentation
am Ende aus.
b) Wenden Sie die merge Operation auf die folgenden Binomialheaps an und geben Sie das
Ergebnis aus.
2
8
22
5
7
15
10
11
30
23
40
16
25
3
6
14
31
21
28
9
17
12
26
20
37
18
35
32
Führen Sie danach eine deleteMin Operation aus und geben Sie das Ergebnis aus.
Aufgabe 3:
Sei G = (V, E) ein gerichteter Graph und w : E → [0, 1] eine Gewichtsfunktion, wobei für alle
Kanten e ∈ E der Wert w(e) der Wahrscheinlichkeit entspricht, dass die Kante e nicht ausfällt.
Die Zuverlässigkeit (engl. reliability) eines
Q Pfades P is gleich der Wahrscheinlichkeit, dass keine
der Kanten in P ausfällt, d.h. r(P ) = e∈P w(e).
Das ReliableRouting Problem ist wie folgt definiert:
• Eingabe: ein gerichteter Graph G = (V, E), eine Funktion w : E → [0, 1] und eine Quelle
s∈V.
• Gesucht: Für alle Knoten v ∈ V die Zuverlässigkeit des zuverlässigsten Pfades von s nach
v. (Diese ist 0, wenn kein Pfad existiert.)
Verändern Sie Dijktras Algorithms unten so, dass er das ReliableRouting Problem löst.
Dijkstras Algorithmus(s: NodeId):
d = h∞, . . . , ∞i: NodeArray of R ∪ {−∞, ∞}
parent = h⊥, . . . , ⊥i: NodeArray of NodeId
d[s] := 0; parent[s] := s
q := hsi: NodePQ
WHILE q 6= hi DO
u := q.deleteMin()
FOREACH e = (u, v) ∈ E DO
IF d[v] > d[u] + c(e) THEN
IF d[v] = ∞ THEN q.insert(v)
q.decreaseKey(v, d[v] − (d[u] + c(e)))
d[v] := d[u] + c(e); parent[v] := u
Aufgabe 4:
Wenden Sie die Kürzester-augmentierender-Pfad Heuristik auf das Netzwerk unten an, bis der
maximale Fluss gefunden ist. Flüsse und Kapazitäten sollen nach jedem augmentierenden Pfad
in der Form f (e)|c(e) angegeben werden. Geben Sie zusätzlich am Ende einen minimalen Schnitt
an.
18
u
x
4
10
10
10
9
25
v
s
t
5
5
30
15
w
y
6
Aufgabe 5:
Zeigen Sie formal, dass jeder Baum höchstens ein perfektes Matching hat. (Hinweis: kann durch
Induktion über die Anzahl der Knoten im Baum bewiesen werden.)
Aufgabe 6:
a) Berechnen Sie die Verschiedungstabelle des KMP-Algorithmus für das Suchwort s =
abaabbaabbab.
b) Sei s = abbaaba und t = aabbaabbabbaababa. Die Verschiedbungstabelle für s sieht wie
folgt aus:
j
sj
dj
0
2
1 2 3
a b b
2 3 4
4 5 6 7
a a b a
4 5 5 7
Wenden Sie den KMP-Algorithmus an, um alle Vorkommen von s in t zu finden.
Herunterladen