CS 3343 Analysis of Algorithms Lecture 67 Master

  • Slides: 38
Download presentation
CS 3343: Analysis of Algorithms Lecture 6&7: Master theorem and substitution method 10/2/2020 1

CS 3343: Analysis of Algorithms Lecture 6&7: Master theorem and substitution method 10/2/2020 1

Analyzing recursive algorithms 1. Defining recurrence 2. Solving recurrence 10/2/2020 2

Analyzing recursive algorithms 1. Defining recurrence 2. Solving recurrence 10/2/2020 2

Solving recurrence 1. Recursion tree / iteration method - Good for guessing an answer

Solving recurrence 1. Recursion tree / iteration method - Good for guessing an answer 2. Substitution method - Generic method, rigid, but may be hard 3. Master method - Easy to learn, useful in limited cases only - Some tricks may help in other cases 10/2/2020 3

The master method applies to recurrences of the form T(n) = a T(n/b) +

The master method applies to recurrences of the form T(n) = a T(n/b) + f (n) , where a ³ 1, b > 1, and f is asymptotically positive. 1. Divide the problem into a subproblems, each of size n/b 2. Conquer the subproblems by solving them recursively. 3. Combine subproblem solutions Divide + combine takes f(n) time. 10/2/2020 4

Master theorem T(n) = a T(n/b) + f (n) Key: compare f(n) with nlogba

Master theorem T(n) = a T(n/b) + f (n) Key: compare f(n) with nlogba CASE 1: f (n) = O(nlogba – ) T(n) = (nlogba). CASE 2: f (n) = (nlogba) T(n) = (nlogba log n). CASE 3: f (n) = (nlogba + ) and a f (n/b) c f (n) T(n) = ( f (n)). 10/2/2020 Regularity Condition 5

Case 1 f (n) = O(nlogba – ) for some constant > 0. Alternatively:

Case 1 f (n) = O(nlogba – ) for some constant > 0. Alternatively: nlogba / f(n) = Ω(n ) Intuition: f (n) grows polynomially slower than nlogba Or: nlogba dominates f(n) by an n factor for some > 0 Solution: T(n) = (nlogba) T(n) = 4 T(n/2) + n b = 2, a = 4, f(n) = n log 24 = 2 f(n) = n = O(n 2 - ), or n 2 / n = n 1 = Ω(n ), for = 1 T(n) = Θ(n 2) 10/2/2020 T(n) = 2 T(n/2) + n/logn b = 2, a = 2, f(n) = n / log n log 22 = 1 f(n) = n/logn O(n 1 - ), or n 1/ f(n) = log n Ω(n ), for any > 0 CASE 1 does not apply 6

Case 2 f (n) = (nlogba). Intuition: f (n) and nlogba have the same

Case 2 f (n) = (nlogba). Intuition: f (n) and nlogba have the same asymptotic order. Solution: T(n) = (nlogba log n) e. g. T(n) = T(n/2) + 1 T(n) = 2 T(n/2) + n T(n) = 4 T(n/2) + n 2 T(n) = 8 T(n/2) + n 3 10/2/2020 logba = 1 logba = 2 logba = 3 7

Case 3 f (n) = Ω(nlogba + ) for some constant > 0. Alternatively:

Case 3 f (n) = Ω(nlogba + ) for some constant > 0. Alternatively: f(n) / nlogba = Ω(n ) Intuition: f (n) grows polynomially faster than nlogba Or: f(n) dominates nlogba by an n factor for some > 0 Solution: T(n) = Θ(f(n)) T(n) = T(n/2) + n b = 2, a = 1, f(n) = n nlog 21 = n 0 = 1 f(n) = n = Ω(n 0+ ), or n / 1= n = Ω(n ) T(n) = Θ(n) 10/2/2020 T(n) = T(n/2) + log n b = 2, a = 1, f(n) = log n nlog 21 = n 0 = 1 f(n) = log n Ω(n 0+ ), or f(n) / nlog 21 / = log n Ω(n ) CASE 3 does not apply 8

Regularity condition • a f (n/b) c f (n) for some c < 1

Regularity condition • a f (n/b) c f (n) for some c < 1 and all sufficiently large n • This is needed for the master method to be mathematically correct. – to deal with some non-converging functions such as sine or cosine functions • For most f(n) you’ll see (e. g. , polynomial, logarithm, exponential), you can safely ignore this condition, because it is implied by the first condition f (n) = Ω(nlogba + ) 10/2/2020 9

Examples T(n) = 4 T(n/2) + n a = 4, b = 2 nlogba

