chapter 4: divide and conquer - introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · chapter 4:...

22
Chapter 4: Divide and Conquer - Intro A recurrence equation (recurrence) is an equation or inequality that describes a function in terms of its values on smaller inputs There are various forms: 1. Recurse on subproblems of equal size (typical of divide and conquer) T (n)= cT n c ! + f (n) 2. Recurse on subproblems of unequal size (typical of divide and conquer) T (n)= T c 1 n c 3 ! + T (c 3 - c 1 )n c 3 + f (n) 3. Recurse on a single smaller problem size (typical of decrease and conquer) T (n)= T (n - c)+ f (n) Issues: 1. Sometimes recurrences are expressed as inequalities If T (n) some recurrence function, solution will be in terms of big oh notation If T (n) some recurrence function, solution will be in terms of big omega notation 2. For exact solutions, must usually consider floor and ceiling functions For example, when n is not even T (n)= T & n 2 ’! + T $ n 2 %! + f (n) 3. Boundary conditions are generalized Rather than specify an exact function, usually represent the aspects of minor importance using asymptotic notation Unless an exact solution is required, the base case need not be repre- sented by an exact function 1

Upload: others

Post on 08-Mar-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Intro

• A recurrence equation (recurrence) is an equation or inequality that describesa function in terms of its values on smaller inputs

• There are various forms:

1. Recurse on subproblems of equal size (typical of divide and conquer)

T (n) = cT

(n

c

)+ f(n)

2. Recurse on subproblems of unequal size (typical of divide and conquer)

T (n) = T

(c1n

c3

)+ T

(c3 − c1)nc3

+ f(n)

3. Recurse on a single smaller problem size (typical of decrease and conquer)

T (n) = T (n− c) + f(n)

• Issues:

1. Sometimes recurrences are expressed as inequalities

– If T (n) ≤ some recurrence function, solution will be in terms of big ohnotation

– If T (n) ≥ some recurrence function, solution will be in terms of bigomega notation

2. For exact solutions, must usually consider floor and ceiling functions

– For example, when n is not even

T (n) = T

(⌈n

2

⌉)+ T

(⌊n

2

⌋)+ f(n)

3. Boundary conditions are generalized

– Rather than specify an exact function, usually represent the aspects ofminor importance using asymptotic notation

– Unless an exact solution is required, the base case need not be repre-sented by an exact function

1

Page 2: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - The Max Subarray Problem

• Consider a vector A[n] of numeric values

• The maximum subarray problem is to find i0, j0 such that i0 ≤ j0 ≤ n and∑j0k=i0

A[k] is greater or equal to the sum over any other assignments of i and j

• The brute force approach would be to id all pairs < i, j > that meet the abovecriteria and find the largest sum over those pairs

– The number of pairs for (i0, j0) is

n2

– Value of each subarray can be computed in constant time using values of

previously computed subarrays, so overall ∈ Θ(n2)

• Divide and conquer approach

– Strategy:

∗ Divide array in half

∗ The max subarray is either

1. Entirely in the left half

2. Entirely in the right half

3. Spanning the middle

∗ The alg will

1. Recurse on the left and right halves

2. Find the largest subarray that spans the middle

3. Return the largest of the three

2

Page 3: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - The Max Subarray Problem (2)

– The crossing alg:

FindMaxCrossingSubarray (A, low, mid, high)

1 left_sum = -infinity

2 sum = 0

3 for (i = mid down to low)

4 sum = sum + A[i]

5 if (sum > left_sum)

6 left_sum = sum

7 max_left = i

8 right_sum = -infinity

9 sum = 0

10 for (j = mid + 1 to high)

11 sum = sum + A[j]

12 if (sum > right_sum)

13 right_sum = sum

14 max_right = j

15 return(max_left, max_right, left_sum + right_sum)

∗ Analysis:

· Body of each for loop ∈ Θ(1)

