120 likes | 247 Vues
This chapter delves into the concept of recurrences, which are equations that describe functions in terms of themselves using smaller inputs. It highlights the significance of solving recurrences for understanding the running time of recursive functions. The chapter presents three primary methods for solving recurrences: the substitution method, iteration method, and master method. Through examples like T(n) = 2T(n/2) + n, it demonstrates how to apply these methods effectively. Understanding these concepts is crucial for algorithm analysis and optimization.
E N D
Introduction to Algorithms Chapter 4: Recurrences
Solving Recurrences • A recurrence is an equation that describes a function in terms of itself by using smaller inputs • The expression: • Describes the running time for a function contains recursion.
Solving Recurrences • Examples: • T(n) = 2T(n/2) + (n) T(n) = (n lg n) • T(n) = 2T(n/2) + n T(n) = (n lg n) • T(n) = 2T(n/2) + 17 + n T(n) = (n lg n) • Three methods for solving recurrences • Substitution method • Iteration method • Master method
Substitution Method • The substitution method • “making a good guess method” • Guess the form of the answer, then • use induction to find the constants and show that solution works • Our goal: show that T(n) = 2T(n/2) + n = O(n lg n)
Substitution MethodT(n) = 2T(n/2) + n = O(n lg n) • Thus, we need to show that T(n) c n lg n with an appropriate choice of c • Inductive hypothesis: assume T(n/2) c (n/2) lg (n/2) • Substitute back into recurrence to show thatT(n) c n lg n follows, when c 1 • T(n) = 2 T(n/2) + n 2 (c (n/2) lg (n/2)) + n = cn lg(n/2) + n = cn lg n – cn lg 2 + n = cn lg n – cn + n cn lg n for c 1 = O(n lg n) for c 1
Iteration Method • Iteration method: • Expand the recurrence k times • Work some algebra to express as a summation • Evaluate the summation
T(n) = c + T(n-1) = c + c + T(n-2) = 2c + T(n-2) = 2c + c + T(n-3) = 3c + T(n-3) … kc + T(n-k) = ck + T(n-k) • So far for nk we have • T(n) = ck + T(n-k) • To stop the recursion, we should have • n - k = 0 k = n • T(n) = cn + T(0) = cn • Thus in general T(n) = O(n)
T(n) = n + T(n-1) = n + n-1 + T(n-2) = n + n-1 + n-2 + T(n-3) = n + n-1 + n-2 + n-3 + T(n-4) = … = n + n-1 + n-2 + n-3 + … + (n-k+1) + T(n-k) = for nk • To stop the recursion, we should have n - k = 0 k = n
T(n) = 2 T(n/2) + c 1 = 2(2 T(n/2/2) + c) + c 2 = 22 T(n/22) + 2c + c = 22(2 T(n/22/2) + c) + (22-1)c 3 = 23 T(n/23) + 4c + 3c = 23 T(n/23) + (23-1)c = 23(2 T(n/23/2) + c) + 7c 4 = 24 T(n/24) + (24-1)c = … = 2kT(n/2k) + (2k - 1)ck
So far for nk we have • T(n) = 2k T(n/2k) + (2k - 1)c • To stop the recursion, we should have • n/2k = 1 n = 2k k = lg n • T(n) = n T(n/n) + (n - 1)c = nT(1) + (n-1)c = nc + (n-1)c = nc + nc – c = 2cn – c T(n) = 2cn – c = O(n)