Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 1 Aufgabe 1. (5 Punkte) Es seien zwei Schlangen S1 , S2 und ein Keller K gegeben. In S1 befinden sich die Zahlen 1, 2, . . . , n(n > 2) (in dieser Reihenfolge). Sie können nun die Operationen P U SHK (P OPS1 ) und P U SHS2 (P OPK ) in beliebiger Reihenfolge (soweit möglich) ausführen, bis alle Elemente in S2 angekommen sind. Geben Sie eine Permutation der Elemente an, die so nicht erzeugt werden kann und begründen Sie, warum dies so ist. Lösung: Nehmen wir an, die Zahlen 1, 2, 3 sind in der Schlange gespeichert und 1 verlässt diese als erstes. Dann kann die Permutation 3, 1, 2 nicht erzeugt werden, da, wenn 3 als erstes ausgegeben werden soll, zunächst alles auf den Stack gepushed werden muss und ein Auslesen dann nur noch in der Reihenfolge 3, 2, 1 möglich ist. Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 2 Aufgabe 2. (5 Punkte) Beschreiben Sie kurz das Prinzip der dynamischen Größenanpassung von Hashtabellen: Erläutern Sie, wie man einerseits allzuviele Anpassungsoperationen, andererseits allzugroße Speicherverschwendung vermeidet. Lösung: (s. Buch) Musterlösungen zur Klausur Informatik III – WS 02/03 Aufgabe 3. (1 Punkt) Geben Sie die Zugriffsoperationen für eine Priority Queue an. Lösung: (s. Buch) Seite 3 Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 4 Aufgabe 4. (16 Punkte) Betrachten Sie das Produkt M = M1 · M2 · . . . · Mn von n Matrizen, wobei Mi die Dimension di−1 × di , 1 6 i 6 n hat. Wir wissen, dass für die Matrixmultiplikation das Assoziativgesetz gilt, d.h. wir dürfen eine beliebige Art der Klammerung wählen und somit die Reihenfolge der einzelnen Multiplikationen festlegen. Je nachdem, in welcher Reihenfolge die Multiplikationen der Matrizen durchgeführt werden, benötigt man bei Verwendung der Schulmethode für die Matrixmultiplikation mehr oder weniger arithmetische Operationen. Entwickeln Sie unter Verwendung von dynamischer Programmierung einen Algorithmus, der in O(n3 ) Zeit eine optimale Anordnung der Matrixmultiplikationen berechnet. Lösung: Betrachte die Kosten für das Multiplizieren der Matrizen Mi · . . . · Mj (i 6 j): • Ci,i = 0 • Ci,i+1 = di−1 · di · di+1 • Ci,j = Ci,k + Ck+1,j + di−1 · dk · dj für ein k mit i 6 k < j Sei die Funktion cost wie folgt definiert: cost(i, k, j) := Ci,k + Ck+1,j + di−1 · dk · dj dann lässt sich Ci,j wie folgt schreiben: Ci,j = min{cost(i, k, j) | i 6 k < j} Da wir nicht nur nach den Kosten suchen, sondern gleichzeitig auch die optimale Klammerung berechnen wollen, speichern wir das betreffende k in der Variablen Ki,j . Algorithmus MMKosten 1: for i ← 1 to n do {Initialisierung} 2: Ci,i ← 0 3: Ki,i ← 0 4: end for 5: for l ← 2 to n do {l = Länge des betrachteten Ausdrucks} 6: for i ← 1 to n − l + 1 do 7: j ←i+l−1 8: Ci,j ← ∞ 9: for k ← i to j − 1 do {Finde billigstes“ k} ” 10: c ←cost(i, k, j) 11: if c < Ci,j then 12: Ci,j ← c 13: Ki,j ← k 14: end if 15: end for 16: end for 17: end for Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 5 Aufgabe 5. (10 Punkte) Betrachten Sie folgendes Gedicht1 : ottos mops klopft otto: komm mops komm ottos mops kommt ottos mops kotzt otto: ogottogott a) Konstruieren Sie einen (erweiterten) Trie für die Menge der in dem Gedicht benutzten Worte. Hierbei gelte otto:“ als ein Wort. ” b) Konstruieren Sie einen optimalen präfixfreien Binärcode für das Gedicht und codieren Sie damit die erste Zeile. Lösung: o t : l g o t o p o o t s p s t f o t g o t t a) k m o t m m z t t Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 6 b) Häufigkeiten: f 1 g 2 k 5 l 1 m 10 o 23 p 5 s 7 t 18 z 1 : 2 xy 14 Optimaler Codebaum: 0 1 1 0 1 0 o 1 t 1 0 [ ] 0 m 1 1 0 s k 0 1 1 1 0 : g 1 f 0 l 0 z 0 p Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 7 Aufgabe 6. (4 Punkte) Sei B ein Baum mit unendlich vielen Knoten, aber endlichem Grad in jedem Knoten. Sie möchten einen bestimmten Knoten (über eine seiner Eigenschaften) suchen; verwenden Sie hierfür DFS oder BFS? Geben Sie eine Begründung an. Lösung: DFS findet den Knoten eventuell nicht: Beispiel, ein Baum, der aus zwei am Anfang verbundenen unendlichen Pfaden besteht. DFS wird nur einen davon untersuchen. BFS findet den Knoten: Jeder konkrete Knoten hat eine endliche Tiefe. So auch der gesuchte: t. BFS untersucht erst alle Knoten der Tiefe 1, dann der Tiefe 2 usw. Um zu zeigen, dass nach endlicher Zeit auch die Knoten der Tiefe t durchsucht werden, genügt es zu zeigen, dass zu jeder Tiefe nur endlich viele Knoten existieren. Beweis durch Induktion: Tiefe 0: ok Induktionsschritt: Es gibt nur endliche viele Knoten der Tiefe n − 1. Nennen wir deren Anzahl x. Jeder dieser x Knoten hat einen endlichen Grad. D.h. es gibt eine maximale Gradzahl unter diesen Knoten y. Dann ist aber die Zahl der Knoten der Tiefe n durch xy beschränkt, da jeder Knoten der Tiefe n einen Knoten der Tiefe n − 1 zum Vater haben muss. Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 8 Aufgabe 7. (8 Punkte) Wie sehen die 3-Heaps aus, die (auch als Zwischenergebnisse) entstehen, wenn man die Zahlen 10, 21, 22, 23, 5, 8, 3, 45, 46, 10, 9, 8 in dieser Reihenfolge in einen anfangs leeren Heap einfügt? Zeichnen Sie nur die Zwischenergebnisse, die nach einer Umordnung des Heaps auftreten, sowie das Endergebnis. Lösung: 5 5 10 21 10 22 22 8 23 21 23 22 23 10 21 3 3 3 5 5 22 21 21 10 10 23 5 10 9 23 10 8 21 10 23 8 8 45 46 22 45 3 5 21 10 10 8 23 8 45 9 46 22 46 22 Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 9 Aufgabe 8. (10 Punkte) Zeigen Sie, dass die folgenden Aussagen wahr sind: a) 17 ∈ O(1). b) n(n−1) 2 ∈ O(n2 ). c) max(n3 , 10n2 ) ∈ O(n3 ). n P d) k m ∈ Θ(nm+1 ) für m ∈ N. k=1 e) Für ein Polynom p(x) vom Grad k mit positivem führenden Koeffizienten gilt p(n) ∈ Ω(nk ). Lösung: Wdh.: f ∈ O(g) ⇔ ∃n0 , c : ∀n > n0 : f (n) 6 c · g(n) f ∈ Ω(g) ⇔ g ∈ O(f ) f ∈ Θ(g) ⇔ f ∈ O(g) ∧ f ∈ Ω(g) a) 17 < 17 · 1 ∀n b) n · (n − 1)/2 = n2 /2 − n/2 < n2 = 1 · n2 ∀n > 0 c) n0 := 10 : für n > n0 ist 10n2 6 n3 = 1 · n3 Pn Pn d) O: k=1 k m 6 k=1 nm 6 n · nm 6 nm+1 Pn Pn Pn Ω : k=1 k m > k=n/2 k m > k=n/2 (n/2)m > n/2 · (n/2)m > 2−m−1 · nm+1 , setze also c := 2−(m+1) . e) Sei p(n) = ak · nk + . . . + a0 . Wähle n0 := 2 Pk−1 i=0 |ai | |ak | Dann ist ak · nk > |ak | · n · nk−1 > 2 k−1 X i=0 |ai |nk−1 > 2 k−1 X i=0 k−1 X |ai |ni > 2 ai ni Damit ist aber k−1 1 X ai ni 6 · ak nk 2 i=0 und somit k−1 1 X p(n) > ak nk − ai ni > · ak nk 2 i=0 Wähle also c := 21 ak . i=0 Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 10 Aufgabe 9. (7 Punkte) Gegeben sei der folgende Graph: 2 1 5 4 3 6 7 Bestimmen Sie die starken Zusammenhangskomponenten und geben Sie eine topologische Sortierung des reduzierten Graphen an. Warum gibt es stets eine solche? Lösung: 2 1 5 4 3 6 7 Referenzknoten der am weitesten links stehenden Komponente ist Knoten 1. Topologische Sortierung ist z.B.: 6,5,7,1,4 Die Topologische Sortierung existiert immer, da die Reduktion einen kreisfreien Graphen erzeugt. Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 11 Aufgabe 10. (5 Punkte) Sei in einem bipartiten Graphen G ein Matching M gegeben, das alle Knoten aus G überdeckt. Betrachten Sie den Graphen G0 , der sich aus G durch Entfernen aller Kanten ergibt, die nicht in M sind. a) Welchen Grad haben die Knoten in G0 ? b) Welche Struktur hat die Adjazenzmatrix von G0 ? Lösung: a) 1 b) Da G bipartit war und ein Matching existiert, das alle Knoten aus G überdeckt, müssen beide Komponenten von G gleich großsein. Nach geeigneter Umnummerierung der Knoten hat die Adja0 Pt zenzmatrix dann die Struktur: wobei P eine Permutationsmatrix ist, d.h. eine Matrix, P 0 bei der in jeder Zeile und jeder Spalte genau eine 1 steht. Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 12 Aufgabe 11. (4 Punkte) Zeigen Sie, dass in einfachen Graphen G = (V, E) gilt: log |E| ∈ O(log |V |) Lösung: In einem einfachen Graphen gibt es zwischen je zwei Knoten höchstens eine Kante (und pro Knoten höchstens eine Schleife). Damit ist |E| 6 |V |2 und somit log |E| 6 2 log |V |. Wähle also c = 2. Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 13 Aufgabe 12. (5 Punkte) Wie sieht die Union-Find-Datenstruktur aus, die bei Union durch Mengenverschmelzung entsteht, wenn auf der Menge {1, 2, . . . , 6} die Operationen A := 1 ∪ 2, B := 3 ∪ 4, C := B ∪ 6, D := A ∪ C ausgeführt werden? Lösung: D 5 5 1 1 2 3 4 1 2 3 4 5 6 6 5 Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 14 Aufgabe 13. (8 Punkte) Zeigen Sie, dass man das ungewichtete bipartite Matching-Problem mit einem Netzwerkfluss-Algorithmus lösen kann, indem man ein geeignetes Netzwerk konstruiert. Lösung: ˙ E) der bipatite Graph. Füge eine Quelle s und eine Senke t hinzu, sowie die Kanten Sei G = (A∪B, (s, a) ∀a ∈ A und (b, t) ∀b ∈ B. Richte alle Kanten zwischen A und B von A nach B und gib allen Kanten Kapazität 1. Bestimme über augmentierende Pfade einen maximalen (ganzzahligen!) Fluss f in diesem Netzwerk. Behauptung: Die von A nach B führenden Kanten mit f (e) = 1 bilden ein maximales Matching in G. 1. Sie bilden ein Matching: Jeder Knoten aus A ∪ B hat Indegree 1 oder Outdegree 1. D.h. maximal eine Flusseinheit kann ihn passieren. Damit kann aber nur eine der ausgehenden bzw. eingehenden Kanten Fluss tragen. Offensichtlich ist die Grösse des Flusses gleich der Zahl der A → B-Kanten mit Flusswert 1. 2. Es gibt einen Fluss, dessen Größe der eines maximalen Matchings entspricht. Seien M die Kanten eines maximalen Matchings. Setze f ((a, b)) := 1 für (a, b) ∈ M sowie f (s, a) = f (b, t) = 1. Damit ist in allen Knoten die Flusserhaltungsbedingung erfüllt. Musterlösungen zur Klausur Informatik III – WS 02/03 Seite 15 Aufgabe 14. (12 Punkte) Betrachten Sie das sogenannte Damenproblem: Auf einem n × n-Feld sind n Damen so zu platzieren, dass sie sich nicht gegenseitig bedrohen. Eine Dame bedroht alle Felder in der gleichen Zeile, Spalte und in den Diagonalen. Eine Dame in Feld (4, 4) bedroht also alle Felder der Spalte 4, Zeile 4 und alle Felder (4 + i, 4 + i) und (4 + i, 4 − i) mit i ∈ Z \ {0}. Da in jeder Zeile höchstens eine Dame platziert werden kann, lässt sich eine Lösung als n-Tupel (D1 , D2 , . . . , Dn ) ausdrücken, wobei Di die Position (Spalte) der Dame in der i-ten Zeile angibt. Wir beschränken uns in dieser Aufgabe auf n = 4. Der Aufruf PlatziereDame(1) der folgenden rekursiven Prozedur führt dann ein Backtracking durch: PlatziereDame(i) 1: if i = 5 then 2: Stellung ausgeben 3: HALT 4: end if 5: for j := 1 to 4 do 6: Di := j {platziere i-te Dame in Spalte j} 7: if keine Bedrohung then 8: PlatziereDame(i + 1) 9: end if 10: end for a) Konstruieren Sie den von der rekursiven Prozedur tatsächlich durchlaufenen Teil des zugehörigen Suchbaums. b) Wie oft wird überprüft, ob eine gegebene Platzierung eine Bedrohung“ ist? ” Lösung: D1 1 D2 3 D3 2 D2 4 D3 2 D4 4 D3 1 D4 3 a) b) 26 mal.