Intro: Fibonacci Numbers: Daniel Kane
Intro: Fibonacci Numbers: Daniel Kane
Fibonacci Numbers
Daniel Kane
Department of Computer Science and Engineering
University of California, San Diego
1 Problem Overview
2 Naive Algorithm
3 Efficient Algorithm
Definition
⎧
⎨0, n = 0,
⎪
⎪
Fn = 1, n = 1,
⎪
⎩Fn−1 + Fn−2, n > 1 .
⎪
Definition
⎧
⎨0, n = 0,
⎪
⎪
Fn = 1, n = 1,
⎪
⎩Fn−1 + Fn−2, n > 1 .
⎪
Proof
By induction
Rapid Growth
Lemma
Fn ≥ 2n/2 for n ≥ 6 .
Proof
By induction
Base case: n = 6, 7 (by direct computation).
Rapid Growth
Lemma
Fn ≥ 2n/2 for n ≥ 6 .
Proof
By induction
Base case: n = 6, 7 (by direct computation).
Inductive step:
Theorem
F20 = 6765
Example
F20 = 6765
F50 = 12586269025
Example
F20 = 6765
F50 = 12586269025
F100 = 354224848179261915075
Example
F20 = 6765
F50 = 12586269025
F100 = 354224848179261915075
F500 = 1394232245616978801397243828
7040728395007025658769730726
4108962948325571622863290691
557658876222521294125
Computing Fibonacci numbers
Compute Fn
Input: An integer n ≥ 0.
Output: Fn .
Outline
1 Problem Overview
2 Naive Algorithm
3 Efficient Algorithm
Algorithm
FibRecurs(n)
if n ≤ 1:
return n
Algorithm
FibRecurs(n)
if n ≤ 1:
return n
else:
return FibRecurs(n − 1) + FibRecurs(n − 2)
Running time
FibRecurs(n)
if n ≤ 1:
return n
else:
return FibRecurs(n − 1) + FibRecurs(n − 2)
If n ≤ 1
FibRecurs(n)
if n ≤ 1:
return n
else:
return FibRecurs(n − 1) + FibRecurs(n − 2)
T (n) = 2.
If n ≥ 2
FibRecurs(n)
if n ≤ 1:
return n
else:
return FibRecurs(n − 1) + FibRecurs(n − 2)
If n ≥ 2
FibRecurs(n)
if n ≤ 1:
return n
else:
return FibRecurs(n − 1) + FibRecurs(n − 2)
T (n) = 3
If n ≥ 2
FibRecurs(n)
if n ≤ 1:
return n
else:
return FibRecurs(n − 1) + FibRecurs(n − 2)
T (n) = 3 + T (n − 1) + T (n − 2).
Running Time
{︃
2 if n ≤ 1
T (n) =
T (n − 1) + T (n − 2) + 3 else.
Running Time
{︃
2 if n ≤ 1
T (n) =
T (n − 1) + T (n − 2) + 3 else.
Therefore T (n) ≥ Fn
Running Time
{︃
2 if n ≤ 1
T (n) =
T (n − 1) + T (n − 2) + 3 else.
Therefore T (n) ≥ Fn
T (100) ≈ 1.77 · 1021 (1.77 sextillion)
Running Time
{︃
2 if n ≤ 1
T (n) =
T (n − 1) + T (n − 2) + 3 else.
Therefore T (n) ≥ Fn
T (100) ≈ 1.77 · 1021 (1.77 sextillion)
Takes 56,000 years at 1GHz.
Why so slow?
Fn
Fn−1 Fn−2
Fn
Fn−1 Fn−2
Fn
Fn−1 Fn−2
Fn−4 Fn−5 Fn−5 Fn−6 Fn−5 Fn−6 Fn−6 Fn−7 Fn−5 Fn−6 Fn−6 Fn−7 Fn−6 Fn−7 Fn−7 Fn−8
..
.
Why so slow?
Fn
Fn−1 Fn−2
Fn−4 Fn−5 Fn−5 Fn−6 Fn−5 Fn−6 Fn−6 Fn−7 Fn−5 Fn−6 Fn−6 Fn−7 Fn−6 Fn−7 Fn−7 Fn−8
..
.
Outline
1 Problem Overview
2 Naive Algorithm
3 Efficient Algorithm
Another Algorithm