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.

CLR, Chapter 1

Goal
Devise Algorithms to solve problems
on a TI calculator
assume each step
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
2
.7n
= .35n bit numbers
2
n
.35n bits

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

j1

j2

jk

logn

by power method
n

!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
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