Chapter 3 Recursive Algorithms
Writing recurrences +
Writing recurrences To determine the statement execution count is a two-step problem. Write down the recurrence from the recursive code for the algorithm. Solve the recurrence.
2 n 0, T (n 1)+3 n > 0.
2 n 0, T (n 1)+3 n > 0.
2 n 0, T (n 1)+3 n > 0.
2 n 0, T (n 1)+3 n > 0.
Θ(1) n 0, T (n 1)+Θ(1) n > 0.
Θ(1) n 1, T (n/2)+θ(1) n > 1.
Θ(1) n 1, T (n/2)+θ(1) n > 1.
Θ(1) n 1, T (n/2)+θ(1) n > 1.
Θ(1) n 1, T (n/2)+θ(1) n > 1.
Figure 3.7 1 (a) n disks on peg 1. 2 3 1 2 3 (b) Move n 1 disks from peg 1 to peg 2. 1 2 3 (c) Move one disk from peg 1 to peg 3. 1 2 3 (d) Move n 1 disks from peg 2 to peg 3.
Θ(1) n = 1, 2T (n 1)+Θ(1) n > 1.
Θ(1) n = 1, 2T (n 1)+Θ(1) n > 1.
Θ(1) n = 1, 2T (n 1)+Θ(1) n > 1.
Θ(1) n = 1, 2T (n 1)+Θ(1) n > 1.
Solving recurrences backward substitution, the recursion-tree method, guess and verify, and the master method.
Backward substitution T (n 1)+1 1 n 0, = T (n 2)+1 + 1 T (n 1)+1 n > 0. = T (n 3)+1 + 1 + 1 = T (n n)+ = T (0)+n = 1 + n n }} 1 + 1 + + 1 n + 1 Θ(n)
Design Patterns for Data Structures 1 n 1, T (n/2)+1 n > 1. T (n/2)+1 = T (n/2 1 )+1 = T (n/4)+1 + 1 = T (n/2 2 )+1 + 1 = T (n/8)+1 + 1 + 1 = T (n/2 3 )+1 + 1 + 1 = T (n/n)+1 + 1 + + 1 = T (n/2 k )+ = T (1)+k = 1 + k 1 + lgn Θ(lgn) k }} 1 + 1 + + 1
Design Patterns for Data Structures 1 n 1, T (n/2)+1 n > 1. T (n/2)+1 = T (n/2 1 )+1 = T (n/4)+1 + 1 = T (n/2 2 )+1 + 1 = T (n/8)+1 + 1 + 1 = T (n/2 3 )+1 + 1 + 1 = T (n/n)+1 + 1 + + 1 = T (n/2 k )+ = T (1)+k = 1 + k 1 + lgn Θ(lgn) k }} 1 + 1 + + 1
Design Patterns for Data Structures 1 n 1, T (n/2)+1 n > 1. T (n/2)+1 = T (n/2 1 )+1 = T (n/4)+1 + 1 = T (n/2 2 )+1 + 1 = T (n/8)+1 + 1 + 1 = T (n/2 3 )+1 + 1 + 1 = T (n/n)+1 + 1 + + 1 = T (n/2 k )+ = T (1)+k = 1 + k 1 + lgn Θ(lgn) k }} 1 + 1 + + 1
Recurrence tree method Example: 1 n = 1, 2T (n/2)+n n > 1.
Figure 3.8 height = k n T(n) n/2 n/2 T(n/2) T(n/2) 1(n) = n 2(n/2) = n n/4 T(n/4) n/4 n/4 n/4 T(n/4) T(n/4) T(n/4) 4(n/4) = n n/8 n/8 n/8 n/8 n/8 n/8 n/8 n/8 T(n/8) T(n/8) T(n/8) T(n/8) T(n/8) T(n/8) T(n/8) T(n/8)...... 1 1... 1 T(1) T(1)......... T(n/8) 8(n/8) = n... n(n/n) = n Total = nk
Recurrence tree method Example: 1 n = 1, 2T (n/2)+n n > 1. Conclusion: Θ(nlgn)
Guess and verify 1 n = 1, 2T (n 1)+1 n > 1. Prove: 2 n 1 2 n 1 = n = 1 T (1)=2 1 1 = T (1)=1 = T (n) 1 = 1
Design Patterns for Data Structures 1 n = 1, 2T (n 1)+1 n > 1. Prove: T (n + 1) =2 n+1 1 2 n 1 2 n 1 Prove assuming as ind. hyp. T (n + 1) = T (n) [n := n + 1] 2T (n + 1 1)+1 = 2T (n)+1 = 2(2 n 1)+1 = 2 n+1 1
1 n 1, T (n/2)+1 n > 1. Guess and verify Prove: lgn + 1 lgn + 1 = n = 1 T (1)=lg1 + 1 = T (1)=1 = T (n) 1 = 1
1 n 1, T (n/2)+1 n > 1. Prove: lgn + 1 Prove T (2n) =lg(2n)+1 assuming T (n) =lgn + 1 as ind. hyp. T (2n) = T (n) [n := 2n] T (2n/2)+1 = T (n)+1 = lgn + 1 + 1 = lgn + lg2 + 1 = lga + lgb = lg(ab) lg(2n)+1
The master method Master theorem: Let a be an integer a 1, b be a real number b > 1, andc be a real number c > 0. Given a recurrence of the form 1 if n = 1, at (n/b)+n c if n > 1. then, for n an exact power of b, if log b a < c, Θ(n c ), if log b a = c, Θ(n c logn), and if log b a > c, Θ(n log b a ).
The master method Master theorem: Let a be an integer a 1, b be a real number b > 1, andc be a real number c > 0. Given a recurrence of the form 1 if n = 1, at (n/b)+n c if n > 1. then, for n an exact power of b, if log b a < c, Θ(n c ), if log b a = c, Θ(n c logn), and if log b a > c, Θ(n log b a ). 1 n = 1, 2T (n/2)+n n > 1. a = 2 b = 2 c = 1 n Θ(nlgn)
Figure 3.9 Properties of asymptotic bounds 3 n 2 lgn f.n 1 0 1 1 2 0 1 2 3 4 n
Figure 3.9 Properties of asymptotic bounds 3 n f.n 2 1 0 lgn 1 If n 1, thenlgn 0. If n 2, thenlgn 1. For all positive values of n, n > lgn. 1 2 0 1 2 3 4 n
Figure 3.9 Properties of asymptotic bounds 3 n f.n 2 1 0 lgn 1 If n 1, thenlgn 0. If n 2, thenlgn 1. For all positive values of n, n > lgn. 1 2 0 1 2 3 4 n
Figure 3.9 Properties of asymptotic bounds 3 n f.n 2 1 0 lgn 1 If n 1, thenlgn 0. If n 2, thenlgn 1. For all positive values of n, n > lgn. 1 2 0 1 2 3 4 n
f.n = 3n 2 + 2nlgn = O(n 2 ) f n 3n 2nlgn O n c n 0 f.n = 3n 2 + 2nlgn cn 2 n n 0 3n 2 + 2nlgn lgn 3n 2 + 2n n = 5n 2 = c = 5 cn 2 c = 5 n 0 n 0
Figure 3.10 40 n 3 n 2 lgn n 2 nlgn 30 2 n f.n 20 n! 10 0 0 5 10 n n lgn 1
Figure 3.10 4000 2 n f.n 3000 2000 n! n 3 1000 0 0 5 10 n n 2 lgn n 2
Figure 3.11 3nlgn + 5n 2n 2 + 7n O(n) O(n lg n) 17nlgn 2n + 5 6lgn 1 2 n! O(n) O(nlgn)
Figure 3.11 830 3nlgn + 5n Ω(nlgn) Ω(n) 1 2 n! 2n + 5 9n 18 6lgn Ω(n) Ω(nlgn)
O(1) O(lgn) O(n) O(nlgn) O(n 2 ) O(n 3 ) O(2 n ) O(n!) Ω(1) Ω(lgn) Ω(n) Ω(nlgn) Ω(n 2 ) Ω(n 3 ) Ω(2 n ) Ω(n!)