· Total number of iterations of the two loops is (mid−low+1)+(high−mid) = high− low + 1 = n

· Total effort is n ∗Θ(1) = Θ(n)

3

Page 4: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - The Max Subarray Problem (3)

– The main alg:

FindMaxSubarray (A, low, high)

1 if (high == low)

2 return(low, high, A[low]) //base case

else

3 mid = floor((low + high)/2)

4 left_low, left_high, left_sum = FindMaxSubarray (A, low, mid)

5 right_low, right_high, right_sum = FindMaxSubarray (A, mid + 1, high)

6 cross_low, cross_high, cross_sum = FindMaxCrossingSubarray (A, low, mid, high)

7 if ((left_sum >= right_sum) && (left_sum >= cross_sum)

8 return (left_low, left_high, left_sum)

9 else if ((right_sum >= left_sum) && (right_sum >= cross_sum)

10 return (right_low, right_high, right_sum)

else

11 return (cross_low, cross_high, cross_sum)

∗ Analysis:

· Let n = 2i, i ≥ 0

· T (1) ∈ Θ(1)

· Each reursion is on n/2 elements

· Return statements, conditionals ∈ Θ(1)

· Recursion:

T (n) =

Θ(1) n = 12T

(n2

)+ Θ(n) + Θ(1) n > 1

where First term represents recursive calls Second term finding the spanning subarray Third the remaining instructions

∗ This is the same result obtained for merge sort, so T (n) ∈ Θ(n lg n)

4

Page 5: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Matrix Multiplication Intro

• Consider 2 n× n matrices A and B

• Let C = A ∗B

• Then

Cij =n−1∑j=0

aij ∗ bji

• For a 2× 2 matrix, this requires 8 multiplications and 4 additions

• A brute force algorithm that implements the above:

Square-Matrix-Multiply (A, B)

1 n = A.rows

2 C[n][n] = new array

3 for (i = 1 to n)

4 for (j = 1 to n)

5 C[i][j] = 0

6 for (k = 1 to n)

7 C[i][j] = C[i][j] + A[i][k] * B[k][j]

– By virtue of the triply-nested loops, each of which executes n times, Square-Matrix-Multiply ∈ Θ(n3)

5

Page 6: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Matrix Multiplication Recursive Approach

• Again consider square matrices A and B of size n >= 2

• Each matrix can be considered to be a matrix of square sub matrices; e.g.,

A =

A11 A12

A21 A22

• We can then represent matrix multiplication in terms of these sub matrices: C11 C12

C21 C22

=

A11 A12

A21 A22

∗ B11 B12

B21 B22

• The multiplication is achieved recursively, where C11 = A11 ∗ B11 + A12 ∗ B21,

etc.

• The algorithm:

Square-Matrix-Multiply-Recursive (A, B)

1 n = A.rows

2 C[n][n] = new array

3 if (n == 1)

4 C[1][1] = A[1][1] * B[1][1]

else

5 partition A, B, C into 4 sub matrices each

6 for (k = 1 to n)

7 C11 = Square-Matrix-Multiply-Recursive(A11, B11) +

Square-Matrix-Multiply-Recursive(A12, B21)

8 C12 = Square-Matrix-Multiply-Recursive(A11, B12) +

Square-Matrix-Multiply-Recursive(A12, B22)

9 C21 = Square-Matrix-Multiply-Recursive(A21, B11) +

Square-Matrix-Multiply-Recursive(A22, B21)

10 C22 = Square-Matrix-Multiply-Recursive(A21, B12) +

Square-Matrix-Multiply-Recursive(A22, B22)

6

Page 7: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Matrix Multiplication Recursive Approach(2)

• Analysis

– The partitioning (line 5) can be done in Θ(1) time if index calculationsare used instead of copying the elements into new matrices (which wouldrequire Θ(n2) time)

– Base case when n = 1 ∈ Θ(1) time

– Recurse eight times on matrices of size n/2× n/2 (lines 7 - 10)

– Four additions performed on matrices that hold n2/4 elements (Θ(n2) lines7 - 10)

– The recursion is then

T (n) =

Θ(1) n = 18T (n2 ) + Θ(n2) n > 1

7

Page 8: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Strassen’s Algorithm

• Strassen’s algorithm improves on this by making the recursion tree slightly lessbushy at the expense of increased additions and subtractions

– But these are negligible wrt asymptotic growth, being subsumed by themultiplications

• As in the recursive algorithm, n × n matrices A, B, C are partitioned inton/2× n/2 sub matrices: C11 C12

C21 C22

=

A11 A12

A21 A22

∗ B11 B12

B21 B22

• The four subarrays of C are computed in terms of n/2× n/2 matrices mi:

C =

P5 + P4 − P2 + P6 P1 + P2

P3 + P4 P5 + P1 − P3 − P7

• The Pi are defined as

1. P1 = A11 ∗ S1 = A11 ∗B12 − A11 ∗B22

2. P2 = S2 ∗B22 = A11 ∗B22 + A12 ∗B22

3. P3 = S3 ∗B11 = A21 ∗B11 + A22 ∗B11

4. P4 = A22 ∗ S4 = A22 ∗B21 − A22 ∗B11

5. P5 = S5 ∗ S6 = A11 ∗B11 + A11 ∗B22 + A22 ∗B11 + A22 ∗B22

6. P6 = S7 ∗ S8 = A12 ∗B21 + A12 ∗B22 − A22 ∗B21 − A22 ∗B22

7. P7 = S9 ∗ S10 = A11 ∗B11 + A11 ∗B12 − A21 ∗B11 − A21 ∗B12

8

Page 9: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Strassen’s Algorithm (2)

• The Si are defined as

1. S1 = B12 −B22

2. S2 = A11 + A12

3. S3 = A21 + A22

4. S4 = B21 −B11

5. S5 = A11 + A12

6. S6 = B11 +B22

7. S7 = A12 − A22

8. S8 = B21 +B22

9. S9 = A11 − A21

10. S10 = B11 +B12

• This requires only 7 multiplications, but 18 additions/subtractions

• The multiplications will be performed recursively

• Analysis:

– The steps involved:

1. Divide A, B, C into n/2× n/2 subarrays:Θ(1) as discussed in the straight recursive approach

2. Create ten n/2× n/2 Si arrays:Θ(n2)

3. Recursively create seven n/2× n/2 Pi arrays:7T (n2 )

4. Combine the Pi into C11, C12, C21, C22 n/2× n/2 arrays:Θ(n2)

– Run time is then

T (n) =

Θ(1) n = 17T (n2 ) + Θ(n2) n > 1

9

Page 10: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Strassen’s Algorithm (3)

• Correctness

1. C11 = P5 + P4 − P2 + P6

A11 ∗B11 +A11 ∗B22 +A22 ∗B11 +A22 ∗B22

−A22 ∗B11 +A22 ∗B21

−A11 ∗B22 −A12 ∗B22

−A22 ∗B22 −A22 ∗B21 +A12 ∗B22 +A12 ∗B21

A11 ∗B11 +A12 ∗B21

2. C12 = P1 + P2

A11 ∗B12 −A11 ∗B22

−A11 ∗B22 +A12 ∗B22

A11 ∗B12 +A12 ∗B22

3. C21 = P3 + P4

A21 ∗B11 +A22 ∗B11

−A22 ∗B11 +A22 ∗B21

A21 ∗B11 +A22 ∗B21

4. C22 = P5 + P1 − P3 − P7

A11 ∗B11 +A11 ∗B22 +A22 ∗B11 +A22 ∗B22

−A11 ∗B22 +A11 ∗B12

−A22 ∗B11 −A21 ∗B11

−A11 ∗B11 −A11 ∗B12 +A21 ∗B11 +A21 ∗B12

+A22 ∗B22 +A21 ∗B12

10

Page 11: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Analysis Techniques

• Comparisons of OoG

limn→∞t(n)g(n) =

0⇒ t(n)′s OoG < g(n)′s OoGc⇒ t(n)′s OoG = g(n)′s OoG∞⇒ t(n)′s OoG > g(n)′s OoG

• L ’Hopital’s Rule

limn→∞t(n)g(n) = limn→∞

t′(n)g′(n)

– Useful in regards to the above

• Forward substitution

– Given a recurrence of the form

T (n) = cT

(n

d

)+ f(n)

– Let n = di, and iteratively compute T (i+ 1) in terms of T (i):

1. Start with base condition/time

2. Determine the value of the caller by substituting the value of the basecondition into the recursion equation

3. Continue in this manner for a few iteration in the hope that a formulawill emerge

– For example, consider

T (n) = cT

(n

d

)+ f(n)

Let n = di with base case T (1) = d0 = b (step i = 0)

Then,

i = 1: T (d1) = cT ((d1)/d) + f(d1) = cT (d0) + f(d1) = cb+ f(d1)i = 2: T (d2) = cT ((d2)/d) + f(d2) = cT (d1) + f(d2) = c[cb+ f(d1)] +f(d2) = c2b+ cf(d1) + f(d2))etc.

– Will ultimately express i in terms of n

11

Page 12: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Analysis Techniques (2)

• Backward substitution

– Start at the top level (n elements) and work towards the base case

– Substitute the value from the next recursion into the recursion equation;i.e.,Express T (di) in terms of T (di−1) and substitute in original recurrencerelation

– Repeat with successively smaller terms until a formula that expresses thesequence can be determined

– For example, consider

T (n) = cT

(n

d

)+ f(n)

Let n = dk with base case T (1) = d0 = b (step i = 0)

Then,

i = 1: T (dk) = cT ((dk)/d) + f(dk) = cT (dk−i) + f(dk)Since T (dk−1) = cT ((dk−1)/d) + f(dk−1) = cT (dk−2) + f(dk−1) we canrewrite T (dk) asi = 2: T (dk) = c[cT (dk−i)+f(dk−i+1)]+f(dk) = c2T (dk−i)+cf(dk−i+1)+f(dk)etc.

– Will ultimately express i in terms of n

12

Page 13: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Analysis Techniques, The Substitution Method

• This technique involves

1. Guess a form for the equation (i.e., g(n))

2. Use induction to find asymptotic constant(s) and show that the guess works

• The guess might be based on

1. A previous analysis that had a similar equation

2. Result of another proof technique

• The proof itself consists of

1. Substituting the guess for the recurrence in the equation

2. Find a constant (could be two) that satisfies the relation in the asymptoticdefinition

3. Demonstrate that the guess holds for the base case too

• Example: Consider (pp 83 - 84)

T (n) = 2T

(⌊n

2

⌋)+ n

– The guess is T (n) = O(nlg n)

– To prove guess correct, must show that T (n) ≤ cnlg n for some c > 0

– Assume that this holds for all m < n (i.e.,⌊n2

⌋)

– Substitute cnlg n in the right-hand side of the inequality, using⌊n2

⌋for n

– Then,T (n) ≤ 2

(c⌊n2

⌋lg

(⌊n2

⌋))+ n

≤ cnlg(n2

)+ n

= cnlg n− cnlg 2 + n= cnlg n− cn+ n

≤ cnlg n

which holds for c ≥ 1

13

Page 14: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Analysis Techniques, The SubstitutionMethod (2)

– Next, need to demonstrate that the guess holds for the base case

∗ This step can sometimes require some ingenuity

∗ Assume that T (1) = 1 for the example above; then

T (1) = 1 ≤ c ∗ 1 ∗ lg 1 = 0

∗ This contradicts the hypothesis

∗ What we must do is distinguish between the base case of the equation,and the base case of the proof

∗ While the base case of the recursion is n = 1, for the proof we can uselarger values (because we only have to show that it holds for all n ≥some n0, which we essentially get to choose)

∗ Since n = 1 is problemmatic, judicious choices for base cases are n = 2and n = 3

· These are the two values that result in recursion with n = 1

∗ Using these values as base cases,

· T (2) = 4 (i.e., 2T (1) + 2 = 2 + 2 ≤ 2lg 2)

· T (3) = 5 (i.e., 2T (1) + 3 = 2 + 3 ≤ 3lg 3)

• Heuristics for making a good guess:

1. If know bounds for a similar recursion, try it

2. Prove weak upper and lower bounds, then iteratively try to improve themby tightening them

• Issues

1. May have correct bound but induction doesn’t work

– Reason might be because induction isn’t strong enough to prove thedetailed (exact) bound

– Can sometimes subtract a lower-order term to make it work

14

Page 15: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Analysis Techniques, TheSubstitution Method (3)

– For example (p 85)

T (n) = T

(⌊n

2

⌋)+ T

(⌈n

2

⌉)+ 1

Guess T (n) = O(n)Need to show that T (n) ≤ cn

On substitution:

T (n) = c

⌊n

2

⌋+ c

⌈n

2

⌉+ 1 = cn+ 1

Clearly this isn’t less than cn for any value of n

– The problem is the constant term 1

– To remedy the situation, subtract a constant d ≥ 0

– The revised guess is T (n) ≤ cn− d

T (n) ≤(c

⌊n

2

⌋− d

)+

(c

⌈n

2

⌉− d

)+ 1 = cn− 2d+ 1 ≤ cn− d

15

Page 16: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Analysis Techniques, The SubstitutionMethod (4)

2. You must prove the exact form of the inductive hypothesis

– For example, if you want to prove T (n) ∈ O(n), you must showT (n) ≤ cn

– Consider the following common example of incorrect logic

∗ Want to show

T (n) = 2T

(⌊n

2

⌋)+ n ∈ O(n)

∗ ThenT (n) ≤ 2

(c⌊n2

⌋)+ n

≤ cn+ n ∈ O(n)

∗ But this reasoning is fallacious because have not shown thatT (n) ≤ cn

3. Sometimes changing variables makes proofs easier

– ConsiderT (n) = 2T (b

√nc) + lg n

– Let m = lg n⇒ n = 2m

– ThenT (2m) = 2T (2

m2 ) +m

– Then, let S(m) = T (2m), which lets us rewrite the above as

S(m) = 2S

(m

2

)+m

– This has the same form as

T (n) = 2T

(⌊n

2

⌋)+ n ∈ O(n)

– So we can guess a solution of

S(m) = O(mlg m) = O((lg n)(lg lg n))

16

Page 17: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Analysis Techniques, Recursion Trees

• This approach can be used to find a good guess to OoG to be used in thesubstitution method, or - if done in an exacting manor - it can be a proof initself

• The approach:

1. Create a recursion tree

2. Calculate the cost of each level

3. Calculate the cost over all levels

• Consider

T (n) = 3T

(⌊n

4

⌋)+O(n2)

– Consider the following examples of ’sloppiness’ (i.e., laxness) that is allow-able since we are looking for a guesstimate

∗ Let n = 4i, eliminating the need for the floor function in the above

∗ Replace O(n2) by cn2

– This generates the following recursion tree:

17

Page 18: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Analysis Techniques, Recursion Trees(2)

– Let i represent the level of the tree; then

Level Cost

i = 0 c30(n40

)2= cn2

i = 1 c31(n41

)2=(316

)cn2

i = 2 c32(n42

)2=(316

)2cn2

. . . . . . . . .

– The leaf level corresponds to 4i = n⇒ log4(4i) = log4 n

Thus i = log4n, which corresponds to the height of the tree

– Cost of the leaf level is 3log4nT (1) = cnlog43

– The total cost of the tree is

T (n) =∑log4n−1i=0

(316

)icn2 + cnlog43

<∑∞i=0

(316

)icn2 + cnlog43

= 11− 3

16

cn2 + cnlog43

= 1613cn

2 + cnlog43

∈ O(n2)

– The root of the tree contributes the greatest amount to the total cost (cout of 16

13c, with 313c contributed from the lower levels of the tree)

18

Page 19: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Analysis Techniques, Recursion Trees (3)

• To prove that T (n) ∈ O(n2) (via substitution), must show that T (n) ≤ dn2 forsome d > 0

T (n) ≤ 3T(⌊n4

⌋)+ cn2

≤ 3d⌊n4

⌋2+ cn2

≤ 3d(n4

)2+ cn2

= 316dn

2 + cn2

≤ dn2

when d ≥ 1613c

19

Page 20: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Analysis Techniques, The Master Theorem

• The Master Theorem allows easy solutions to recursions of the form

T (n) = aT

(n

b

)+ f(n)

– f(n) represents the cost of dividing and combining

– Omitting floors and ceilings has no effect on the results

• The Master Theorem:

Let

1. a ≥ 1, b > 1 be constants

2. f(n) be a function that is asymptotically positive

3. T (n) is defined for integers n ≥ 0 as

T (n) = aT

(n

b

)+ f(n)

where nb is either dn/be or bn/bc

Then T (n) has the following asymptotic bounds:

T (n) =

Θ(nlogba) when f(n) ∈ O(nlogba−ε) for constant ε > 0

Θ(nlogbalg n) when f(n) ∈ Θ(nlogba)

Θ(f(n)) when f(n) ∈ Ω(nlogba+ε) for constant ε > 0,af(nb ) ≤ cf(n) for some constant c < 1, and

for all sufficiently large n

• Points re the theorem:

1. Form of solution based on comparison of f(n) with nlogba, the larger beingthe determining factor

– In the first case, f(n) can’t be just smaller, but must be so by a factorof nε

– In the third case, f(n) can’t be just larger, but must be so by a factorof nε AND must satisfy af(nb ) ≤ cf(n)

2. Not all situations are covered

– For example, when f(n) > nlogba but is not polynomially smaller (andsimilarly for < case)

20

Page 21: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Analysis Techniques, The Master Theorem(2)

• Examples:

1. T (n) = 9T (n/3) + na = 9, b = 3, f(n) = nnlogba = nlog39 = n2

Since f(n) ∈ O(n2−ε), where ε = 1, the Master Theorem appliesT (n) ∈ Θ(n2)

2. T (n) = T (2n/3) + 1a = 1, b = 3/2, f(n) = 1nlogba = nlog3/21 = n0 = 1Since f(n) ∈ Θ(1),T (n) ∈ Θ(lg n)

3. T (n) = 3T (n/4) + nlg n

a = 3, b = 4, f(n) = nlg n

nlogba = nlog43 = n0.793

Since f(n) ∈ Ω(nlog43+ε), where ε ∼ 0.2, andcf(n/b) = 3(n/4)lg(n/4) ≤ 3

4nlg n = cf(n) for c = 34 , the Master Theorem

appliesT (n) ∈ Θ(nlg n)

4. T (n) = 2T (n/2) + nlg n

a = 2, b = 2, f(n) = nlg n

nlogba = nlog22 = nnlg n is asymptotically greater than n, but not polynomially larger:

f(n)

nlogba=nlg n

n= lg n

which is asymptotically smaller then n2 for any ε > 0The Master Theorem does not apply

21

Page 22: Chapter 4: Divide and Conquer - Introdjmoon/algs-g/algs-notes/c4... · 2019. 2. 18. · Chapter 4: Divide and Conquer - The Max Subarray Problem Consider a vector A[n] of numeric

Chapter 4: Divide and Conquer - Analysis Techniques, Proof of the MasterTheorem

22