Algorithmen und Datenstrukturen Große Übung #6 Phillip Keldenich, Arne Schmidt 26.02.2017
Heute: Master-Theorem Phillip Keldenich, Arne Schmidt Große Übung 2
Vorbetrachtungen Wir betrachten rekursive Gleichungen der Form T (n) = m T (α i n) + Θ(n k ) D.h. wir haben ein Problem, welches wir in m Teilprobleme unterteilen. Um diese Teilprobleme zu konstruieren und zum Schluss wieder zusammenzuführen benötigen wir Θ(n k ) Zeit. Phillip Keldenich, Arne Schmidt Große Übung 3
Mergesort Als Beispiel dient Mergesort: function Mergesort(A, p, r) if p < r then q p+r 2 Mergesort(A, p, q) Mergesort(A, q + 1, r) Merge(A, p, q, r) end if end function Wir erhalten die folgende Rekursionsgleichung: T (n) = 2T ( n 2 ) + Θ(n) Dass T (n) Θ(n log n) gilt, wurde bereits in der Vorlesung per Induktion gezeigt. Wir wollen die Laufzeit nun anders beweisen. Phillip Keldenich, Arne Schmidt Große Übung 4
Master-Theorem Satz Sei T : N R eine Funktion mit T (n) = m α i R, 0 < α i < 1, m N und k R. Dann ist: Θ(n k ) T (n) Θ(n k log n) T (α i n) + Θ(n k ) mit, für m αk i < 1, für m αk i = 1 Θ(n c ), mit m αc i = 1, für m αk i > 1 Phillip Keldenich, Arne Schmidt Große Übung 5
Mergesort Konkret bei Mergesort: T (n) = 2T ( n 2 ) + Θ(n) Wir haben also m = 2, k = 1 und α 1 = α 2 = 1 2 Da α1 1 + α2 2 = 2 1 2 = 1, folgt nach dem Master-Theorem (Fall 2), dass T (n) Θ(n log n) Phillip Keldenich, Arne Schmidt Große Übung 6
Weitere Beispiele (1) U(n) = 13 U( n 4 ) + 27n3 + 27 U( n 16 ) + 13n Wir sehen: m = 40, k = 3, α 1 = = α 13 = 1 4 und α 14 = = α 40 = 1 16 Wir rechnen 40 α 3 i = 13 ( ) 1 3 ( ) 1 3 + 27 = 13 4 16 64 + 27 256 16 < 1 2 + 1 2 = 1 Also ist U(n) Θ(n 3 ) (Fall 1 des Master-Theorems) Phillip Keldenich, Arne Schmidt Große Übung 7
Weitere Beispiele (2) V (n) = 8 V ( n 4 ) + 18 V (n 6 ) + 7n2 + n log n + 5 Wir sehen: m = 26, k = 2, α 1 = = α 8 = 1 4 und α 9 = = α 26 = 1 6 Wir rechnen 26 α 2 i = 8 ( ) 1 2 + 18 4 ( ) 1 2 = 8 6 16 + 18 36 = 1 Also ist V (n) Θ(n 2 log n) (Fall 2 des Master-Theorems) Phillip Keldenich, Arne Schmidt Große Übung 8
Weitere Beispiele (3) W (n) = 9 W ( n 3 ) + 8n + 486 W (n 9 ) + 21 Wir sehen: m = 495, k = 1, α 1 = = α 9 = 1 3 und α 10 = = α 495 = 1 495 9. Wir rechnen α i = 9 1 3 + 486 1 6 > 1 3. Fall des Master-Theorems. Wir suchen also nach dem c: 495 αi c 1 = 1 9 3 c + 486 1 6 c = 1 9 3 c (1 + 54 1 3 c ) = 1 Also ist W (n) Θ(n 3 ) 1 + 54 1 3 c = 3c 9 c = 3 Phillip Keldenich, Arne Schmidt Große Übung 9
Weitere Beispiele (4) S(n) = 16 S( n 2 ) + n2 + 15n log n Wir sehen: m = 16, k = 2, α 1 = = α 16 = 1 2. Wir rechnen 16 αi 2 = 16 ( 1 2 2) > 1 3. Fall des Master-Theorems. Wir suchen also nach dem c: 16 Also ist S(n) Θ(n 4 ) α c i = 1 16 1 2 c = 1 2c = 16 c = 4 Phillip Keldenich, Arne Schmidt Große Übung 10
Quicksort - Worst Case Betrachten wir nun Quicksort: function Quicksort(A, p, r) if p < r then q Partition(A, p, r) Quicksort(A, p, q 1) Quicksort(A, q + 1, r) end if end function Ist das Master-Theorem direkt anwendbar? Nein! Dafür müsste man wissen, in welchem Verhältnis das Array geteilt wird. Im schlimmsten Fall wäre: T (n) = T (n 1) + Θ(n) Phillip Keldenich, Arne Schmidt Große Übung 11
Quicksort - Best Case Betrachten wir nun Quicksort: function Quicksort(A, p, r) if p < r then q Partition(A, p, r) Quicksort(A, p, q 1) Quicksort(A, q + 1, r) end if end function Im besten Fall wäre: T (n) = 2 T ( n 2 ) + Θ(n) Wie bei Mergesort liefert das Master-Theorem die Laufzeit Θ(n log n) Phillip Keldenich, Arne Schmidt Große Übung 12
Quicksort - Partition Betrachten wir Quicksort genauer: function Partition(A, p, r) x A[r] i p 1 for j p to r 1 do if A[j] x then i i + 1 vertausche A[i] und A[j] end if end for vertausche A[i + 1] und A[r] return i + 1 end function Phillip Keldenich, Arne Schmidt Große Übung 13
Quicksort - Partition Ein Beispiel: A = [5, 7, 4, 9, 1, 3, 8, 2, 6] Aufruf: Partition(A, 1, 9): x = 6, i = 0. Start der for-schleife: j = 1: 5 6 i = 1, tausche A[1] und A[1] j = 2: 7 6 j = 3: 4 6 i = 2, tausche A[2] und A[3] j = 4: 9 6 j = 5: 1 6 i = 3, tausche A[3] und A[5] j = 6: 3 6 i = 4, tausche A[4] und A[6] j = 7: 8 6 j = 8: 2 6 i = 5, tausche A[5] und A[8] Wir erhalten: A = [5, 4, 1, 3, 2, 6, 8, 7, 9] Phillip Keldenich, Arne Schmidt Große Übung 14