Examples T(n) = 4 T(n/2) + n a = 4, b = 2 nlogba = n 2; f (n) = n. CASE 1: f (n) = O(n 2 – ) for = 1. T(n) = (n 2). T(n) = 4 T(n/2) + n 2 a = 4, b = 2 nlogba = n 2; f (n) = n 2. CASE 2: f (n) = (n 2). T(n) = (n 2 log n). 10/2/2020 10

Examples T(n) = 4 T(n/2) + n 3 a = 4, b = 2

Examples T(n) = 4 T(n/2) + n 3 a = 4, b = 2 nlogba = n 2; f (n) = n 3. CASE 3: f (n) = (n 2 + ) for = 1 and 4(n/2)3 cn 3 (reg. cond. ) for c = 1/2. T(n) = (n 3). T(n) = 4 T(n/2) + n 2/log n a = 4, b = 2 nlogba = n 2; f (n) = n 2/log n. Master method does not apply. In particular, for every constant > 0, we have n = w(log n). 10/2/2020 11

Examples T(n) = 4 T(n/2) + n 2. 5 a = 4, b =

Examples T(n) = 4 T(n/2) + n 2. 5 a = 4, b = 2 nlogba = n 2; f (n) = n 2. 5. CASE 3: f (n) = (n 2 + ) for = 0. 5 and 4(n/2)2. 5 cn 2. 5 (reg. cond. ) for c = 0. 75. T(n) = (n 2. 5). T(n) = 4 T(n/2) + n 2 log n a = 4, b = 2 nlogba = n 2; f (n) = n 2 log n. Master method does not apply. In particular, for every constant > 0, we have n = w(log n). 10/2/2020 12

How do I know which case to use? Do I need to try all

How do I know which case to use? Do I need to try all three cases one by one? 10/2/2020 13

 • Compare f(n) with nlogba check if nlogba / f(n) Ω(n ) •

• Compare f(n) with nlogba check if nlogba / f(n) Ω(n ) • f(n) o(nlogba) Possible CASE 1 Θ(nlogba) CASE 2 ω(nlogba) Possible CASE 3 check if f(n) / nlogba Ω(n ) 10/2/2020 14

Examples logba = 2. n o(n 2) => Check case 1 n 2/n =

Examples logba = 2. n o(n 2) => Check case 1 n 2/n = n Ω(n ), so T(n) Θ (n 2) logba = 2. n 2 o(n 2) => case 2 T(n) Θ (n 2 logn) logba = 1. xxx. n o(n 1. xxx) => Check case 1 n 1. xxx/n = n 0. xxx Ω(n ), so T(n) Θ (nlog 4 6) logba = 0. 5. n ω(n 0. 5) => Check case 3 n / n 0. 5 Ω(n ) (check reg cond) T(n) Θ (n) logba = 0. nlogn = ω(n 0) => Check case 3 nlogn/1 Ω(n ) (check reg cond) T(n) Θ (nlogn) logba = 1. nlogn = ω(n) => Check case 3 nlogn / n = logn Ω(n ) for any . MS n/a. 10/2/2020 15

More examples 10/2/2020 16

More examples 10/2/2020 16

Some tricks • Changing variables • Obtaining upper and lower bounds – Make a

Some tricks • Changing variables • Obtaining upper and lower bounds – Make a guess based on the bounds – Prove using the substitution method 10/2/2020 17

Changing variables T(n) = 2 T(n-1) + 1 • Let n = log m,

Changing variables T(n) = 2 T(n-1) + 1 • Let n = log m, i. e. , m = 2 n => T(log m) = 2 T(log (m/2)) + 1 • Let S(m) = T(log m) = T(n) => S(m) = 2 S(m/2) + 1 => S(m) = Θ(m) => T(n) = S(m) = Θ(2 n) 10/2/2020 18

Changing variables • Let n =2 m => sqrt(n) = 2 m/2 • We

Changing variables • Let n =2 m => sqrt(n) = 2 m/2 • We then have T(2 m) = T(2 m/2) + 1 • Let T(n) = T(2 m) = S(m) => S(m) = S(m/2) + 1 S(m) = Θ (log log n) T(n) = Θ (log n) 10/2/2020 19

Changing variables • T(n) = 2 T(n-2) + n • Let n = log

Changing variables • T(n) = 2 T(n-2) + n • Let n = log m, i. e. , m = 2 n => T(log m) = 2 T(log m/4) + log m • Let S(m) = T(log m) = T(n) => S(m) = 2 S(m/4) + log m => S(m) = m 1/2 => T(n) = S(m) = (2 n)1/2 = (sqrt(2)) n 1. 4 n 10/2/2020 20

Obtaining bounds Solve the Fibonacci sequence: T(n) = T(n-1) + T(n-2) + 1 •

