C++ 数据结构(一)绪论(6)动态规划(1)

来源:我的博客站 OceanicKang |《C++ 数据结构(一)绪论(6)动态规划(1)》

上一篇:《C++ 数据结构(一)绪论(5)迭代与递归(3)》

fib():递归

f i b ( n ) = f i b ( n − 1 ) + f i b ( n − 2 ) : 0 , 1 , 1 , 2 , 3 , 5 , 8... fib(n) = fib(n-1) + fib(n-2):{0, 1, 1, 2, 3, 5, 8 ...} fib(n)=fib(n1)+fib(n2)0,1,1,2,3,5,8...

int fib(n) {
    return (2 > n) ? n : fib(n - 1) + fib(n - 2);
}

fib():递推方程

KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ 复杂度:& \begin{c…

fib():封底估算

ϕ = 1 + 5 2 = 1.61803 ⋯ \phi = \frac{1 + \sqrt{5}}{2} = 1.61803 \cdots ϕ=21+5 =1.61803

fib() 计算第 43 项大致需要 1 s

KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ & \phi^{36} \a…

fib() 计算第 67 项大致需要 1 day

KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ & \phi^5 \appr…

fib() 计算第 92 项大致需要 3 century

ϕ 92 ≈ 1 0 19 f l o ≈ 1 0 10 s e c ≈ 1 0 5 d a y ≈ 3 c e n t u r y \phi^{92} \approx 10^{19} flo \approx 10^{10} sec \approx 10^5 day \approx 3 century ϕ921019flo1010sec105day3century

fib():递归跟踪

1.png

递归版 fib() 低效的根源在于,各递归实例均被大量重复调用

fib():迭代

解决方法A:记忆

memoization:将已计算过实例的结果制表备查

解决方法B:动态规划

dynamic programming:颠倒计算方向,由自顶而下递归改为自底而上迭代

3.png

f = 0; g = 1; // fib(0); fib(1)
while (o < n--) {
    g = g + f;
    f = g - f;
}
return g;

T ( n ) = O ( n ) , 而 且 仅 需   O ( 1 )   空 间 T(n) = O(n),而且仅需 \ O(1) \ 空间 T(n)=O(n) O(1) 

nfg
001
111 - 011 + 0
212 - 121 + 1
323 - 132 + 1
435 - 253 + 2
fg
f’g’ - fg’g + f

下一篇:《C++ 数据结构(一)绪论(6)动态规划(2)》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值