1 / 27

CS 253: Algorithms

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

jagger
Download Presentation

CS 253: Algorithms

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS 253: Algorithms Chapter 4 Divide-and-Conquer Recurrences Master Theorem Credit: Dr. George Bebis

  2. 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

  3. 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

  4. 1 2 3 4 5 6 7 8 2 3 5 7 9 10 11 12 mid lo hi BINARY-SEARCH • Finds if x is in the sorted array A[lo…hi] 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)

  5. 1 1 2 2 3 3 4 4 5 5 7 7 9 9 11 11 mid = 4, lo = 5, hi = 8 mid = 6, A[mid] = x Found! 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 8 7 6 5

  6. 1 2 3 4 5 6 7 8 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 7 7 7 9 9 9 11 11 11 lo = 1, hi = 8, mid = 4. A[4]=4 lo = 5, hi = 8, mid = 6, A[6]=7 lo = 5, hi = 5, mid = 5, A[5]=5 Example 1I A[8] = {1, 2, 3, 4, 5, 7, 9, 11} lo = 1 hi = 8 x = 6 high low 1 2 3 4 5 7 9 11 high low lo = 6, hi = 5  NOT FOUND! low high

  7. Analysis of BINARY-SEARCH Alg.:BINARY-SEARCH (A, lo, hi, x) if (lo > hi) returnFALSE mid  (lo+hi)/2 ifx = 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

  8. Methods for Solving Recurrences • Iteration method • Recursion-tree method • Master method

  9. 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) = k * c + T(1) T(n) = clg n

  10. 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)

  11. Methods for Solving Recurrences • Iteration method • Recursion-tree method • Master method

  12. 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

  13. Subproblem size at level i = n/2i At level i: Cost of each node = (n/2i)2# of nodes = 2i Total cost = (n2/2i) h = Height of the tree  n/2h=1 h = lgn Total cost at all levels: W(n) = O(n2) Example 1 W(n) = 2W(n/2) + n2

  14. 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: (last level has 3log4n = nlog43nodes) T(n) = O(n2)

  15. 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: • via further analysis W(n) =Θ(nlgn)

  16. Methods for Solving Recurrences • Iteration method • Recursion-treemethod • Master method

  17. Master Theorem • “Cookbook” for solving recurrences of the form: Idea: compare f(n) withnlogba • f(n)is asymptotically smaller or larger than nlogba by a polynomial factor n OR • f(n) is asymptotically equal with nlogba

  18. regularity condition Master Theorem Case 1: if f(n) = O(nlogba-)for some  > 0, then: T(n) = (nlogba) Case 2: if f(n) = (nlogba), then:T(n) = (nlogbalgn) 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))

  19. 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) = (nlogbalgn) 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 Comparenlogba=n1withf(n) = n f(n) = (nlogba=n1)  Case 2  T(n) = (nlogbalgn) = (nlgn)

  20. 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) = (nlogbalgn) 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 Comparenlog22=n1withf(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)

  21. 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) = (nlogbalgn) 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 Comparen withf(n) = n1/2 f(n) = O(n1-)  Case 1  T(n) = (nlogba) = (n)

  22. Case 1: if f(n) = O(nlogba-)for some  > 0, then: T(n) = (nlogba) Case 2: if f(n) = (nlogba), then:T(n) = (nlogbalgn) 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)) Example 4 T(n) = 3T(n/4) + nlgn a = 3, b = 4, log43 = 0.793 Comparen0.793 withf(n) = nlgn f(n) = (nlog43+) Case 3 Check regularity condition: 3(n/4)lg(n/4) ≤ (3/4)nlgn = c f(n), (3/4 ≤ c < 1)  T(n) = (nlgn)

  23. Case 1: if f(n) = O(nlogba-)for some  > 0, then: T(n) = (nlogba) Case 2: if f(n) = (nlogba), then:T(n) = (nlogbalgn) 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)) Example 5 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)

  24. Exercise: T(n) = 2T(n/2) + nlgn • UseIteration 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) = ….

  25. Changing variables T(n) = 2T( ) + 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.

  26. Exercise: T(n) = 2T( ) + lgn • UseIteration 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

  27. Appendix ASummations

More Related