CS 332: Algorithms: Merge Sort Solving Recurrences The Master Theorem

Download as pdf or txt
Download as pdf or txt
You are on page 1of 27

CS 332: Algorithms

Merge Sort
Solving Recurrences
The Master Theorem

David Luebke 1 2023-01-02


Administrative Question

Who here cannot make Monday-Wednesday


office hours at 10 AM?
If nobody, should we change class time?

David Luebke 2 2023-01-02


Homework 1

Homework 1 will be posted later today


(Problem with the exercise numbering, sorry)
Due Monday Jan 28 at 9 AM
Should be a fairly simple warm-up problem set

David Luebke 3 2023-01-02


Review: Asymptotic Notation

Upper Bound Notation:


f(n) is O(g(n)) if there exist positive constants c
and n0 such that f(n)  c  g(n) for all n  n0
Formally, O(g(n)) = { f(n):  positive constants c
and n0 such that f(n)  c  g(n)  n  n0
Big O fact:
A polynomial of degree k is O(nk)

David Luebke 4 2023-01-02


Review: Asymptotic Notation

Asymptotic lower bound:


f(n) is (g(n)) if  positive constants c and n0 such
that 0  cg(n)  f(n)  n  n0
Asymptotic tight bound:
f(n) is (g(n)) if  positive constants c1, c2, and n0
such that c1 g(n)  f(n)  c2 g(n)  n  n0
f(n) = (g(n)) if and only if
f(n) = O(g(n)) AND f(n) = (g(n))

David Luebke 5 2023-01-02


Other Asymptotic Notations

A function f(n) is o(g(n)) if  positive


constants c and n0 such that
f(n) < c g(n)  n  n0
A function f(n) is (g(n)) if  positive
constants c and n0 such that
c g(n) < f(n)  n  n0
Intuitively,
o() is like < () is like > () is like =
O() is like  () is like 
David Luebke 6 2023-01-02
Merge Sort
MergeSort(A, left, right) {
if (left < right) {
mid = floor((left + right) / 2);
MergeSort(A, left, mid);
MergeSort(A, mid+1, right);
Merge(A, left, mid, right);
}
}

// Merge() takes two sorted subarrays of A and


// merges them into a single sorted subarray of A
// (how long should this take?)

David Luebke 7 2023-01-02


Merge Sort: Example

Show MergeSort() running on the array

A = {10, 5, 7, 6, 1, 4, 8, 3, 2, 9};

David Luebke 8 2023-01-02


Analysis of Merge Sort

Statement Effort
MergeSort(A, left, right) { T(n)
if (left < right) { (1)
mid = floor((left + right) / 2); (1)
MergeSort(A, left, mid); T(n/2)
MergeSort(A, mid+1, right); T(n/2)
Merge(A, left, mid, right); (n)
}
}
So T(n) = (1) when n = 1, and
2T(n/2) + (n) when n > 1
So what (more succinctly) is T(n)?

David Luebke 9 2023-01-02


Recurrences
The expression:
 c n =1

T ( n) = 

2T   + cn n  1
n
  2 
is a recurrence.
Recurrence: an equation that describes a function
in terms of its value on smaller functions

David Luebke 10 2023-01-02


Recurrence Examples

 0 n=0  0 n=0
s ( n) =  s ( n) = 
c + s(n − 1) n  0 n + s(n − 1) n  0

n =1 
 c  c n =1
 
T ( n) =  T ( n) = 
2T   + c n  1
 n  n
  2  aT   + cn n  1
 b
David Luebke 11 2023-01-02
Solving Recurrences

Substitution method
Iteration method
Master method

David Luebke 12 2023-01-02


Solving Recurrences

The substitution method (CLR 4.1)


A.k.a. the “making a good guess method”
Guess the form of the answer, then use induction
to find the constants and show that solution works
Examples:
T(n) = 2T(n/2) + (n) T(n) = (n lg n)
T(n) = 2T(n/2) + n ???

David Luebke 13 2023-01-02


Solving Recurrences

The substitution method (CLR 4.1)


A.k.a. the “making a good guess method”
Guess the form of the answer, then use induction
to find the constants and show that solution works
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 → ???

David Luebke 14 2023-01-02


Solving Recurrences

The substitution method (CLR 4.1)


A.k.a. the “making a good guess method”
Guess the form of the answer, then use induction
to find the constants and show that solution works
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 → (n lg n)

David Luebke 15 2023-01-02


Solving Recurrences

Another option is what the book calls the


“iteration method”
Expand the recurrence
Work some algebra to express as a summation
Evaluate the summation
We will show several examples

David Luebke 16 2023-01-02


 0 n=0
s ( n) = 
c + s(n − 1) n  0
s(n) =
c + s(n-1)
c + c + s(n-2)
2c + s(n-2)
2c + c + s(n-3)
3c + s(n-3)

kc + s(n-k) = ck + s(n-k)
David Luebke 17 2023-01-02
 0 n=0
s ( n) = 
c + s(n − 1) n  0
So far for n >= k we have
s(n) = ck + s(n-k)
What if k = n?
s(n) = cn + s(0) = cn

David Luebke 18 2023-01-02


 0 n=0
s ( n) = 
c + s(n − 1) n  0
So far for n >= k we have
s(n) = ck + s(n-k)
What if k = n?
s(n) = cn + s(0) = cn
So  0 n=0
s ( n) = 
c + s(n − 1) n  0
Thus in general
s(n) = cn

David Luebke 19 2023-01-02


 0 n=0
s ( n) = 
n + s(n − 1) n  0
s(n)
= n + s(n-1)
= n + n-1 + s(n-2)
= n + n-1 + n-2 + s(n-3)
= n + n-1 + n-2 + n-3 + s(n-4)
= …
= n + n-1 + n-2 + n-3 + … + n-(k-1) + s(n-k)

David Luebke 20 2023-01-02


 0 n=0
s ( n) = 
n + s(n − 1) n  0
s(n)
= n + s(n-1)
= n + n-1 + s(n-2)
= n + n-1 + n-2 + s(n-3)
= n + n-1 + n-2 + n-3 + s(n-4)
= …
= n + n-1 + n-2 + n-3 + … + n-(k-1) + s(n-k)
n
= i
i = n − k +1
+ s(n − k )

David Luebke 21 2023-01-02


 0 n=0
s ( n) = 
n + s(n − 1) n  0
So far for n >= k we have
n

i
i = n − k +1
+ s(n − k )

David Luebke 22 2023-01-02


 0 n=0
s ( n) = 
n + s(n − 1) n  0
So far for n >= k we have
n

i
i = n − k +1
+ s(n − k )

What if k = n?

David Luebke 23 2023-01-02


 0 n=0
s ( n) = 
n + s(n − 1) n  0
So far for n >= k we have
n

i
i = n − k +1
+ s(n − k )

What if k = n?
n
n +1
n


i =1
i + s(0) =  i + 0 = n
i =1 2

David Luebke 24 2023-01-02


 0 n=0
s ( n) = 
n + s(n − 1) n  0
So far for n >= k we have
n

i
i = n − k +1
+ s(n − k )

What if k = n?
n
n +1
n


i =1
i + s(0) =  i + 0 = n
i =1 2
Thus in general
n +1
s ( n) = n
2

David Luebke 25 2023-01-02


 c n =1
 n
T (n) = 2T
  + c n 1
  2 
T(n) =
2T(n/2) + c
2(2T(n/2/2) + c) + c
22T(n/22) + 2c + c
22(2T(n/22/2) + c) + 3c
23T(n/23) + 4c + 3c
23T(n/23) + 7c
23(2T(n/23/2) + c) + 7c
24T(n/24) + 15c

2kT(n/2k) + (2k - 1)c
David Luebke 26 2023-01-02
 c n =1
 n
T (n) = 2T
  + c n 1
  2 
So far for n > 2k we have
T(n) = 2kT(n/2k) + (2k - 1)c
What if k = lg n?
T(n) = 2lg n T(n/2lg n) + (2lg n - 1)c
= n T(n/n) + (n - 1)c
= n T(1) + (n-1)c
= nc + (n-1)c = (2n - 1)c

David Luebke 27 2023-01-02

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy