摘要:动态规划是一种求解某一类问题的核心思想,通过“大而化小”的思路解决问题的算法,与分治,递归算法类似却又不同,过程就是分析问题,构造状态转移方程,储存(缓存)子问题的解以空间换时间,并且无后效性,这种求解问题的思想大大降低了时间复杂度。
关键字:大而化小 递归 状态转移方程 缓存 空间换时间
1.动态规划的定义
1.1 动态规划求解思路的特点
Jon Kleinberg 的《算法设计》中对于动态规划是这么定义的:
dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems, solving each of those subproblems just once, and storing their solutions.
也就是说,动态规划一定是具备了以下三个特点:
1.把原来的问题分解成了几个相似的子问题。
2.所有的子问题都只需要解决一次。
3.储存子问题的解。
那么如何通过这三个特点求解问题呢?
1.2 引入实例:
从最经典的斐波那契数列(Fibonacci)的谈起,利用之前动态规划的三个特点来求解
1, 1, 2, 3, 5, 8, 13 ,21 …
根据动态规划的三个特点,把原问题分解成几个相似的子问题。
原问题和子问题之间的关系是:
Fibonacci(n)=Fibonacci(n-1)+Fibonacci(n-2)
现在需要计算n=6斐波拉契的值,那
算法设计报告——浅谈动态规划
最新推荐文章于 2023-12-31 14:27:48 发布