15.6 Exercises
Doing more practices is the best way to gain intuition when it comes to asymptotics!
Factual
Prove that Θ(log2n)=Θ(log3n).
What is the runtime of the following function?
public static int f(int n) {
if (n <= 1) {
return 0;
}
return f(n - 1) + f(n - 1) + f(n - 1);
}Problem 1
Using the properties of logs, we see that log2n=log2logn=Θ(logn). Similarly, log3n=log3logn=Θ(logn). So when consiering asymptotics relating to logarithms, the base does not matter (as long as it is some constant).
Procedural
Find the runtime of running
print_fibwith for arbitrarily large n.
Do the above problem again, but change the body of the for loop in
print_fibto be:
Find the runtime of the function
fon an input of sizen, given thecreateArrayfunction as described below:
Problem 1
From lecture, we know that fib(i) runs in roughly 2i time. If we run fib for each i from 1 to n, we get a total work of 20+21+...2n. Note that this is a geometric sum with last term 2n, so the overall runtime is actually still Θ(2n).
Problem 2
Again, we know that fib(i) takes about 2i time. However, this time we call fib(n) each time in the loop n total times. This gives a runtime of Θ(n2n).
Problem 3
This function creates two recursive branches of half the size per call, with each node taking linear work. As such, each level has n total work, and since we halve the input each time, there are logn total levels, for a runtime of Θ(nlogn).
Problem 4
Solutions and walkthrough are linked here and on the course website.
Problem 5
Solutions are linked here and on the course website.
Metacognitive
What would the runtime of
modified_fibbe? Assume that values is an array of size n. If a value in an int array is not initialized to a number, it is automatically set to 0.
Problem 1
This is an example of dynamic programming, a topic covered in more depth in CS170. Note that since values is saved across calls, we only recompute each value of n once. Computing a single value of n only takes constant time, since we just add two already-computed values or do an array access. As such, the overall runtime is linear: Θ(n).
Last updated