1 Algorithmen und Datenstrukturen Wintersemester 2014/15 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 Ausgabe: a) Laufzeit? Feld B mit k kleinsten Zahlen aus A b) B aufsteigend? KSmallest1(Feld vom Typ int A, int k ) c) A unverändert? 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-4 Aufgabe 5 Eingabe: Feld A mit n verschiedenen ganzen Zahlen 1≤k ≤n Ausgabe: a) Laufzeit? 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 ?