数据结构与算法(邓俊辉清华大学2013版书)学习笔记3-绪论-动态规划

       什么叫做动态规划?

 

       动态规划是一种通过“大而化小”的思路解决问题的算法。区别于一些固定形式的算法,如二分法,宽度优先搜索法,动态规划没有实际的步骤来规定第一步做什么第二步做什么。所以更加确切的说,动态规划是一种解决问题的思想。这种思想的本质是,一个规模比较大的问题(假如用2-3个参数可以表示),是通过规模比较小的若干问题的结果来得到的(通过取最大,取最小,或者加起来之类的运算)所以我们经常看到的动态规划的核心——状态转移方程都长成这样:

* f[i][j] = f[i - 1][j] + f[i][j - 1]

* f[i] = max{f[j] if j < i and …} + 1

* f[i][j] = f[0][j - 1] && judge(1,i) || f[1][j - 1] && judge(2,i) || …

    关于Fib数列的算法,下面这个算法的时间复杂度的计算,用递推方程,得到是指数复杂度,而指数复杂度的算法属于实际不可行的算法。及其封底估算,运行第43个fib数需要1秒(在主频是10的9次方的情况下),而运行第67个数需要1天啦,而第92个需要三个世纪。

优化策略:

分别在时间复杂度上,o(2的n次) 变成o(n),空间复杂度则有动态规划策略解决了,是o(1)。

递归虽然可以帮助我们很好的找到一个可行且正常的解,但是,如果将效率提高,让之变成一个实用的算法的话,还需要进一步调试,而在这过程中。动态规划扮演着非常重要的角色。

用动态规划求解输入序列长度分别为m,n的LCS问题,时间复杂度为:由o(2的n次方)变到o(m+n)

但是我没有明白这个动态规划策略的思想,感觉不知道怎么做这个表。。。脑袋好麻木。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值