KIT Jun.-Prof. Henning Meyerhenke, Jun.-Prof. Dennis Hofheinz Institut f¨ ur Theoretische Informatik Christian Staudt, Christoph Striecks ¨ 4. Ubungsblatt zu Algorithmen I im SS 2015 https://crypto.iti.kit.edu/algo-sose15 {staudt,striecks}@kit.edu Mit Lo agen ¨sungsvorschl¨ Aufgabe 1 (Hashing, 2 + 3 + 1 + 1 Punkte) Sei eine anfangs leere Hashtabelle gegeben, die nat¨ urliche Zahlen speichert und 17 Eintr¨age besitzt. Weiterhin sei h mit ha,b (x) = (ax + b) mod 17 eine Hashfunktion, f¨ ur Konstanten a, b ∈ N. a) Nutzen Sie das Hashing mit verketteten Listen, indem Sie jeweils den Hashwert der Elemente 24, 35, 41, 31, 9, 27, 15, 45, 10, 17, 21, 4, 18, 13, 47, 55 bilden und in die Hashtabelle einf¨ ugen. (Dabei seien a = 2 und b = 7 die Konstanten der Hashfunktion h.) Geben Sie eine Darstellung der Hashtabelle nach dem Einf¨ ugen der Hashwerte von 45 und 55 an. b) Nutzen Sie das Hashing mit linearer Suche (und Puffergr¨oße m0 = 3), um jeweils die Hashwerte der Elemente aus a) in eine neue anfangs leere Hashtabelle einzutragen. (Dabei seien a = 2 und b = 7.) Geben Sie eine Darstellung der Hashtabelle nach dem Einf¨ ugen der Hashwerte von 45 und 55 an. c) Wie viele Hashtabelleneintr¨ age werden beim Einf¨ ugen der Elemente in a) und b) jeweils betrachtet? d) Wie groß ist der Speicherverbrauch der Hashtabellen aus a) und b) in Einheiten, wenn jeder Zeiger und jedes Element der Hashtabelle eine Einheit belegen? (Gehen Sie von verketteten Listen aus der Vorlesung aus.) Lo ¨sungsvorschlag: Wir erhalten nach Auswertung der Hashfunktion: h(24) = 4, h(35) = 9, h(41) = 4, h(31) = 1, h(9) = 8, h(27) = 10, h(15) = 3, h(45) = 12, h(10) = 10, h(17) = 7, h(21) = 15, h(4) = 15, h(18) = 9, h(13) = 16, h(47) = 16 und h(55) = 15. a) Nach Einf¨ ugen des Hashwerts von 45 ergibt sich: 0 1 2 3 4 5 6 7 8 31 15 41 9 24 Nach Einf¨ ugen des Hashwerts von 55 ergibt sich: 0 1 2 3 4 5 6 7 8 31 15 41 17 9 24 b) Nach Einf¨ ugen des Hashwerts von 45 ergibt sich: 0 1 2 3 4 5 6 7 8 9 10 31 15 24 41 9 35 27 1 9 35 10 27 11 12 45 13 14 15 16 9 18 35 10 10 27 11 12 45 13 14 15 55 4 21 16 47 13 13 14 11 12 45 15 16 17 18 19 Nach Einf¨ ugen des Hashwerts von 55 ergibt sich: 0 1 2 3 4 5 6 7 8 9 10 31 15 24 41 17 9 35 27 11 10 12 45 13 18 14 15 21 16 4 17 13 18 47 19 55 c) Mit “betrachten” war hier gemeint, auf wie viele Hasheintr¨age beim Einf¨ ugen zugegriffen wird. – Hashing mit einfach verketteten Listen (wobei beim Erzeugen der Hashtabelle noch keine Listen angelegt werden, erst beim ersten Einf¨ ugen eines Elements wird eine leere Liste mit Dummy-Element erzeugt): Nach dem Einf¨ ugen von ha,b (45) sind es 16 (Elemente und Dummy-Elemente), nach Einf¨ ugen von ha,b (55) sind es 32. – Hashing mit linearer Suche: Nach dem Einf¨ ugen von ha,b (45) sind es 9, nach Einf¨ ugen von ha,b (55) sind es 30 Eintr¨ age. Weitere L¨ osungen sind denkbar, wenn “betrachten” anders ausgelegt wird. d) – Hashing mit einfach verketteten Listen (wobei beim Erzeugen der Hashtabelle noch keine Listen angelegt werden, erst beim ersten Einf¨ ugen eines Elements wird eine leere Liste mit Dummy-Element erzeugt): 2 · 16 + 2 · 10 = 52 (Elemente und Zeiger + Dummy-Element und Zeiger) – Hashing mit linearer Suche: 16 Weitere L¨ osungen sind denkbar. (Zum Beispiel k¨onnen beim Erzeugen der Hashtabelle f¨ ur jeden Eintrag leere Listen angelegt werden oder es k¨onnten doppelt verkettete Listen verwendet werden, etc.) Aufgabe 2 (Plagiatsdetektor, 2 + 2) Ein Paar von Zeichenketten {s1 , s2 } heißt ’k-verd¨achtig’, wenn beide Strings einen Substring der L¨ ange ≥ k gemeinsam haben. a) Entwerfen Sie einen effizienten Algorithmus, der als Eingabe eine Menge von n Strings sowie eine positive Ganzzahl k erh¨ alt und als Ausgabe alle k-verd¨achtigen Paare zur¨ uckgibt. Nehmen Sie an, dass die meisten Paare nicht k-verd¨achtig sind. Verwenden Sie f¨ ur die Implementierung die aus der Vorlesung bekannte Datenstruktur Hashtabelle. b) Analysieren Sie die Laufzeit Ihres Algorithmus in Abh¨angigkeit von n und k. Sie k¨onnen voraussetzen, dass sich ein String der L¨ ange k in Zeit O(k) hashen l¨asst. L¨ osungsvorschlag: ange der i-ten Zeichenkette. F¨ ur jede Zeichenkette k¨onnen wir li − k + 1 Hashwerte a) Sei li die L¨ berechnen, einen f¨ ur jeden Substring der L¨ange k. Wir f¨ ugen diese Hashwerte in eine Hashtabelle und halten zus¨ atzlich fest, zu welchem String ein Hashwert geh¨ort, sowie den Offset, an dem der entsprechende Substring auftritt. Eine Kollision zeigt an, dass zwei Substrings der L¨ ange k potentiell identisch sind. b) Ein String der L¨ ange l hat l − k + 1 Substrings der L¨ange k. Sei lmax die maximale L¨ange eines Strings aus der Eingabe. F¨ ur jeden Substring muss ein Hashwert in Zeit Th (k) ∈ O(k) berechnet werden. Zur Plagiatserkennung muss dies f¨ ur jeden der n Strings aus der Eingabe ausgef¨ uhrt werden. Damit ergibt sich ein Algorithmus der n Strings in Laufzeit T (n) ≤ n · (lmax − k + 1) · Th (k) verarbeitet. Asymptotisch ist die Laufzeit damit in O(n · lmax · k). 2 Aufgabe 3 (Wahrscheinlichkeitstheorie, 1 + 1 + 1 + 2 (Zusatzpunkte)) Der ebenso geniale wie einfallsreiche Wissenschaftler und Superb¨osewicht Doktor Meta ist gesch¨ aftig. Da er sich auf seine menschlichen Gehilfen nicht verlassen kann, hat er beschlossen, einen willenlosen Automaten in Form eines mechanischen Arbeiters herzustellen. Von Donnerschl¨agen begleitet beginnt er die Arbeit an dieser neuartigen Erfindung, die er Ro-bo-ter nennt. Der Bausatz eines schwedischen M¨obelhauses (røbøt) enth¨ alt neben einem Inbusschl¨ ussel einen jeweils unersch¨opflichen Vorrat an 426 unterschiedlichen Komponenten. Beim Zusammenbau muss Doktor Meta darauf achten, nicht versehentlich zweimal das gleiche Teil zu verbauen, da dies zu einem unbrauchbaren Gehilfen f¨ uhren w¨ urde. Er geht dabei folgendermaßen vor: Er zieht mit Zur¨ ucklegen zuf¨allig gleichverteilt n Zahlen aus der Menge {1, . . . , 426}. Sei x = (x1 , x2 , ..., xn ) die Folge der gezogenen Zahlen. a) Wie viele paarweise verschiedene Folgen x kann es geben? b) Wie viele paarweise verschiedene Folgen x kann es geben, sodass f¨ ur jede Folge gilt: ∀i, j ∈ {1, . . . , n}, i 6= j : xi 6= xj ? c) Berechnen Sie die relative H¨ aufigkeit f¨ ur die Folgen aus b). d) Zusatzaufgabe. Wie groß darf n maximal gew¨ahlt werden, sodass die relative H¨aufigkeit f¨ ur die Folgen aus b) gr¨ oßer oder gleich 0.5 betr¨agt? Hinweis: Vereinfachen Sie zun¨ achst Ihr Ergebnis aus c) mithilfe der N¨aherung f¨ ur große Zahlen √ n n ∈ N: n! ≈ 2πn(n/e) . Versuchen Sie nicht, Ihre Formel nach n aufzul¨osen, eine numerische L¨osung gen¨ ugt. L¨ osungsvorschlag: a) Insgesamt gibt es 426n paarweise verschiedene Folgen von x. b) Wir erhalten 426 · 461 · · · (426 − (n − 1)) = 426!/(426 − n)! paarweise verschiedene Folgen von x mit den oben genannten Eigenschaften. c) Die relative H¨ aufigkeit betr¨ agt 426! (426−n)!·426n . d) Wir vereinfachen die Formel aus b) zu (426/(426 − n))(426.5−n) · e(−n) und erhalten n ≤ 24. 3