0% found this document useful (0 votes)
23 views

Recursion Tree Method

Recursion tree notes
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views

Recursion Tree Method

Recursion tree notes
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

4.

4 The recursion-tree method for solving recurrences

4.4-1
Use a recursion tree to determine a good asymptotic upper bound on the recurrence T (n) = 3T (⌊n/2⌋) + n. Use the substitution method to verify your answer.

The subproblem size for a node at depth i is n/2i .

Thus, the tree has lg n + 1 levels and 3lg n = nlg 3 leaves.

The total cost over all nodes at depth i, for i = 0, 1, 2, … , lg n − 1, is 3i (n/2i ) = (3/2)i n.

3 3 2 3 lg n−1
T (n) = n + n + ( ) n + ⋯ + ( ) n + Θ(nlg 3 )
2 2 2
​ ​ ​

lg n−1
3 i
= ∑ ( ) n + Θ(nlg 3 )
2
​ ​

i=0
(3/2)lg n − 1
= n + Θ(nlg 3 )
(3/2) − 1

​ ​

= 2[(3/2)lg n − 1]n + Θ(nlg 3 )


= 2[nlg(3/2) − 1]n + Θ(nlg 3 )
= 2[nlg 3−lg 2 − 1]n + Θ(nlg 3 )
= 2[nlg 3−1+1 − n] + Θ(nlg 3 )
= O(nlg 3 ).

We guess T (n) ≤ cnlg 3 − dn,

T (n) = 3T (⌊n/2⌋) + n
≤ 3 ⋅ (c(n/2)lg 3 − d(n/2)) + n
= (3/2lg 3 )cnlg 3 − (3d/2)n + n
​ ​

= cnlg 3 + (1 − 3d/2)n,

where the last step holds for d ≥ 2.

4.4-2
Use a recursion tree to determine a good asymptotic upper bound on the recurrence T (n) = T (n/2) + n2 . Use the substitution method to verify your answer.

The subproblem size for a node at depth i is n/2i .

Thus, the tree has lg n + 1 levels and 1lg n = 1 leaf.

The total cost over all nodes at depth i, for i = 0, 1, 2, … , lg n − 1, is 1i (n/2i )2 = (1/4)i n2 .
lg n−1
1 i
T (n) = ∑ ( ) n2 + Θ(1)
4
​ ​

i=0

1 i
< ∑ ( ) n2 + Θ(1)
4
​ ​

​ ​

i=0
1
= n2 + Θ(1)
1 − (1/4)

= Θ(n2 ).

We guess T (n) ≤ cn2 ,

T (n) ≤ c(n/2)2 + n2
= cn2 /4 + n2
= (c/4 + 1)n2
​ ​

≤ cn2 ,

where the last step holds for c ≥ 4/3.

4.4-3
Use a recursion tree to determine a good asymptotic upper bound on the recurrence T (n) = 4T (n/2 + 2) + n. Use the substitution method to verify your answer.

The subproblem size for a node at depth i is n/2i .

Thus, the tree has lg n + 1 levels and 4lg n = n2 leaves.

The total cost over all nodes at depth i, for i = 0, 1, 2, … , lg n − 1, is 4i (n/2i + 2) = 2i n + 2 ⋅ 4i .

lg n−1
T (n) = ∑ (2i n + 2 ⋅ 4i ) + Θ(n2 )

i=0
lg n−1 lg n−1
= ∑ 2i n + ∑ 2 ⋅ 4i + Θ(n2 )
​ ​

i=0 i=0
lg n
2 −1 4lg n − 1

= n+2⋅ + Θ(n2 ) ​

2−1 4−1
​ ​

2
= (2lg n − 1)n + (4lg n − 1) + Θ(n2 )
3

2
= (n − 1)n + (n2 − 1) + Θ(n2 )
3

= Θ(n2 ).

We guess T (n) ≤ c(n2 − dn),


T (n) = 4T (n/2 + 2) + n
≤ 4c[(n/2 + 2)2 − d(n/2 + 2)] + n
= 4c(n2 /4 + 2n + 4 − dn/2 − 2d) + n

= cn2 + 8cn + 16c − 2cdn − 8cd + n ​

