Link
Recursive Algorithm Analysis
Modeling the running time of recursive code.
Kevin Lin, with thanks to many others.
1

2
Linear vs. Linearithmic (N log N) vs. Quadratic Runtimes
Algorithm Design (Jon Kleinberg, Éva Tardos/Pearson Education)
?: How large of a difference is there between N and N log N? Between N log N and N2?

Consider the following recurrence.




Visualize the recursion tree.
Give a closed-form solution for T(N) by unrolling the recurrence. Simplify.
3
One Subproblem
Q
Q1: Visualize the recursion tree.








Q2: Give a closed-form solution for T(N) by unrolling the recurrence. Simplify.

Consider the following recurrence.




Visualize the recursion tree.
Give a closed-form solution for T(N) by unrolling the recurrence. Simplify.
4
One Subproblem
A

Consider the following recurrence.




Visualize the recursion tree.
Give a closed-form solution for T(N) by unrolling the recurrence. Simplify.
5
One Subproblem
N
A
N/2
N/4
N/8
1
cN
cN/2
cN/4
cN/8
d

Constant Work Per Call
Give a recurrence relation for f3.
6
static int f3(int n) {
    if (n <= 1)
        return 1;
    return f3(n-1) + f3(n-1);
}
3
2
2
1
1
1
1
3
2
2
1
1
1
1
4
Q
?: What is the recursive work? What is the non-recursive work?








Q1: Give a recurrence relation for f3.

Constant Work Per Call
Give a recurrence relation for f3.

7
static int f3(int n) {
    if (n <= 1)
        return 1;
    return f3(n-1) + f3(n-1);
}
3
2
2
1
1
1
1
3
2
2
1
1
1
1
4
A

Constant Work Per Call
Give a recurrence relation for f3.
8
static int f3(int n) {
    if (n <= 1)
        return 1;
    return f3(n-1) + f3(n-1);
}
3
2
2
1
1
1
1
3
2
2
1
1
1
1
4
A

Identifying Patterns
Approach: Identify a pattern and then sum over all recursive levels.
9
static int f3(int n) {
    if (n <= 1)
        return 1;
    return f3(n-1) + f3(n-1);
}
3
2
2
1
1
1
1
3
2
2
1
1
1
1
4
8d
4c
2c
c

Summing Over Levels
Approach: Identify a pattern and then sum over all recursive levels.

What is the value of the last term in the sum for T(N)?


Give a simple asymptotic runtime bound.
10
static int f3(int n) {
    if (n <= 1)
        return 1;
    return f3(n-1) + f3(n-1);
}
Q
3
2
2
1
1
1
1
3
2
2
1
1
1
1
4
Q1: What is the value of the last term in the sum for T(N)?








Q2: Give a simple asymptotic runtime bound.

Summing Over Levels
Approach: Identify a pattern and then sum over all recursive levels.

What is the value of the last term in the sum for T(N)? _____ d


Give a simple asymptotic runtime bound.

11
static int f3(int n) {
    if (n <= 1)
        return 1;
    return f3(n-1) + f3(n-1);
}
A
3
2
2
1
1
1
1
3
2
2
1
1
1
1
4
?: What is the value of the last term in the sum for T(N)?




Q1: What is the value of the last term in the sum for T(N)?








Q2: Give a simple asymptotic runtime bound.

Summing Over Levels
As long as Q is a power of 2, then
12
A
Since Q = 2N - 1

Runtime: g0
Give best and worst case runtime. Assume k(N) runs in constant time and returns a boolean.
13
Q
static void g0(int N) {
    if (N == 0)
        return;
    g0(N / 2);
    if (k(N))
        g0(N / 2);
}
Q1: Give best and worst case runtime. Assume k(N) runs in constant time and returns a boolean.

Runtime: g0
14
A