1 Algorithmen und Datenstrukturen Wintersemester 2015/16 26. Vorlesung Probeklausur M.Sc. Krzysztof Fleszar Lehrstuhl für Informatik I 2 Aufgabe 1 MyAlgorithm(Feld vom Typ int A, int ` = 1, int r = A.leng th) if ` < r then m = b(` + r )/2c MyAlgorithm(A, `, m) for i = ` to r do Print(A[i ]) // gibt A[i] aus MyAlgorithm(A, m + 1, r ) 2 Aufgabe 1 MyAlgorithm(Feld vom Typ int A, int ` = 1, int r = A.leng th) if ` < r then m = b(` + r )/2c MyAlgorithm(A, `, m) for i = ` to r do Print(A[i ]) // gibt A[i] aus MyAlgorithm(A, m + 1, r ) a) Rekursionsgleichung für die asymptotische Worst-Case-Laufzeit T (n)? 2 Aufgabe 1 MyAlgorithm(Feld vom Typ int A, int ` = 1, int r = A.leng th) if ` < r then m = b(` + r )/2c MyAlgorithm(A, `, m) for i = ` to r do Print(A[i ]) // gibt A[i] aus MyAlgorithm(A, m + 1, r ) a) Rekursionsgleichung für die asymptotische Worst-Case-Laufzeit T (n)? b) Rekursionsgleichung lösen! 2 Aufgabe 1 MyAlgorithm(Feld vom Typ int A, int ` = 1, int r = A.leng th) if ` < r then m = b(` + r )/2c MyAlgorithm(A, `, m) for i = ` to r do Print(A[i ]) // gibt A[i] aus MyAlgorithm(A, m + 1, r ) a) Rekursionsgleichung für die asymptotische Worst-Case-Laufzeit T (n)? b) Rekursionsgleichung lösen! c) Was gibt MyAlgorithm(A) für A = h1, 2, 3, 4i aus? 3 Aufgabe 2 MakeLeaf(Node v ) 1 while v .lef t 6= nil do 2 RightRotate(v ) 3 4 5 6 if v .r ig ht 6= nil then while v .r ig ht .lef t 6= nil do RightRotate(v .r ig ht ) LeftRotate(v ) 3 Aufgabe 2 MakeLeaf(Node v ) 1 while v .lef t 6= nil do 2 RightRotate(v ) 3 4 5 6 if v .r ig ht 6= nil then while v .r ig ht .lef t 6= nil do RightRotate(v .r ig ht ) LeftRotate(v ) v 2 1 4 3 a) MakeLeaf(Node v ) ? 3 Aufgabe 2 MakeLeaf(Node v ) 1 while v .lef t 6= nil do 2 RightRotate(v ) 3 4 5 6 if v .r ig ht 6= nil then while v .r ig ht .lef t 6= nil do RightRotate(v .r ig ht ) LeftRotate(v ) v 2 1 4 3 a) MakeLeaf(Node v ) ? b) MakeLeaf korrekt? 4-1 Aufgabe 5 Eingabe: Feld A mit n verschiedenen ganzen Zahlen 1≤k ≤n Ausgabe: Feld B mit k kleinsten Zahlen aus A 4-2 Aufgabe 5 Eingabe: Feld A mit n verschiedenen ganzen Zahlen 1≤k ≤n Ausgabe: Feld B mit k kleinsten Zahlen aus A KSmallest1(Feld vom Typ int A, int k ) MergeSort(A) Sei B [1..k ] ein neues Feld vom Typ int. for i = 1 to k do B [i ] = A[i ] return B 4-3 Aufgabe 5 Eingabe: Feld A mit n verschiedenen ganzen Zahlen 1≤k ≤n a) Laufzeit? Ausgabe: Feld B mit k kleinsten Zahlen aus A KSmallest1(Feld vom Typ int A, int k ) MergeSort(A) Sei B [1..k ] ein neues Feld vom Typ int. for i = 1 to k do B [i ] = A[i ] return B b) B aufsteigend? c) A unverändert? 4-4 Aufgabe 5 Eingabe: Feld A mit n verschiedenen ganzen Zahlen 1≤k ≤n a) Laufzeit? Ausgabe: Feld B mit k kleinsten Zahlen aus A b) B aufsteigend? KSmallest2(Feld vom Typ int A, int k ) c) A unverändert? BuildMinHeap(A) Fasse A als Prioritätsschlange auf. Sei B [1..k ] ein neues Feld vom Typ int. for i = 1 to k do B [i ] = A.ExtractMin() // funktioniert analog zu ExtractMax aus Vorlesung return B 4-5 Aufgabe 5 KSmallest3(Feld vom Typ int A, int k ) p = Select(A, 1, A.leng th, k ) Sei B [1..k ] ein neues Feld vom Typ int. j =1 for i = 1 to A.leng th do if A[i ] ≤ p then B [j ] = A[i ] j =j +1 return B a) Laufzeit? b) B aufsteigend? c) A unverändert? 4-6 Aufgabe 5 KSmallest4(Feld vom Typ int A, int k ) Sei T ein neuer Rot-Schwarz-Baum. for i = 1 to k do T .Insert(A[i ]) for i = k + 1 to n do if A[i ] < T .Maximum().key then T .Delete(T .Maximum()) T .Insert(A[i ]) Sei B [1..k ] ein neues Feld vom Typ int. ptr = T .Minimum() for i = 1 to k do B [i ] = ptr .key ptr = ptr .Successor() return B a) Laufzeit? b) B aufsteigend? c) A unverändert? 4-7 Aufgabe 5 KSmallest4(Feld vom Typ int A, int k ) Sei T ein neuer Rot-Schwarz-Baum. for i = 1 to k do T .Insert(A[i ]) for i = k + 1 to n do if A[i ] < T .Maximum().key then T .Delete(T .Maximum()) T .Insert(A[i ]) Sei B [1..k ] ein neues Feld vom Typ int. ptr = T .Minimum() for i = 1 to k do B [i ] = ptr .key ptr = ptr .Successor() return B a) Laufzeit? b) B aufsteigend? c) A unverändert? e) Zahlen in T zum Zeitpunkt i ? 5 Zusatzaufgabe Finde z! z 5 Zusatzaufgabe Finde z! r z 5 Zusatzaufgabe Finde z! z Zu Beginn: r = 1. r Nach jeder Rückkehr zu s erhöhe r auf 5 Zusatzaufgabe Finde z! z Zu Beginn: r = 1. r Nach jeder Rückkehr zu s erhöhe r auf (1) r = r + 1 (2) r = 2r 6 Zusatzaufgabe Finde z ! z Zu Beginn: r = 1. r Nach jeder Rückkehr zu s erhöhe r auf (1) r = r + 1 (2) r = 2r Höchstens zurückgelegte Distanz? D1 = ? D2 = ? 6 Zusatzaufgabe Finde z ! z Zu Beginn: r = 1. r Nach jeder Rückkehr zu s erhöhe r auf (1) r = r + 1 (2) r = 2r Höchstens zurückgelegte Distanz? D1 = ? D2 = ? Exakt und in Θ -Notation! 7 Aufgabe 4 Eingabe: Feld A mit n Zahlen; n gerade. Jede Zahl kommt genau 2 mal vor. Ausgabe: Größter Abstand dmax eines Zahlenpaares. 7 Aufgabe 4 Eingabe: Feld A mit n Zahlen; n gerade. Jede Zahl kommt genau 2 mal vor. Ausgabe: Größter Abstand dmax eines Zahlenpaares. b) Algorithmus mit Laufzeit O (n log n)! 7 Aufgabe 4 Eingabe: Feld A mit n Zahlen; n gerade. Jede Zahl kommt genau 2 mal vor. Ausgabe: Größter Abstand dmax eines Zahlenpaares. a) Algorithmus mit Laufzeit O (ndmax )! b) Algorithmus mit Laufzeit O (n log n)!