Você está na página 1de 8

Contents

1 Computing Fibonacci
numbers

TECHNO
OF LO
TE

GY
ITU
IAN INST

KH
ARAGPUR
IND
 

19 5 1

yog, km s kOflm^

Chittaranjan Mandal (IIT Kharagpur) Algorithms January 10, 2017 1/4


Computing Fibonacci numbers

Section outline

Direct formulation for Fn


computation
1 Computing Fibonacci Improved formulation for Fn
numbers computation

TECHNO
OF LO
TE

GY
ITU
IAN INST

KH
ARAGPUR
IND
 

19 5 1

yog, km s kOflm^

Chittaranjan Mandal (IIT Kharagpur) Algorithms January 10, 2017 2/4


Computing Fibonacci numbers Direct formulation for Fn computation

Direct formulation for Fn computation


80
< n=0
Fn =
: 1Fn 1+ Fn 2
n=1
n>1

int fibD(int n) {
if (n == 0) return 0 else
if (n == 1) return 1 else
return fibD(n-1) + fibD(n-2);
}

T (n) = T (n 1) + T (n 2) + C; T (0) =?; T (1) =?


T (n) + C = T (n 1) + C + T (n 2) + C
U (n + k ) = T (n) + C
U (n + k ) = U (n + k 1) + U (n + k 2), k =?
Suppose C = 1 and k = 3, then U (4) = 3, T (1) = 2; TE
OF
TECHNO
LO

GY
ITU
IAN INST

KH
ARAGPUR
U (3) = 2; T (0) = 1;

IND
 

19 5 1

yog, km s kOflm^

Chittaranjan Mandal (IIT Kharagpur) Algorithms January 10, 2017 3/4


Computing Fibonacci numbers Direct formulation for Fn computation

Direct formulation for Fn computation


80
< n=0 F2 = 1 F3 = 2 F4 = 3
Fn =
: 1Fn 1+ Fn 2
n=1
n>1
F5
F8
= 5
= 21
F6
F9
= 8
= 34
F7 = 13
F10 = 55

int fibD(int n) {
if (n == 0) return 0 else
if (n == 1) return 1 else
return fibD(n-1) + fibD(n-2);
}

T (n) = T (n 1) + T (n 2) + C; T (0) =?; T (1) =?


T (n) + C = T (n 1) + C + T (n 2) + C
U (n + k ) = T (n) + C
U (n + k ) = U (n + k 1) + U (n + k 2), k =?
Suppose C = 1 and k = 3, then U (4) = 3, T (1) = 2; TE
OF
TECHNO
LO

GY
ITU
IAN INST

KH
ARAGPUR
U (3) = 2; T (0) = 1;

IND
 

19 5 1

yog, km s kOflm^

Chittaranjan Mandal (IIT Kharagpur) Algorithms January 10, 2017 3/4


Computing Fibonacci numbers Direct formulation for Fn computation

Direct formulation for Fn computation


80
< n=0 F2 = 1 F3 = 2 F4 = 3
Fn =
: 1Fn 1+ Fn 2
n=1
n>1
F5
F8
= 5
= 21
F6
F9
= 8
= 34
F7 = 13
F10 = 55

int fibD(int n) {
if (n == 0) return 0 else
if (n == 1) return 1 else
return fibD(n-1) + fibD(n-2);
}

T (n) = T (n 1) + T (n 2) + C; T (0) =?; T (1) =?


T (n) + C = T (n 1) + C + T (n 2) + C
U (n + k ) = T (n) + C
U (n + k ) = U (n + k 1) + U (n + k 2), k =?
Suppose C = 1 and k = 3, then U (4) = 3, T (1) = 2; TE
OF
TECHNO
LO

GY
ITU
IAN INST

KH
ARAGPUR
U (3) = 2; T (0) = 1;

IND
 

19 5 1

yog, km s kOflm^

Chittaranjan Mandal (IIT Kharagpur) Algorithms January 10, 2017 3/4


Computing Fibonacci numbers Direct formulation for Fn computation

Direct formulation for Fn computation


80
< n=0 F2 = 1 F3 = 2 F4 = 3
Fn =
: 1Fn 1+ Fn 2
n=1
n>1
F5
F8
= 5
= 21
F6
F9
= 8
= 34
F7 = 13
F10 = 55

int fibD(int n) {
if (n == 0) return 0 else
if (n == 1) return 1 else
return fibD(n-1) + fibD(n-2);
}

T (n) = T (n 1) + T (n 2) + C; T (0) =?; T (1) =?


T (n) + C = T (n 1) + C + T (n 2) + C
U (n + k ) = T (n) + C
U (n + k ) = U (n + k 1) + U (n + k 2), k =?
Suppose C = 1 and k = 3, then U (4) = 3, T (1) = 2; TE
OF
TECHNO
LO

GY
ITU
IAN INST

KH
ARAGPUR
U (3) = 2; T (0) = 1;

IND
 

19 5 1

yog, km s kOflm^

Chittaranjan Mandal (IIT Kharagpur) Algorithms January 10, 2017 3/4


Computing Fibonacci numbers Direct formulation for Fn computation

Direct formulation for Fn computation


80
< n=0 F2 = 1 F3 = 2 F4 = 3
Fn =
: 1Fn 1+ Fn 2
n=1
n>1
F5
F8
= 5
= 21
F6
F9
= 8
= 34
F7 = 13
F10 = 55

int fibD(int n) {
if (n == 0) return 0 else
if (n == 1) return 1 else
return fibD(n-1) + fibD(n-2);
}

T (n) = T (n 1) + T (n 2) + C; T (0) =?; T (1) =?


T (n) + C = T (n 1) + C + T (n 2) + C
U (n + k ) = T (n) + C
U (n + k ) = U (n + k 1) + U (n + k 2), k =?
Suppose C = 1 and k = 3, then U (4) = 3, T (1) = 2; TE
OF
TECHNO
LO

GY
ITU
IAN INST

KH
ARAGPUR
U (3) = 2; T (0) = 1;

IND
 

19 5 1

yog, km s kOflm^

Chittaranjan Mandal (IIT Kharagpur) Algorithms January 10, 2017 3/4


Computing Fibonacci numbers Improved formulation for Fn computation

Improved formulation for Fn computation


80
< n=0 F2 = 1 F3 = 2 F4 = 3
Fn =
: 1Fn 1+ Fn 2
n=1
n>1
F5
F8
= 5
= 21
F6
F9
= 8
= 34
F7 = 13
F10 = 55

int fibTRLin(int n, int val, // call with val=1


int prev ) { // call with prev=0
if(n == 0)
return prev;
if(n == 1)
return val;
else
return fibTRLin(n-1, val+prev, val);
}
Only Fn 1 and Fn 2 are used to compute Fn
dynamic programming, using solution to smaller subproblems TE
OF
TECHNO
LO

GY
ITU
IAN INST

KH
ARAGPUR
IND
Method works in linear time routine is tail recursive
 

19 5 1

yog, km s kOflm^

Chittaranjan Mandal (IIT Kharagpur) Algorithms January 10, 2017 4/4

Você também pode gostar