Beispiel-Prüfungsfragen für “Effiziente Algorithmen II” M. Dietzfelbinger, 6. Februar 2011. Vorbemerkung: Die Liste der Beispielfragen soll bei der Vorbereitung helfen. Sie definiert nicht den Prüfungsstoff um. (Der Prüfungsstoff ist, was in der Vorlesung besprochen wurde. Mit weniger Gewicht auch Erweiterungen oder Ergänzungen, die in der Übung behandelt wurden.) Allgemein: Wann immer eine Frage ein Berechnungsproblem erwähnt, muss man unbedingt in der Lage sein, dieses zu spezifizieren. Manchmal ist schon diese Aufgabe etwas komplizierter. Beispiel : Der Input ist ein Flussnetzwerk. Dies besteht aus einem gerichteten Graphen G = (V, E), in dem eine Quelle q ∈ V und eine Senke s ∈ V ausgezeichnet sind. Zudem hat jede Kante (u, v) eine Kapazität c(u, v) ≥ 0. Ein Fluss f in einem Flussnetzwerk ordnet jeder Kante (u, v) einen Fluss f (u, v) zu, wobei zwei Bedingungen zu erfüllen sind: • 0 ≤ f (u, v) ≤ c(u, v) an jeder Kante (u, v); • Flusserhaltung (Kirchhoff-Regel) an jedem Knoten. P Der Wert w(f ) des Flusses f ist (q,v)∈E f (q, e), der Fluss aus der Senke hinaus. Die Aufgabe ist, einen Fluss mit maximalem Wert zu finden. Ganz wichtig ist, dass man die Algorithmen beschreiben kann. Dabei ist es normalerweise nicht wesentlich, dass man den Pseudocode (wenn er in der Vorlesung vorkam) hinschreiben kann, sondern dass man weiß, was gemacht wird. Dabei ist normalerweise eine korrekte allgemeine Beschreibung der Vorgehensweise besser als die Durchführung an einem Beispiel. Aber auch Beispiele sollte man „können“. Viele Algorithmen haben Namen. Diese Namen (z. B. „Algorithmus von Edmonds und Karp“) gehören zur Fachsprache, man muss sie kennen und dem Problem zuordnen können. Ebenso wichtig ist, dass man die asymptotischen Laufzeiten der Algorithmen kennt. (Tipp: Wenn es nicht anders geht, herausschreiben und auswendiglernen.) Für eine gute oder sehr gute Note ist es notwendig, auch Implementierungsdetails und Beweise für Korrektheit bzw. Laufzeitschranken vortragen zu können. Für ein 1 „sehr gut“ wird das Beherrschen des (gesamten) Stoffes der Vorlesung verlangt. Soweit Übungen sich direkt auf den Vorlesungsstoff beziehen („führen Sie Algorithmus XYZ auf der folgenden Eingabe aus“, oder wenn Algorithmen angewendet oder verallgemeinert werden), sind sie ebenfalls gut zur Prüfungsvorbereitung geeignet. Es folgen Beispielfragen. 1 Flussalgorithmen 1.1 Was ist ein Flussnetzwerk (FNW)? 1.2 Gegeben ein FNW G = (V, W, q, s, c). Was ist ein (zulässiger) Fluss in G? (Was heißt „Flusserhaltung“ bzw. „Kirchhoff-Regel“?) 1.3 Wie ist der Wert w(f ) eines Flusses f definiert? Was ist ein maximaler Fluss? 1.4 Gegeben FNW G und Fluss f dazu. Wie ist das Restnetzwerk (RNW) Gf definiert? 1.5 Gegeben ein q-s-Weg p im RNW Gf . Was ist die Kapazität von p? Wie kann man p benutzen, um den Fluss zu vergrößern? 1.6 Gegeben ein FNW G = (V, W, q, s, c). Was ist ein Schnitt (Q, S) in G? Was ist die Kapazität c(Q, S) eines Schnittes (Q, S)? Was ist ein minimaler Schnitt? 1.7 Gegeben FNW G = (V, W, q, s, c), Fluss f , Schnitt (Q, S). Formulieren Sie eine Beziehung zwischen w(f ) und c(Q, S). Wie funktioniert der Beweis? (Prinzip kennen, nicht vorrechnen.) 1.8 Formulieren Sie das Max-Flow-Min-Cut-Theorem. 1.9 Beweisen Sie das (bzw. einen Schritt im) Max-Flow-Min-Cut-Theorem. ((a) Wenn f maximaler Fluss, dann hat das RNW keinen q-s-Weg. (b) Wenn das RNW keinen q-s-Weg hat, dann gibt es einen Schnitt (Q, S) mit f (w) = c(Q, S). (c) Wenn es einen Schnitt (Q, S) mit f (w) = c(Q, S) gibt, dann ist f maximal (und c(Q, S) minimal).) Jeder dieser Schritte hat seinen ganz eigenen Beweisgedanken. (c) ist fast trivial, (a) und (b) sind interessant. 2 1.10 Formulieren Sie die Ford-Fulkerson-Methode (FF-Methode) zur Berechnung eines maximalen Flusses. Beweisen Sie die Korrektheit für ganzzahlige Kantenkapazitäten (insbesondere: weshalb terminiert der Algorithmus?). 1.11 Formulieren Sie das Ganzzahligkeitsprinzip bei Flüssen („wenn alle c(u, v) ganzzahlig sind, dann exisitert ein ganzzahliger maximaler Fluss“). Wieso folgt dies aus der FF-Methode? 1.12 Schätzen Sie die Laufzeit der FF-Methode ab (mit Begründung). Kennen Sie ein Beispiel, wo der Faktor C (mit C = c({q}, V − {q})) tatsächlich relevant ist? 1.13 Der Algorithmus von Edmonds und Karp ist nur eine spezielle Ausformung der FF-Methode. Wie wird dazu der Algorithmus spezialisiert? Was ist die Laufzeit? 1.14 Wie beweist man die Laufzeitschranke O(m2 n) für den Edmonds-Karp-Algorithmus? (Die Anzahl der Iterationen ist O(mn) – wieso? Eine Iteration kostet Zeit O(m) – wieso?) 1.15 Was ist das Niveaunetzwerk (NNW) G0f ? 1.16 Was ist ein Sperrfluss? Zu welchem Netzwerk gehört er? (Zum NNW!) 1.17 Wieviele Sperrflussberechnungen benötigt man bei der Sperrfluss-Methode höchstens? 1.18 Beweisen Sie, dass es bei der Sperrflussmethode nicht mehr als n−1 Iterationen geben kann. 1.19 Beschreiben Sie die Methode „Forward-Backward-Propagation“ zur Sperrflussberechnung. Wie viele Propagationsphasen gibt es maximal? (n − 1) Beweis hierfür? 1.20 Geben Sie die Zeitanalyse für eine Propagationsphase an. 1.21 Was ist die Gesamtlaufzeit der Sperrflussmethode mit Forward-Backward-Propagation? 1.22 In der Übung wurde eine andere Methode zur Sperrflussberechnung angegeben, nämlich der Algorihmus von Dinitz. Was ist hier anders? Welche Laufzeit ergibt sich für die Flussberechnung? 3 2 Matchingalgorithmen 2.1 Was ist ein Matching (in einem allgemeinen Graphen)? 2.2 Was ist ein inklusionsmaximales Matching? Ist es schwer zu finden? (Nein, ein naiver Algorithmus führt zum Ziel.) 2.3 Was ist ein kardinalitätsmaximales Matching („maximum matching“)? 2.4 Transformieren Sie eine Instanz für das Problem „kardinalitätsmaximales Matching in bipartiten Graphen“ in eine äquivalente Instanz des Flussproblems. Formulieren Sie die Äquivalenz, zeigen Sie, wie sich die Lösungen ineinander transformieren lassen. 2.5 Was ist ein einfaches (Fluss-)Netzwerk? Was ist mit dem RNW G0 , wenn das FNW G einfach ist? Wieso? 2.6 Wir wenden die Sperrflussmethode auf ein einfaches √ FNW G an. Geben Sie eine Sie sie. (Es obere Schranke für die Anzahl der Runden an (2 n) und beweisen √ gibt zwei Phasen: Wenn der erreichte Fluss noch weiter als n vom Optimum √ n viele entfernt ist, dann kann dass RNW nicht tief sein. [Wieso?] Es kann nur √ Phasen geben, in denen der schon erreichte Fluss näher als n am Optimum ist.) 2.7 Wie lange dauert eine Sperrflussberechnung in einem einfachen Netzwerk? (Wenn man es richtig macht, und das geht wie?) 2.8 Was tut der Algorithmus von Hopcroft-Karp? (Maximale Matchings mit der Sperrflussmethode in Flussnetzwerken.) Was ist seine Laufzeit? 2.9 Welches Problem löst man mit der ungarischen Methode? (Gewichtsmaximale perfekte Matchings in vollständigen bipartiten Graphen, oder auch: das Zuordnungsproblem bei Kosten bzw. Nutzen für jede Paarung.) 2.10 Wie vergrößert man ein Matching M mit Hilfe eines alternierenden Weges? Was ist ein alternierender Baum? Wie sieht ein alternierender Baum aus, wenn es keinen alternierenden Weg von der Wurzel aus gibt? Was kann man über die Kardinalitäten der Levels sagen? 2.11 Was ist der zentrale Trick bei der ungarischen Methode? (Knotenmarkierungen!) 4 2.12 Was ist der Gleichheitsgraph G` ? 2.13 Formulieren und beweisen Sie den Satz von Kuhn/Munkres. 2.14 Wie wird bei der ungarischen Methode die Knotenmarkierung in einem Schritt geändert? (Gemeint ist die allgemeine Formulierung mit Mengen S [links] und T [rechts].) 2.15 Beschreiben Sie den Algorithmus „Ungarische Methode“! (Auch an einem Beispielinput.) Was ist die asymptotische Laufzeit? 2.16 Spezifizieren Sie das Problem „Stabile Paarung“. 2.17 Beschreiben Sie den Algorithmus von Gale und Shapley. 2.18 Beweisen Sie, dass der Algorithmus terminiert und eine stabile Paarung liefert. 2.19 Beweisen Sie die Verschärfung der Analyse: Der Algorithmus liefert immer dieselbe Paarung, nämlich {(best(w), w) | w ∈ W }. (Das ist natürlich eine eher schwierige Frage.) 2.20 Wenn wir im Problem „Stabile Paarung“ die Bedingungen ändern (manche Beteiligte akzeptieren mehrere Partner gleichzeitig, es gibt eine ungleiche Anzahl an Männern/Frauen), wie kann man den Algorithmus anpassen oder die Eingabe geeignet transformieren? (Übung Blatt 4 Aufgabe 2.) 3 Amortisierte Analyse 3.1 Was ist der Zweck einer „amortisierten Analyse“ eines Algorithmus oder einer Datenstruktur? 3.2 Was ist der Ansatz der „direkten“ oder „Aggregationsmethode“? Führen Sie sie am Beispiel eines Binärzählers durch. 3.3 Was ist der Ansatz der Bankkontomethode? Was muss man feststellen bzw. definieren? (Feststellen: die echten Kosten für jede Operation; definieren: die amortisierten Kosten für jede Operation.) Was ist der zentrale (und schwierigste) Schritt? (Die Formulierung einer Induktionsbehauptung über den Kontostand.) Was muss man über den Kontostand beweisen? (Dass er immer nichtnegativ bleibt.) 5 3.4 Was folgt für die Summe der echten Kosten? (≤ Summe der amortisierten Kosten.) 3.5 Erklären Sie die Bankkontomethode am Beispiel „Stack mit multipop-Operation“ [„Binärzähler“, „Stack mit Verdopplungs- und Halbierungsstrategie“]. 3.6 Was ist der Ansatz der Potenzialmethode? Was muss man feststellen bzw. definieren? (Feststellen: die echten Kosten für jede Operation; definieren: das Potenzial für jeden Zustand der Datenstruktur.) Was muss man berechnen/abschätzen? (Die amortisierten Kosten für jede Operation.) Was ist der schwierige Schritt? (Die Definition des Potenzials; aber auch die Abschätzung der amortisierten Kosten kann etwas schwieriger sein.) Was muss man dann beweisen? (Dass das Potenzial am Ende mindestens so groß ist wie am Anfang.) 3.7 Was folgt für die Summe der echten Kosten? (≤ Summe der amortisierten Kosten.) 3.8 Erklären Sie die Potenzialmethode am Beispiel „Stack mit multipop-Operation“ [„Binärzähler“, „Stack mit Verdopplungs- und Halbierungsstrategie“]. 3.9 Wo haben wir die Potenzialmethode noch verwendet? (Bei der Analyse von Fibonacci-Heaps.) 4 Implementierungen von Priority Queues 4.1 Welche Operationen gibt es bei Priority Queues? (Varianten: Grundform mit new, makePQ, insert, min, extractMin. Adressierbare PQ mit den zusätzlichen Operationen „decreaseKey“ und „delete“. „Verschmelzbare PQ“ mit der zusätzlichen Operation „union“.) 4.2 Welche Variante benötigt der Algorithmus von Dijkstra? (Die mit „decreaseKey“.) Wie viele insert-, extractMin-, decreaseKey-Operationen kommen im Algorithmus von Dijkstra höchstens vor? (n, n, m.) 4.3 Beschreiben Sie die Datenstruktur „Binomial Queues“ zur Implementierung von Priority Queues. Dazu braucht man Binomialbäume mit ihren Grundeigenschaften, die Heapbedingung und die Binärdarstellung von n, der Anzahl der Einträge. Welche Zeiger benötigt ein Knoten, damit man die notwendigen Navigationsund Umformungsschritte ausführen kann? 6 4.4 Beschreiben Sie, wie bei Binomialheaps die Operationen new, insert, min, union, extractMin auszuführen sind. Geben Sie die Laufzeiten an und begründen Sie sie. (Interessant besonders: die Operation „Union“ mit Laufzeit O(log n).) 4.5 Beschreiben Sie, wie bei Binomialheaps die Operation decreaseKey auszuführen ist. (Besonders interessant: die nicht ganz triviale Variante, die keine Knoteninhalte kopiert.) 4.6 Beschreiben Sie den Aufbau eines Fibonacci-Heaps. Geben Sie an, welche Zeiger ein Knoten benötigt. Wann wird eine Markierung gesetzt, wann wieder entfernt? 4.7 Wie ist die Potentialfunktion Φ für Fibonacci-Heaps definiert? 4.8 Beschreiben Sie die Hilfsoperationen join (für zwei Bäume) und cleanup. Was sind jeweils die tatsächlichen Kosten? Die amortisierten Kosten? 4.9 Beschreiben Sie die (einfachen) Operationen new, min, insert, makePQ, extractMin. Jeweils unter Angabe der tatsächlichen Kosten und der amortisierten Kosten. 4.10 Beschreiben Sie die Operation decreaseKey. Was sind die tatsächlichen Kosten, was die amortisierten Kosten? 4.11 In der Analyse wird eine Schranke D(n) für den maximalen Grad eines Knotens in einem Fibonacci-Heap mit n Knoten benutzt. Welche Schranke ist das? (D(n) = 1.4405 log n = O(log n).) Wie beweist man sie? (Man definiert den Rang rank(v) eines Knotens v als die Anzahl der Kinder von v und zeigt, dass ein Knoten mit Rang i mindestens Fi+2 Nachfahren hat. Wie geht dieser Beweis, in dem der Markierungsmechanismus die Hauptrolle spielt?) 5 Algorithmen für Textsuche 5.1 Was ist das Textsuch-Problem? Wie läuft der naive Algorithmus hierfür ab, welche Rechenzeit benötigt er? 5.2 Definieren Sie: „u ist echter Rand von w“. 5.3 Wie ist die „MP-Fehlerfunktion“ q 7→ f (q) im Algorithmus von KMP definiert? 7 5.4 Beschreiben Sie den Algorithmus von Knuth-Morris-Pratt, unter Benutzung der Fehlerfunktion. (Idee und Ablauf erklären, am Beispiel ausführen, oder Pseudocode: was Ihnen am besten liegt.) 5.5 Zeigen Sie, dass der KMP-Algorithmus Laufzeit O(n) hat (wenn f gegeben ist). 5.6 Formulieren Sie die im Korrektheitsbeweis benutzten Invarianten. 5.7 Wie wird die Fehlerfunktion f berechnet? Welche Laufzeit ergibt sich? 5.8 Wie ist die verfeinerte KMP-Fehlerfunktion f 0 definiert? Wie kann man sie aus f berechnen? 5.9 Welches Problem löst der Algorithmus von Aho-Corasick? 5.10 Man kann Textsuche mit einer endlichen Menge von Suchmustern auch mit Hilfe von endlichen Automaten durchführen. Wie ist ein solcher Automat zu definieren? (Blatt 6, Aufgabe 4.) Inwiefern unterscheidet sich der im AC-Algorithmus verwendete Graph hiervon? (Die Knotenmengen sind gleich! Der endliche Automat hat für jeden Zustand (im Prinzip) |Σ| Ausgangskanten, die Fehlerfunktion hat für jeden Knoten nur einen Wert.) 5.11 Wie ist der AC-Graph definiert? (Knotenmenge: alle Präfixe aller Muster in Π. Kante von Knoten v zu Knoten f (v), wenn . . . Ein Knoten ist als Ausgabeknoten markiert, wenn . . . ) 5.12 Wie läuft die Suche mit dem Algorithmus von Aho-Corasick ab? (Starten, Navigieren im Graphen, wann wird eine Ausgabe erzeugt?) Formulieren Sie die verwendete Invariante. 5.13 Wie lange dauert die Suche in einem Text S[1..n] mit dem AC-Algorithmus nach einem Muster aus Π, ohne Vorverarbeitung? (O(n + k), wobei k die Anzahl der gefundenen Vorkommen von Wörtern aus Π ist.) 5.14 Wie läuft die Vorverarbeitung im AC-Algorithmus ab, d. h. die Berechnung der Funktionen f und g? Was ist die Laufzeit? 5.15 Was sind die drei zentralen („anderen“) Ideen im Algorithmus von Boyer und Moore? (Muster mit Text „von rechts nach links“ vergleichen. Verschieben des Musters in Sprüngen („shifts“), mit zwei Regeln: Anhand des Buchstabens, der 8 zum letzten Mismatch geführt hat („bad character rule“); Anhand des Suffixes im Muster, das verglichen wurde, eventuell inklusive des ersten MismatchBuchstabens: „good-suffix-Regel“.) 5.16 Erläutern Sie BM-Textsuche, wenn man ausschließlich die BC-Regel benutzt. (Das ist die Variante von Horspool.) Es gibt zwei Varianten. Welche? (Nur das am weitesten rechts stehende Vorkommen eines Buchstabens, alle Vorkommen eines Buchstabens berücksichtigen.) 5.17 Wann ist ein Shift s nach der GS-Regel zulässig? Wie begründet man dies? (Bilder aus der Vorlesung.) Die GS-Funktion wählt die kleinste zulässige Shiftweite. 5.18 Wie läuft BM-Textsuche ab, wenn man ausschließlich die GS-Regel benutzt? Was ist die Laufzeit (kein Beweis)? 5.19 Wie läuft BM-Textsuche ab, wenn man beide Regeln kombiniert benutzt? Was ist die Laufzeit (kein Beweis)? 5.20 Wie sind die Präfix- oder Z-Werte Z2 , . . . , Zn eines Textes S[1..n] definiert? Wie kann man sie berechnen? (Erläutern Sie die Rolle der Zahlen ri bzw. li und skizzieren Sie die möglichen Fälle.) Welchen Zeitbedarf hat das Verfahren? 5.21 Bei der Berechnung der GS-Shiftwerte wird die Z-Funktion benutzt. Wie? (Man benutzt die Z-Werte der Umkehrung P [m]..P [1] des Musters P [1..m]. Dies liefert die Suffixwerte N (k).) 5.22 Was haben Suffixwerte mit den GS-Shifts zu tun? Geben Sie die entsprechenden Bilder an. („Großer Shift“ um s = m − k ≥ j entspricht einem echten Rand von P der Länge k; einen solchen echten Rand kann man an der Gleichheit N (k) = k erkennen.) („Kleiner Shift“ um s = m − k < j ist zulassig nach Mismatch bei j genau dann wenn N (k) = m − j.) 5.23 Was bedeuten die Hilfsfunktionen L(j) und `(j)? Wie kann man sie mit Hilfe der Suffixfunktion N berechnen? 5.24 Welchen Zeitbedarf hat die Vorverarbeitungsphase, die die GS-Shiftwerte für ein Muster P [1..m] berechnet? (O(m).) Viel Spaß bei der Vorbereitung und viel Erfolg bei der Prüfung! 9