2
= cn − cdn + 8cn + 16c − cdn − 8cd + n
= c(n2 − dn) − (cd − 8c − 1)n − (d − 2) ⋅ 8c
≤ c(n2 − dn),

where the last step holds for cd − 8c − 1 ≥ 0.

4.4-4
Use a recursion tree to determine a good asymptotic upper bound on the recurrence T (n) = 2T (n − 1) + 1. Use the substitution method to verify your answer.

The subproblem size for a node at depth i is n − i.

Thus, the tree has n + 1 levels (i = 0, 1, 2, … , n) and 2n leaves.

The total cost over all nodes at depth i, for i = 0, 1, 2, … , n − 1, is 2i .

The n-th level has 2n leaves each with cost Θ(1), so the total cost of the n-th level is Θ(2n ).

Adding the costs of all the levels of the recursion tree we get the following:

n−1
T (n) = ∑ 2i + Θ(2n ) ​

i=0
2n −
1
= + Θ(2n )
2−1
​ ​

= 2n − 1 + Θ(2n )
= Θ(2n ).

We guess T (n) ≤ c2n − d,

T (n) ≤ 2(c2n−1 − d) + 1

= c2n − 2d + 1 ​

≤ c2 − d n

Where the last step holds for d ≥ 1. Thus T (n) = O(2n ).

4.4-5
Use a recursion tree to determine a good asymptotic upper bound on the recurrence T (n) = T (n − 1) + T (n/2) + n. Use the substitution method to verify your answer.

This is a curious one. The tree makes it look like it is exponential in the worst case. The tree is not full (not a complete binary tree of height n), but it is not polynomial either. It's easy to show O(2n )
and Ω(n2 ).
To justify that this is a pretty tight upper bound, we'll show that we can't have any other choice. If we have that T (n) ≤ cnk , when we substitue into the recurrence, the new coefficient for nk can be
1
as high as c(1 + 2k )
​ which is bigger than c regardless of how we choose the value c.

We guess T (n) ≤ c2n − 4n,

T (n) ≤ c2n−1 − 4(n − 1) + c2n/2 − 4n/2 + n


= c(2n−1 + 2n/2 ) − 5n + 4 (n ≥ 1/4)
n−1 n/2
≤ c(2 +2 ) − 4n (n ≥ 2)
= c(2n−1 + 2n−1 ) − 4n
​ ​

≤ c2n − 4n
= O(2n ).

We guess T (n) ≥ cn2 ,

T (n) ≥ c(n − 1)2 + c(n/2)2 + n


= cn2 − 2cn + c + cn2 /4 + n
= (5/4)cn2 + (1 − 2c)n + c
≥ cn2 + (1 − 2c)n + c (c ≤ 1/2)
​ ​ ​

≥ cn2
= Ω(n2 ).

4.4-6
Argue that the solution to the recurrence T (n) = T (n/3) + T (2n/3) + cn, where c is a constant, is Ω(n lg n) by appealing to the recursion tree.

We know that the cost at each level of the tree is cn by examining the tree in figure 4.6. To find a lower bound on the cost of the algorithm, we need a lower bound on the height of the tree.

The shortest simple path from root to leaf is found by following the leftest child at each node. Since we divide by 3 at each step, we see that this path has length log3 n. Therefore, the cost of the

algorithm is
c
cn(log3 n + 1) ≥ cn log3 n = n log n = Ω(n log n).
log3
​ ​ ​

4.4-7
Draw the recursion tree for T (n) = 4T (⌊n/2⌋) + cn, where c is a constant, and provide a tight asymptotic bound on its solution. Verify your answer with the substitution method.

The subproblem size for a node at depth i is n/2i .

Thus, the tree has lg n + 1 levels and 4lg n = nlg 4 = n2 leaves.

The total cost over all nodes at depth i, for i = 0, 1, 2, … , lg n − 1, is 4i (cn/2i ) = 2i cn.
lg n−1
T (n) = ∑ 2i cn + Θ(n2 ) ​

i=0
−12lg n
cn + Θ(n2 )
​ ​

=
2−1

= Θ(n2 ).

For O(n2 ), we guess T (n) ≤ dn2 − cn,

T (n) ≤ 4d(n/2)2 − 4c(n/2) + cn


