Professional Documents
Culture Documents
Statement Effort
MergeSort(A, left, right) { T(n)
if (left < right) { (1)
mid = floor((left + right) / 2); (1)
MergeSort(A, left, mid); T(n/2)
MergeSort(A, mid+1, right); T(n/2)
Merge(A, left, mid, right); (n)
}
}
● So T(n) = (1) when n = 1, and
2T(n/2) + (n) when n > 1
● This expression is a recurrence
● Substitution method
● Iteration method
● Master method
c n =1
n
T (n) = aT
+ cn n 1
b
a k a k −1 a
+ k −1 + + + 1 =
(a b)k +1 − 1 (
= (a b )
k
)
k
b b b (a b) − 1
a k a k −1 a
+ k −1 + + + 1 =
(a b)k +1 − 1 (
= (a b )
k
)
k
b b b (a b) − 1
a k a k −1 a
+ k −1 + + + 1 =
(a b)k +1 − 1 (
= (a b )
k
)
k
b b b (a b) − 1
■ T(n) = cn · (ak / bk)
= cn · (alog n / blog n) = cn · (alog n / n)
recall logarithm fact: alog n = nlog a
(n ) ab
T (n) = (n log b n ) a=b
(
n logb a
) ab
n( )
logb a
(
f (n) = O nlogb a −)
0
(
T (n) = nlogb a log n ) (
f ( n) = n )
logb a
c 1
( f (n) ) ( )
f (n) = nlogb a + AND
af (n / b) cf (n) for large n
David Luebke 24 10/7/2022
Using The Master Method T(n) = aT(n/b) + f(n)
● T(n) = 9T(n/3) + n
■ a=9, b=3, f(n) = n
■ nlogb a = nlog3 9 = (n2)
■ Since f(n) = O(nlog3 9 - ), where =1, case 1 applies:
( ) (
T (n) = nlogb a when f (n) = O nlogb a − )
■ Thus the solution is T(n) = (n2)
● T(n) = 2 T(n ) + lg n
● Tentukan kompleksitas running timenya !
● we shall not worry about rounding off such as n, to be
integers
● Rename m = lg n ➔ 2m = n
● T(2m) = 2T(2m/2) + m
● We can now rename S(m) = T(2m) to produce the new
recurrence
● S(m) = S(m/2) + m dengan Teorema Master
● S(m) = O(m lg m), T(n) = ……..
14 10
8 7 9 3
2 4 1
14 10
8 7 9 3
2 4 1 1 1 1 1 1
14 10
A = 16 14 10 8 7 9 3 2 4 1 = 8 7 9 3
2 4 1
14 10
8 7 9 3
A = 16 14 10 8 7 9 3 2 4 1 =
1 2 3 4 5 6 7 8 9 10 2 4 1
● So…
Parent(i) { return i/2; }
Left(i) { return 2*i; }
right(i) { return 2*i + 1; }
● An aside: How would you implement this
most efficiently?
● Another aside: Really?
16
4 10
14 7 9 3
2 8 1
A = 16 4 10 14 7 9 3 2 8 1
16
4 10
14 7 9 3
2 8 1
A = 16 4 10 14 7 9 3 2 8 1
16
4 10
14 7 9 3
2 8 1
A = 16 4 10 14 7 9 3 2 8 1
16
14 10
4 7 9 3
2 8 1
A = 16 14 10 4 7 9 3 2 8 1
16
14 10
4 7 9 3
2 8 1
A = 16 14 10 4 7 9 3 2 8 1
16
14 10
4 7 9 3
2 8 1
A = 16 14 10 4 7 9 3 2 8 1
16
14 10
8 7 9 3
2 4 1
A = 16 14 10 8 7 9 3 2 4 1
16
14 10
8 7 9 3
2 4 1
A = 16 14 10 8 7 9 3 2 4 1
16
14 10
8 7 9 3
2 4 1
A = 16 14 10 8 7 9 3 2 4 1
● So we have
T(n) T(2n/3) + (1)
● By case 2 of the Master Theorem,
T(n) = O(lg n)
● Thus, Heapify() takes linear time
1 3
2 16 9 10
14 8 7