Obtaining bounds Solve the Fibonacci sequence: T(n) = T(n-1) + T(n-2) + 1 • T(n) >= 2 T(n-2) + 1 [1] • T(n) <= 2 T(n-1) + 1 [2] • Solving [1], we obtain T(n) >= 1. 4 n • Solving [2], we obtain T(n) <= 2 n • Actually, T(n) 1. 62 n 10/2/2020 21

Obtaining bounds • • T(n) = T(n/2) + log n T(n) Ω(log n) T(n)

Obtaining bounds • • T(n) = T(n/2) + log n T(n) Ω(log n) T(n) O(T(n/2) + n ) Solving T(n) = T(n/2) + n , we obtain T(n) = O(n ), for any > 0 • So: T(n) O(n ) for any > 0 – T(n) is unlikely polynomial – Actually, T(n) = Θ(log 2 n) by extended case 2 10/2/2020 22

Extended Case 2 CASE 2: f (n) = (nlogba) T(n) = (nlogba log n).

Extended Case 2 CASE 2: f (n) = (nlogba) T(n) = (nlogba log n). Extended CASE 2: (k >= 0) f (n) = (nlogba logkn) T(n) = (nlogba logk+1 n). 10/2/2020 23

Solving recurrence 1. Recursion tree / iteration method - Good for guessing an answer

Solving recurrence 1. Recursion tree / iteration method - Good for guessing an answer - Need to verify 2. Substitution method - Generic method, rigid, but may be hard 3. Master method - Easy to learn, useful in limited cases only - Some tricks may help in other cases 10/2/2020 24

Substitution method The most general method to solve a recurrence (prove O and separately):

Substitution method The most general method to solve a recurrence (prove O and separately): 1. Guess the form of the solution (e. g. by recursion tree / iteration method) 2. Verify by induction (inductive step). 3. Solve for O-constants n 0 and c (base case of induction) 10/2/2020 25

Substitution method • Recurrence: T(n) = 2 T(n/2) + n. • Guess: T(n) =

Substitution method • Recurrence: T(n) = 2 T(n/2) + n. • Guess: T(n) = O(n log n). (eg. by recursion tree method) • To prove, have to show T(n) ≤ c n log n for some c > 0 and for all n > n 0 • Proof by induction: assume it is true for T(n/2), prove that it is also true for T(n). This means: • Given: T(n) = 2 T(n/2) + n • Need to Prove: T(n)≤ c n log (n) • Assume: T(n/2)≤ cn/2 log (n/2) 10/2/2020 26

Proof • Given: T(n) = 2 T(n/2) + n • Need to Prove: T(n)≤

Proof • Given: T(n) = 2 T(n/2) + n • Need to Prove: T(n)≤ c n log (n) • Assume: T(n/2)≤ cn/2 log (n/2) • Proof: Substituting T(n/2) ≤ cn/2 log (n/2) into the recurrence, we get T(n) = 2 T(n/2) + n ≤ cn log (n/2) + n ≤ c n log n - c n + n ≤ c n log n - (c - 1) n ≤ c n log n for all n > 0 (if c ≥ 1). Therefore, by definition, T(n) = O(n log n). 10/2/2020 27

Substitution method – example 2 • Recurrence: T(n) = 2 T(n/2) + n. •

Substitution method – example 2 • Recurrence: T(n) = 2 T(n/2) + n. • Guess: T(n) = Ω(n log n). • To prove, have to show T(n) ≥ c n log n for some c > 0 and for all n > n 0 • Proof by induction: assume it is true for T(n/2), prove that it is also true for T(n). This means: • Given: T(n) = 2 T(n/2) + n • Need to Prove: T(n) ≥ c n log (n) T(n/2) ≥ cn/2 log (n/2) • Assume: 10/2/2020 28

Proof • Given: T(n) = 2 T(n/2) + n • Need to Prove: T(n)

Proof • Given: T(n) = 2 T(n/2) + n • Need to Prove: T(n) ≥ c n log (n) • Assume: T(n/2) ≥ cn/2 log (n/2) • Proof: Substituting T(n/2) ≥ cn/2 log (n/2) into the recurrence, we get T(n) = 2 T(n/2) + n ≥ cn log (n/2) + n ≥ c n log n - c n + n ≥ c n log n + (1 – c) n ≥ c n log n for all n > 0 (if c ≤ 1). Therefore, by definition, T(n) = Ω(n log n). 10/2/2020 29

More substitution method examples (1) • Prove that T(n) = 3 T(n/3) + n

