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.