04/19/23 1
Analysis of Algorithms
Lecture: Solving recurrence by
recursion-tree method
04/19/23 2
Problem of the day
• How many multiplications do you need to compute 316?
316 =38 x 38
38 =34 x 34
34 =32 x 32
32 =3 x 3
316 =3 x 3 x 3 …. x 3 Answer: 15
Answer: 4
04/19/23 3
Outline
• Review of last lecture – analyzing recursive algorithms– Defining recurrence relation
• Today: analyzing recursive algorithms– Solving recurrence relation
04/19/23 4
Solving recurrence
1. Recursion tree or iteration method- Good for guessing an answer
2. Substitution method- Generic method, rigid, but may be hard
3. Master method- Easy to learn, useful in limited cases only
- Some tricks may help in other cases
04/19/23 5
Recurrence for merge sort
T(n) =(1) if n = 1;
2T(n/2) + (n) if n > 1.
We will usually ignore the base case, assuming it is always a constant (but not 0).
04/19/23 6
Recursion tree for merge sort
Solve T(n) = 2T(n/2) + dn, where d > 0 is constant.
04/19/23 7
Recursion tree for merge sort
Solve T(n) = 2T(n/2) + dn, where d > 0 is constant.
T(n)
04/19/23 8
Recursion tree for merge sort
Solve T(n) = 2T(n/2) + dn, where d > 0 is constant.
T(n/2) T(n/2)
dn
04/19/23 9
Recursion tree for merge sort
Solve T(n) = 2T(n/2) + dn, where d > 0 is constant.
dn
T(n/4) T(n/4) T(n/4) T(n/4)
dn/2 dn/2
04/19/23 10
Recursion tree for merge sort
Solve T(n) = 2T(n/2) + dn, where d > 0 is constant.
dn
dn/4 dn/4 dn/4 dn/4
dn/2 dn/2
(1)
…
04/19/23 11
Recursion tree for merge sort
Solve T(n) = 2T(n/2) + dn, where d > 0 is constant.
dn
dn/4 dn/4 dn/4 dn/4
dn/2 dn/2
(1)
…
h = log n
04/19/23 12
Recursion tree for merge sort
Solve T(n) = 2T(n/2) + dn, where d > 0 is constant.
dn
dn/4 dn/4 dn/4 dn/4
dn/2 dn/2
(1)
…
h = log n
dn
04/19/23 13
Recursion tree for merge sort
Solve T(n) = 2T(n/2) + dn, where d > 0 is constant.
dn
dn/4 dn/4 dn/4 dn/4
dn/2 dn/2
(1)
…
h = log n
dn
dn
04/19/23 14
Recursion tree for merge sort
Solve T(n) = 2T(n/2) + dn, where d > 0 is constant.
dn
dn/4 dn/4 dn/4 dn/4
dn/2 dn/2
(1)
…
h = log n
dn
dn
dn
…
04/19/23 15
Recursion tree for merge sort
Solve T(n) = 2T(n/2) + dn, where d > 0 is constant.
dn
dn/4 dn/4 dn/4 dn/4
dn/2 dn/2
(1)
…
h = log n
dn
dn
dn
#leaves = n (n)
…
04/19/23 16
Recursion tree for merge sort
Solve T(n) = 2T(n/2) + dn, where d > 0 is constant.
dn
dn/4 dn/4 dn/4 dn/4
dn/2 dn/2
(1)
…
h = log n
dn
dn
dn
#leaves = n (n)
Total(n log n)
…
Later we will usually ignore d
04/19/23 17
Recurrence for computing powerint pow (b, n)
m = n >> 1;p=pow(b,m)*pow(b,m);if (n % 2)
return p * b;else
return p;
int pow (b, n)
m = n >> 1;
p = pow (b, m);
p = p * p;
if (n % 2)
return p * b;
else
return p;
T(n) = T(n/2)+(1) T(n) = 2T(n/2)+(1)
Which algorithm is more efficient asymptotically?
04/19/23 18
Time complexity for Alg1
Solve T(n) = T(n/2) + 1
• T(n) = T(n/2) + 1
= T(n/4) + 1 + 1
= T(n/8) + 1 + 1 + 1
= T(1) + 1 + 1 + … + 1
= Θ (log(n)) log(n)
Iteration method
04/19/23 19
Time complexity for Alg2
Solve T(n) = 2T(n/2) + 1.
04/19/23 20
Time complexity for Alg2
Solve T(n) = 2T(n/2) + 1.
T(n)
04/19/23 21
Time complexity for Alg2
T(n/2) T(n/2)
1
Solve T(n) = 2T(n/2) + 1.
04/19/23 22
Time complexity for Alg2
1
T(n/4) T(n/4) T(n/4) T(n/4)
1 1
Solve T(n) = 2T(n/2) + 1.
04/19/23 23
Time complexity for Alg2
1
1 1 1 1
1 1
(1)
…Solve T(n) = 2T(n/2) + 1.
04/19/23 24
Time complexity for Alg2
1
1 1 1 1
1 1
(1)
…
h = log n
Solve T(n) = 2T(n/2) + 1.
04/19/23 25
Time complexity for Alg2
1
1 1 1 1
1 1
(1)
…
h = log n
1
Solve T(n) = 2T(n/2) + 1.
04/19/23 26
Time complexity for Alg2
1
1 1 1 1
1 1
(1)
…
h = log n
1
2
Solve T(n) = 2T(n/2) + 1.
04/19/23 27
Time complexity for Alg2
1
1 1 1 1
1 1
(1)
…
h = log n
1
2
4
…
Solve T(n) = 2T(n/2) + 1.
04/19/23 28
Time complexity for Alg2
1
1 1 1 1
1 1
(1)
…
h = log n
1
2
4
#leaves = n (n)
…
Solve T(n) = 2T(n/2) + 1.
04/19/23 29
Time complexity for Alg2
1
1 1 1 1
1 1
(1)
…
h = log n
1
2
4
#leaves = n (n)
…
Solve T(n) = 2T(n/2) + 1.
Total(n)
04/19/23 30
More iteration method examples
• T(n) = T(n-1) + 1
= T(n-2) + 1 + 1
= T(n-3) + 1 + 1 + 1
= T(1) + 1 + 1 + … + 1
= Θ (n) n - 1
04/19/23 31
More iteration method examples
• T(n) = T(n-1) + n
= T(n-2) + (n-1) + n
= T(n-3) + (n-2) + (n-1) + n
= T(1) + 2 + 3 + … + n
= Θ (n2)
04/19/23 32
3-way-merge-sort3-way-merge-sort (A[1..n])
If (n <= 1) return;3-way-merge-sort(A[1..n/3]);3-way-merge-sort(A[n/3+1..2n/3]);3-way-merge-sort(A[2n/3+1.. n]);Merge A[1..n/3] and A[n/3+1..2n/3];Merge A[1..2n/3] and A[2n/3+1..n];
•Is this algorithm correct?•What’s the recurrence function for the running
time?•What does the recurrence function solve to?
04/19/23 33
Unbalanced-merge-sort
ub-merge-sort (A[1..n])if (n<=1) return;
ub-merge-sort(A[1..n/3]);
ub-merge-sort(A[n/3+1.. n]);
Merge A[1.. n/3] and A[n/3+1..n].
•Is this algorithm correct?•What’s the recurrence function for the running
time?•What does the recurrence function solve to?
04/19/23 34
More recursion tree examples
• T(n) = 3T(n/3) + n
• T(n) = T(n/3) + T(2n/3) + n
• T(n) = 3T(n/4) + n
• T(n) = 3T(n/4) + n2
Top Related