Chapter 0-Prologue

Enter Fibonacci Fibonacci is well known for it's famous sequence numbers: 0 1 1 2 3 5 8 13... In fact, Fibonacci numbers grow as fast as the power of 2, it's about Fn = 2^0.694n. Hence, you can easily estimate how many bits you should allocate if you want a F(n). For example, F(100) may have 0.694*100 bits long. An exponential algorithm One simple idea to is to recursive program the Fibnacci as follows:
int fib(int n) { if(n == 0) return 0; if(n == 1) return 1; return f(n-1) + f(n-2); }
but is it efficient? Let T(n) be the time complexity to compute fib(n). We will easily find that T(n)<=2 for n<=1. You'll find that T(n) = T(n-1) + T(n-2) + 3 It grows as fast as fibonacci!It's an exponential Algorithm. A polynomial algorithm F(100)=F(99)+F(98) F(99)=F(98)+F(97) F(98)= F(97)+F(96) Notice that there're so many computations are repeated.DP? We can DP this problem that it fits exactly what DP needs:
There is an ordering on the subproblems, and a relation that shows how to solve a subproblem given the answers to smaller subproblems, that is, subproblems that appear earlier in the ordering.
int fib(n) { if(n == 0) return 0; int f[n]; f[0] = 0; f[1] = 1; for(i = 2; i < n; i++) f[i] = f[i-1] + f[i-2]; return f[n]; } More careful analysis Consider the nth Fibonacci, how many bits with n = 100? about 0.694*100 = 70. So the cost of large number operations should be considered in the time complexity,which cost O(n). So the fib algorithms have a cost of O(n^2),still polynomial. But can we do even better? to be continued...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值