Vous êtes sur la page 1sur 23

Introduction: Efficient Algorithms

for the Problem of Computing


Fibonocci Numbers
Analysis of Algorithms

Prepared by

John Reif, Ph.D.

Readings
Main Reading Selection:
CLR, Chapter 1

Goal
Devise Algorithms to solve problems
on a TI calculator
assume each step
(a multiplication, addition, or control
branch)
takes 1 m sec = 10-6 sec
on 16 bit words

Time Efficiency

Fibonocci Sequence
0, 1, 1, 2, 3, 5, 8, 13
Recursive Definition
Fn = if n < 1 then n
else Fn-1 + Fn-2
Problem
Compute Fn for n=109

fast.

Fibonacci Growth
Can show as n
n

Fn ~

( )

Golden ratio

1+ 5
=
= 1.62...
2
So Fn ~ .45 2 .7n is .7n bit number
grows exponentially!

Obvious Method
Fn =

if n < 1

Fn-1 + Fn-2 if n > 1

n
costs at least adds of
2
.7n
= .35n bit numbers
2
n
.35n bits
Total Cost adds

2
16 bits

> .01 n2 steps


> 1016 m sec for n = 109
= 1010 sec ~ 317 years!

Wanted!
An efficient algorithm for Fn
Weapons:
Special properties of computational
problems
= combinatorics (in this case)

Theorem:
n

11 Fn +1 Fn

=
10 Fn Fn 1
Proof by Induction
Basis Step
Holds by definition for n=1
Inductive Step
Assume holds for some n>0

Inductive Step
n +1

11
1 1 Fn +1 Fn


=
10
1 0 Fn Fn 1
Fn +1 + Fn Fn + Fn 1

=
Fn
Fn +1

Fn + 2 Fn +1

=
Fn +1 Fn

Powering Trick
Fix M =

1 1
1 0

To compute Mn when n is a power of 2


For i=1 to log n do
2i

( ) (M )

M = M

2i-1

2i-1

22

gives M, M , M , ... M

logn

General Case of Powering


Decompose n = 2 j1 + 2
as sum of powers of 2
Example

Compute

j2

+ ... + 2

23 = 2 4 + 2 2 + 21 + 20
= 16 + 4 + 2 + 1
= 10111 2

M =

i =1,...,k

2 ji

jk

Algorithm
1 1
M =
10

(1) compute M, M , ..., M


j1

j2

jk

logn

by power method
n

(2) if n = 2 + 2 +... + 2 then M =

!M
i=1,...,k

(3) output Fn = upper right of M

2 ji

Bounding Mults
= 2 log n matrix products on
symmetric matrices of size 2 x 2
Each matrix product costs 6 integer
mults
Total Cost = 12 (log n) integer mults
> 360 for n = 109 integer mults

Time Analysis
Fn ~ .45 2 .7n
So Fn is m = .7n bit integer
New method to compute Fn requires
multiplying m bit number
BUT
Grammar School Method for Mult
takes m2 bool ops
= m2/16 steps
~ 1016 steps for n = 109
~ 1016 msec
~ 1010 seconds
~ 317 years!

Fast Multiplication
of m bit integers a,b by
Divide and Conquer

a = a L 2k + a R
b = b L 2k + b R

aL
bL

aR
bR

m
where k =
2
a b = a L b L 2 2k + (a L b R + a R b L )2k + a R b R
seems to take 4 multiplications, but

3 Mult Trick
(1) x = a L b L
(2) y = a R b R
(3) z = (a L + a R ) (b L + b R ) (x + y)
= a LbR + a R bL

Requires only 3 mults


m
on - bit integers and 6 adds on m - bits
2
a b = a L b L 2 2k + (a L b R + a R b L )2 k + a R b R
= x 2 2k + z 2 k + y

Recursive Mult Algorithm


Cost

Cm bit ops C1 = 1
Cm 3C m + 6m for m > 1
2
i

log m

3
6m
i = 0 2
3

2

log m

6m

6m log2 3
~ 6m1.4 bit ops
~ 1013 bit ops if m = .7 109
13

10
~
steps
16
~.05 years

Schonhage-Strassen Integer
Multiplication Algorithm
10m log m log log m bit ops
~ .7 1012 bit ops for m = .7 109
~ 4.3 1010 steps
~4.3 104 sec.
~3 days

This is feasible to compute!

Improved Algorithm
Computed Fn for n = 109
using 360 = 12 log n integer mults
each taking ~ 3 days
Total time to compute Fn
~ 3 years with 1 msec/step

How Did We Get Even More


Speed-Up?
1) New trick
a 2 log n mult algorithm
(rather than n adds)
2) Old Trick
use known efficient algorithms for
integer multiplication
(rather than Grammar School
mult)
3) Also used careful analysis of efficiency
of algorithms to compare methods

Problem (to be pondered later)


How fast can 109 integers be sorted?
What algorithms would be used?

Introduction: Efficient Algorithms


for the Problem of Computing
Fibonocci Numbers
Analysis of Algorithms

Prepared by

John Reif, Ph.D.