Section 2
Runtime
Big-O Review
Main ideas:
�
Big-Omega and Big-Theta
Practice - Page 1 ( 0. True/False Questions)
Practice - Page 1 ( 0. True/False Questions)
Big-Oh Proofs!
1. Prove that f(n) ∈ O(g)
How to Approach these Problems
When trying to prove something like f(n) ∈ O(g) or f(n) ∈ Ω(g), you need to find a c and n0.
scratchwork…
1a) Proof - Final Solution
scratchwork…
1b) Proof - Final Solution
scratchwork…
1c) Proof - Final Solution
scratchwork…
1d) Proof - Final Solution
scratchwork…
1e) Proof - Final Solution
Worksheet problems
2. We provide functions f(n) and g(n). Prove that f(n) ∈ Θ(g)
How to Approach these Problems
When trying to prove a function f(n) ∈ Θ(g), you should show that f(n) ∈ O(g) and f(n) ∈ Ω(g).
How to Approach these Problems
When trying to prove a function f(n) ∈ Θ(g), you should show that f(n) ∈ O(g) and f(n) ∈ Ω(g).
big-O proof! big-Omega proof!
Together, we make a big-Theta proof!
How to Approach these Problems
When trying to prove a function f(n) ∈ Θ(g), you should show that f(n) ∈ O(g) and f(n) ∈ Ω(g).
scratchwork…
2a) Proof - Final Solution
scratchwork…
2b) Proof - Final Solution Part 1
2b) Proof - Final Solution Part 2
Worksheet problems: Q3
Get the Θ(·) bound of each function below.
We will construct equations for each function and then simplify them to get a closed form.
3a) f(n) = worst case running time
length of values
setting visited[i]
(why not also incrementing out?)
alright this is really long so let’s go this step by step/line by line
3a) f(n) = worst case running time
Let’s approach this step by step.
Looking at our first loop…
What is its runtime?
3a) f(n) = worst case running time
Let’s approach this step by step.
Looking at our first loop…
What is its runtime?
n
time per iteration: 1
loop iterations: values.length, so n
whole loop takes: 1 * n = n time
3a) f(n) = worst case running time
} n
Okay now looking at our second loop…
What is its runtime?
(Important: Think of worst case input!)
3a) f(n) = worst case running time
} n
Okay now looking at our second loop…
What is its runtime?
(Important: Think of worst case input!)
n * (n+1) / 2
worst case is if every element in values is unique. this would mean for every iteration of the outer loop, the inner loop iterates through the entire rest of the array.
so, total # of iterations is:
n + (n-1) + (n-2) + … + 1
= n * (n+1) / 2
3a) f(n) = worst case running time
First loop (lines 3-5) always runs once. it has n runtime.
Worst case for second loop (lines 7-16) is if every value in array is unique. it has n(n+1)/2 runtime.
so for our whole method numUnique, our worst case runtime:
f(n) = n + n(n+1)/2 => n2. This is quadratic running time
Try something similar to Q2 proofs to prove that n + n(n+1)/2 ∈ Θ(n2).
} n
n(n+1)/2
}
3b) g(n) = best case running time
In 3a), we went over worst case.
Now try: best case!
3b) g(n) = best case running time
First loop (lines 3-5) always runs once.
Best case for second loop (lines 7-16) is if every value in array is the same. This means the inner loop will only run once: for the first iteration of the outer loop. Then, it will not run because every index will be visited after the first time.
g(n) = n + n => n
This is linear running time
Try something similar to Q2 proofs to prove that n + n ∈ Θ(n).