CS 253: Algorithms Chapter 4 Divide-and-Conquer Recurrences Master Theorem Credit: Dr. George Bebis Recurrences and Running Time Recurrences arise when an algorithm contains recursive calls to itself Running time is represented by an equation or inequality that describes a function in terms of its value on smaller inputs. T(n) = T(n-1) + n What is the actual running time of the algorithm? i.e. T(n) = ? Need to solve the recurrence ◦ Find an explicit formula of the expression ◦ Bound the recurrence by an expression that involves n Example Recurrences T(n) = T(n-1) + n Θ(n2) Recursive algorithm that loops through the input to eliminate one item T(n) = T(n/2) + c Θ(lgn) Recursive algorithm that halves the input in one step T(n) = T(n/2) + n Θ(n) Recursive algorithm that halves the input but must examine every item in the input T(n) = 2T(n/2) + 1 Θ(n) Recursive algorithm that splits the input into 2 halves and does a constant amount of other work BINARY-SEARCH Finds if x is in the sorted array A[lo…hi] Alg.: BINARY-SEARCH (A, lo, hi, x) if (lo > hi) 1 2 3 4 return FALSE 2 3 5 7 mid (lo+hi)/2 if x = A[mid] lo return TRUE if ( x < A[mid] ) BINARY-SEARCH (A, lo, mid-1, x) if ( x > A[mid] ) BINARY-SEARCH (A, mid+1, hi, x) 5 6 9 7 8 10 11 12 mid hi Example 1 A[8] = {1, 2, 3, 4, 5, 7, 9, 11} lo = 1 hi = 8 x=7 1 2 3 4 5 6 7 8 1 2 3 4 5 7 9 11 5 6 7 1 2 3 4 5 7 9 mid = 4, lo = 5, hi = 8 8 11 mid = 6, A[mid] = x Found! Example 1I A[8] = {1, 2, 3, 4, 5, 7, 9, 11} lo = 1 hi = 8 x=6 1 2 3 4 5 6 7 8 1 2 3 4 5 7 9 11 high low 1 lo = 1, hi = 8, mid = 4. A[4]=4 2 3 4 5 7 9 11 lo = 5, hi = 8, mid = 6, A[6]=7 high low 1 2 3 4 5 7 9 11 lo = 5, hi = 5, mid = 5, A[5]=5 1 2 3 4 5 7 9 11 lo = 6, hi = 5 NOT FOUND! high low Analysis of BINARY-SEARCH Alg.: BINARY-SEARCH (A, lo, hi, x) if (lo > hi) return FALSE mid (lo+hi)/2 if x = A[mid] return TRUE if ( x < A[mid] ) BINARY-SEARCH (A, lo, mid-1, x) if ( x > A[mid] ) BINARY-SEARCH (A, mid+1, hi, x) T(n) = c + T(n/2) constant time: c1 constant time: c2 constant time: c3 same problem of size n/2 same problem of size n/2 Methods for Solving Recurrences Iteration method Recursion-tree method Master method 8 The Iteration Method Convert the recurrence into a summation and solve it using a known series Example: T(n) = c + T(n/2) T(n) = c + T(n/2) = c + c + T(n/4) = c + c + c + T(n/8) = c + c + c + c + T(n/24) Assume n=2k then k = lg n and T(n) = c + c + c + c + c + … + T(n/2k) (k times) T(n) = T(n) = clg n k *c + T(1) Iteration Method – Example 2 T(n) = n + 2T(n/2) Assume n=2k k = lg n T(n) = n + 2T(n/2) = n + 2(n/2 + 2T(n/4)) = n + n + 4T(n/4) = n + n + 4(n/4 + 2T(n/8)) = n + n + n + 8T(n/8) T(n) = 3n + 23T(n/23) = kn + 2kT(n/2k) = nlgn + nT(1) T(n) = O(nlgn) Methods for Solving Recurrences Iteration method Recursion-tree method Master method 11 The recursion-tree method Convert the recurrence into a tree: ◦ Each node represents the cost incurred at various levels of recursion ◦ Sum up the costs of all levels Used to “guess” a solution for the recurrence Example 1 W(n) = 2W(n/2) + n2 Subproblem size at level i = n/2i At level i: Cost of each node = (n/2i)2 h = Height of the tree n/2h=1 h = lgn Total cost at all levels: lg n W (n) i0 n 2 2 i lg n n 2 i0 W(n) = O(n2) i i # of nodes = 2i 1 1 1 2 2 2 2n n n 1 2 i0 2 1 2 Total cost = (n2/2i) Example 2 T(n) = 3T(n/4) + cn2 Subproblem size at level i = n/4i At level i: Cost of each node= c(n/4i)2 # of nodes= 3i Total cost =cn2(3/16)i h = Height of the tree n/4h=1 h = log4n Total cost at all levels: log 4 n 1 T (n) i0 i (last level has 3log4n = nlog43 nodes) 3 log 3 2 cn n 4 16 T(n) = O(n2) i0 i 1 3 log 3 log 3 2 2 2 cn n 4 O ( n ) cn n 4 3 16 1 16 Example 3 W(n) = W(n/3) + W(2n/3) + n • The longest path from the root to a leaf: n (2/3)n (2/3)2 n … 1 (2/3)in =1 i = log3/2n • Cost of the problem at level i = n • Total cost: W ( n ) n (log 3 / 2 n ) n lg n O ( n lg n ) lg(3 / 2) via further analysis W(n) =Θ(nlgn) 15 Methods for Solving Recurrences Iteration method Recursion-tree method Master method 16 Master Theorem “Cookbook” for solving recurrences of the form: n T ( n ) aT f ( n ) b where a 1, b 1, and f(n) 0 Idea: compare f(n) with nlogba f(n) is asymptotically smaller or larger than nlogba by a polynomial factor n OR f(n) is asymptotically equal with nlogba Master Theorem n T ( n ) aT b f (n) where a 1, b 1, and f(n) 0 Case 1: if f(n) = O(nlogba -) for some > 0, then: T(n) = (nlogba) Case 2: if f(n) = (nlogba), then: T(n) = (nlogba lgn) Case 3: if f(n) = (nlogba +) for some > 0, and if af(n/b) ≤ cf(n) for some c < 1 and all sufficiently large n, then: regularity condition T(n) = (f(n)) 18 Example 1 Case 1: if f(n) = O(nlogba -) for some > 0, then: T(n) = (nlogba) Case 2: if f(n) = (nlogba), then: T(n) = (nlogba lgn) Case 3: if f(n) = (nlogba +) for some > 0, and if af(n/b) ≤ cf(n) for some c < 1 and all sufficiently large n, then: T(n) =(f(n)) T(n) = 2T(n/2) + n a = 2, b = 2, log22 = 1 Compare nlogba=n1 with f(n) = n f(n) = (nlogba=n1) Case 2 T(n) = (nlogba lgn) = (nlgn) 19 Example 2 Case 1: if f(n) = O(nlogba -) for some > 0, then: T(n) = (nlogba) Case 2: if f(n) = (nlogba), then: T(n) = (nlogba lgn) Case 3: if f(n) = (nlogba +) for some > 0, and if af(n/b) ≤ cf(n) for some c < 1 and all sufficiently large n, then: T(n) =(f(n)) T(n) = 2T(n/2) + n2 a = 2, b = 2, log22 = 1 Compare nlog22=n1 with f(n) = n2 f(n) = (nlog22+) Case 3 (* need to verify regularity cond.) a f(n/b) ≤ c f(n) 2 n2/4 ≤ c n2 (½ ≤ c <1) T(n) = (f(n)) = (n2) Example 3 Case 1: if f(n) = O(nlogba -) for some > 0, then: T(n) = (nlogba) Case 2: if f(n) = (nlogba), then: T(n) = (nlogba lgn) Case 3: if f(n) = (nlogba +) for some > 0, and if af(n/b) ≤ cf(n) for some c < 1 and all sufficiently large n, then: T(n) =(f(n)) T(n) = 2T(n/2) + √n a = 2, b = 2, log22 = 1 Compare n with f(n) = n1/2 f(n) = O(n1-) Case 1 T(n) = (nlogba) = (n) 21 Example 4 Case 1: if f(n) = O(nlogba -) for some > 0, then: T(n) = (nlogba) Case 2: if f(n) = (nlogba), then: T(n) = (nlogba lgn) Case 3: if f(n) = (nlogba +) for some > 0, and if af(n/b) ≤ cf(n) for some c < 1 and all sufficiently large n, then: T(n) =(f(n)) T(n) = 3T(n/4) + nlgn a = 3, b = 4, log43 = 0.793 Compare n0.793 with f(n) = nlgn f(n) = (nlog43+) Case 3 Check regularity condition: 3(n/4)lg(n/4) ≤ (3/4)nlgn = c f(n), T(n) = (nlgn) (3/4 ≤ c < 1) Example 5 Case 1: if f(n) = O(nlogba -) for some > 0, then: T(n) = (nlogba) Case 2: if f(n) = (nlogba), then: T(n) = (nlogba lgn) Case 3: if f(n) = (nlogba +) for some > 0, and if af(n/b) ≤ cf(n) for some c < 1 and all sufficiently large n, then: T(n) =(f(n)) T(n) = 2T(n/2) + nlgn a = 2, b = 2, log22 = 1 Compare n with f(n) = nlgn Is this a candidate for Case 3 ? Case 3: if f(n) = (nlogba +) for some > 0 In other words, If nlgn ≥ n1.n for some > 0 lgn is asymptotically less than n for any > 0 !! Therefore, this in not Case 3! (somewhere between Case 2 & 3) Exercise: T(n) = 2T(n/2) + nlgn Use Iteration Method to show that T(n) = nlg2n T(n) = nlgn + 2T(n/2) = nlgn + 2(n/2*lg(n/2) + 2T(n/4)) = nlgn + nlg(n/2) + 22T(n/22) = …. Changing variables T(n) = 2T( n ) + lgn Try to transform the recurrence to one that you have seen before ◦ Rename: m = lgn n = 2m T (2m) = 2T(2m/2) + m ◦ Rename: k=m and S(k) = T(2k) S(k) = 2S(k/2) + k S(k) = (k*lgk) T(n) = T(2m) = S(m) = (mlgm)= (lgn*lglgn) **See Page 86 of the Textbook. 25 Exercise: T(n) = 2T( n ) + lgn Use Iteration Method to show that T(n) = (lgn*lglgn) T(n) = lgn + 2T(n1/2) = lgn + 2(lg(n1/2) + 2T(n1/4)) = lgn + lgn + 22T(n1/4) = lgn + lgn + … + 2kT(2) k=lglgn 26 Appendix A Summations n k 1 2 3 n n ( n 1) 2 k 1 n k 1 2 3 n 2 2 2 2 2 n ( n 1)( 2 n 1) 6 k 1 k n ( n 1) 2 n 3 1 2 3 n 3 3 3 3 4 k 1 n 2 x 1 x x x k 2 n k 0 n Harmonic Series Hn k 1 1 k x n 1 1 n If | x | 1 then lim x 1 1 n 1 2 1 3 1 n k 0 ln n O (1) x k 1 1 x