= dn2 − cn.
​ ​

For Ω(n2 ), we guess T (n) ≥ dn2 − cn,

T (n) ≥ 4d(n/2)2 − 4c(n/2) + cn


= dn2 − cn.
​ ​

4.4-8
Use a recursion tree to give an asymptotically tight solution to the recurrence T (n) = T (n − a) + T (a) + cn, where a ≥ 1 and c > 0 are constants.

The tree has n/a + 1 levels.

The total cost over all nodes at depth i, for i = 0, 1, 2, … , n/a − 1, is c(n − ia).

n/a
T (n) = ∑ c(n − ia) + (n/a)ca

i=0
n/a n/a

= ∑ cn − ∑ cia + (n/a)ca
​ ​

i=0 i=0
2
= cn /a − Θ(n) + Θ(n)
= Θ(n2 ).

For O(n2 ), we guess T (n) ≤ cn2 ,

T (n) ≤ c(n − a)2 + ca + cn


≤ cn2 − 2can + ca + cn
≤ cn2 − c(2an − a − n) (a > 1/2, n > 2a)
≤ cn2 − cn
​ ​

≤ cn2
= Θ(n2 ).

For Ω(n2 ), we guess T (n) ≥ cn2 ,


T (n) ≥ c(n − a)2 + ca + cn
≥ cn2 − 2acn + ca + cn
≥ cn2 − c(2an − a − n) (a < 1/2, n > 2a)
≥ cn2 + cn
​ ​

≥ cn2
= Θ(n2 ).

4.4-9
Use a recursion tree to give an asymptotically tight solution to the recurrence T (n) = T (αn) + T ((1 − α)n) + cn, where α is a constant in the range 0 < α < 1, and c > 0 is also a constant.

We can assume that 0 < α ≤ 1/2, since otherwise we can let β = 1 − α and solve it for β .

Thus, the depth of the tree is log1/α n and each level costs cn. And let's guess that the leaves are Θ(n),

log1/α n​

T (n) = ∑ cn + Θ(n) ​


i=0 ​

= cn log1/α n + Θ(n)

= Θ(n lg n).

We can also show T (n) = Θ(n lg n) by substitution.

To prove the upper bound, we guess that T (n) ≤ dn lg n for a constant d > 0,

T (n) = T (αn) + T ((1 − α)n) + cn


≤ dαn lg(αn) + d(1 − α)n lg((1 − α)n) + cn

= dαn lg α + dαn lg n + d(1 − α)n lg(1 − α) + d(1 − α)n lg n + cn ​

= dn lg n + dn(α lg α + (1 − α) lg(1 − α)) + cn


≤ dn lg n,

where the last step holds when d ≥ −c .


α lg α+(1−α) lg(1−α)

We can achieve this result by solving the inequality

dn lg n + dn(α lg α + (1 − α) lg(1 − α)) + cn ≤ dn lg n


⟹ dn(α lg α + (1 − α) lg(1 − α)) + cn ≤ 0
⟹ d(α lg α + (1 − α) lg(1 − α)) ≤ −c ​ ​

−c
⟹ d≥ ,
α lg α + (1 − α) lg(1 − α)

To prove the lower bound, we guess that T (n) ≥ dn lg n for a constant d > 0,
T (n) = T (αn) + T ((1 − α)n) + cn
≥ dαn lg(αn) + d(1 − α)n lg((1 − α)n) + cn

= dαn lg α + dαn lg n + d(1 − α)n lg(1 − α) + d(1 − α)n lg n + cn ​

= dn lg n + dn(α lg α + (1 − α) lg(1 − α)) + cn


≥ dn lg n,

−c
where the last step holds when 0 < d ≤ α lg α+(1−α) lg(1−α) .

We can achieve this result by solving the inequality

dn lg n + dn(α lg α + (1 − α) lg(1 − α)) + cn ≥ dn lg n


⟹ dn(α lg α + (1 − α) lg(1 − α)) + cn ≥ 0
⟹ d(α lg α + (1 − α) lg(1 − α)) ≥ −c ​ ​

−c
⟹ 0<d≤ ,
α lg α + (1 − α) lg(1 − α)

Therefore, T (n) = Θ(n lg n).

You might also like