More substitution method examples (1) • Prove that T(n) = 3 T(n/3) + n = O(nlogn) • Need to show that T(n) c n log n for some c, and sufficiently large n • Assume above is true for T(n/3), i. e. T(n/3) cn/3 log (n/3) 10/2/2020 30

T(n) = 3 T(n/3) + n 3 cn/3 log (n/3) + n cn log

T(n) = 3 T(n/3) + n 3 cn/3 log (n/3) + n cn log n – cn log 3 + n cn log n – (cn log 3 – n) cn log n (if cn log 3 – n ≥ 0) cn log 3 – n ≥ 0 => c log 3 – 1 ≥ 0 (for n > 0) => c ≥ 1/log 3 => c ≥ log 32 Therefore, T(n) = 3 T(n/3) + n cn log n for c = log 32 and n > 0. By definition, T(n) = O(n log n). 10/2/2020 31

More substitution method examples (2) • Prove that T(n) = T(n/3) + T(2 n/3)

More substitution method examples (2) • Prove that T(n) = T(n/3) + T(2 n/3) + n = O(nlogn) • Need to show that T(n) c n log n for some c, and sufficiently large n • Assume above is true for T(n/3) and T(2 n/3), i. e. T(n/3) cn/3 log (n/3) T(2 n/3) 2 cn/3 log (2 n/3) 10/2/2020 32

T(n) = T(n/3) + T(2 n/3) + n cn/3 log(n/3) + 2 cn/3 log(2

T(n) = T(n/3) + T(2 n/3) + n cn/3 log(n/3) + 2 cn/3 log(2 n/3) + n cn log n + n – cn (log 3 – 2/3) cn log n + n(1 – clog 3 + 2 c/3) cn log n, for all n > 0 (if 1– c log 3 + 2 c/3 0) c log 3 – 2 c/3 ≥ 1 c ≥ 1 / (log 3 -2/3) > 0 Therefore, T(n) = T(n/3) + T(2 n/3) + n cn log n for c = 1 / (log 3 -2/3) and n > 0. By definition, T(n) = O(n log n). 10/2/2020 33

More substitution method examples (3) • Prove that T(n) = 3 T(n/4) + n

More substitution method examples (3) • Prove that T(n) = 3 T(n/4) + n 2 = O(n 2) • Need to show that T(n) c n 2 for some c, and sufficiently large n • Assume above is true for T(n/4), i. e. T(n/4) c(n/4)2 = cn 2/16 10/2/2020 34

T(n) = 3 T(n/4) + n 2 3 c n 2 / 16 +

T(n) = 3 T(n/4) + n 2 3 c n 2 / 16 + n 2 (3 c/16 + 1) n 2 ? cn 2 3 c/16 + 1 c implies that c ≥ 16/13 Therefore, T(n) = 3(n/4) + n 2 cn 2 for c = 16/13 and all n. By definition, T(n) = O(n 2). 10/2/2020 35

Avoiding pitfalls • Guess T(n) = 2 T(n/2) + n = O(n) • Need

Avoiding pitfalls • Guess T(n) = 2 T(n/2) + n = O(n) • Need to prove that T(n) c n • Assume T(n/2) cn/2 • T(n) 2 * cn/2 + n = cn + n = O(n) • What’s wrong? • Need to prove T(n) cn, not T(n) cn + n 10/2/2020 36

Subtleties • Prove that T(n) = T( n/2 ) + 1 = O(n) •

Subtleties • Prove that T(n) = T( n/2 ) + 1 = O(n) • Need to prove that T(n) cn • Assume above is true for T( n/2 ) & T( n/2 ) T(n) <= c n/2 + 1 cn + 1 Is it a correct proof? No! has to prove T(n) <= cn However we can prove T(n) = O (n – 1) T(n) <= c ( n/2 -1) + c( n/2 -1) + 1 cn –c – c + 1 c(n – 1) – (c – 1) c(n – 1) if (c ≥ 1) 10/2/2020 37

Making good guess T(n) = 2 T(n/2 + 17) + n When n approaches

Making good guess T(n) = 2 T(n/2 + 17) + n When n approaches infinity, n/2 + 17 are not too different from n/2 Therefore can guess T(n) = (n log n) Prove : Assume T(n/2 + 17) ≥ c (n/2+17) log (n/2 + 17) Then we have T(n) = n + 2 T(n/2+17) ≥ n + 2 c (n/2+17) log (n/2 + 17) ≥ n + c n log (n/2 + 17) + 34 c log (n/2+17) ≥ c n log (n/2 + 17) + 34 c log (n/2+17) …. Maybe can guess T(n) = ((n-17) log (n-17)) (trying to get rid of the +17). Details skipped. 10/2/2020 38