请教动态规划。

ninenine 2002-07-04 06:31:15
动态规划怎样理解?能解释得通俗点吗?
...全文
52 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
super_online 2002-07-10
  • 打赏
  • 举报
回复
我认为把dp和子问题联系起来比较好理解

动态规划算法也是一种解决含有最优子结构问题的有效方法。不过它所解决的问题与贪心所能解决的问题有一点不同,动态规划问题所产生的子问题是互相重叠的,如果直接按一般的算法做就会导致指数级别的复杂度。例如大家所熟悉的0-1背包问题,当我们考虑是否要把一件物品放到背包中去的时候,必须对把该物品加入的子问题与不把该物品加入的子问题进行比较即是否放入该物品还要依赖于以后子问题的解。这样就会导致O(2^n)的复杂度(因为每件物品都会有两种选择)。应用动态规划的算法就会解决这个问题,把指数级的复杂度降低到多项式级。
但是,动态规划本质上还是把问题转化为多个子问题集,然后通过子问题集之间的联系解出问题的解。动态规划的子问题必须符合最优子结构和无后效性。动态规划算法在运筹学上是有一套理论的,也有他专业的术语例如:阶段,状态,状态转移方程等。不过这些术语究其本质都是子问题,子问题性质的,子问题之间关系的形象描述。(详细的内容可以参见《运筹学教程》胡运权 郭耀煌)
/*我对dp的理解*/
在运筹学上,是这样描述动态规划算法:动态规划是解决多阶段决策最优化问题的一种思想方法。而且指明阶段的确定是动态规划问题的关键。那么到底什么是“阶段”呢?我是这样理解的,对于一个复杂问题,为了解决它我们把它分解为一些类似的子问题,希望通过子问题的求解最终解决题目,但是由于子问题所固有的性质导致了子问题的互相重叠而使算法的复杂度成指数级的增长,这样看来单个的子问题对解决问题没有什么帮助,但是对子问题之间的依赖关系进行整理以后会发现可以把问题分成k类(子问题集)且第i类子问题的解仅依赖于第i-1类子问题的解(即所说的无后效性)。这样看来所谓的“阶段”是把子问题归类,每一类就叫做一个阶段。动态规划也是很类似于递推的,一个子问题集的解主要依靠其他子问题集的性质参数进行推导,不过动态规划的推导不像递推公式那么简单它需要依靠状态转移方程来进行计算。
运筹学上所说的状态其实就是子问题;阶段是状态的集合也就是子问题的集合(子问题集);状态转移方程就是阶段与阶段之间的关系也就是集合类之间的关系。
alidiedie 2002-07-10
  • 打赏
  • 举报
回复
动态规划,备忘录法.
agree小菜壶.
把子问题的解记录下来,用来求大问题.
qiangqiang1112 2002-07-10
  • 打赏
  • 举报
回复
gz,一定要好好学习,算法没好好听
lang801213 2002-07-09
  • 打赏
  • 举报
回复
《运筹学》清华版 讲得不错
kbsoft 2002-07-09
  • 打赏
  • 举报
回复
动态规划,
算法之常,
运用之妙,
存乎一心.
chenggn 2002-07-09
  • 打赏
  • 举报
回复
那是技巧 不是动规 动规是 最优化原理 自己招数看去。。。
chenggn 2002-07-09
  • 打赏
  • 举报
回复
那是技巧 不是动规 动规是 最优化原理 自己招数看去。。。
LeeMaRS 2002-07-08
  • 打赏
  • 举报
回复
不是,动态规划是把已经计算过的结果保存起来,留到下次再用.所以有人叫它"备忘录法".这样就能节省下重复计算的花费.
ninenine 2002-07-08
  • 打赏
  • 举报
回复
有人说动态规划就是把不可能的路去掉,对吗?
alidiedie 2002-07-05
  • 打赏
  • 举报
回复
确实不赖,收藏.
atlantis13579 2002-07-04
  • 打赏
  • 举报
回复
最通俗的讲解
http://www.hz.js.cn/hzxzx/hajy/aszl/bcjx/dtgh/dtgh.htm
alidiedie 2002-07-04
  • 打赏
  • 举报
回复
确实很难解释的,最好找个例子钻研一下。
首先要明白动态规划能解决什么样的问题?
多阶段决策问题还要满足最优性原理。多阶段决策就不用解释了吧,顾名思义。。
最优性原理也叫子结构最优性原理。
完整的说就是:不论初始状态如何,以后的决策相对于初始决策形成的决策序列必须是最优的。你可能还不明白。
比如你要找一条从a0到a9的最短路径。中间有a1,a2,等节点。
假如你已经找到了着条路径,并且知道它经过a5,那么你可以推断从a0到a5的路径也一定是最短的,同理从a5到a9的路径也一定是最短的。
当然上面的问题仅说明了最优性原理的意思。你还不能看出动态规划的影子。
动态规划最经典的离子是多段图问题。
找本书看吧。
如果一个问题满足最优性原理,那么你就可以分阶段解决这个问题,有两种处理方法:前向处理法和后向处理法,具体采取哪中方法要看初始条件怎样。
我感觉说不清了。88








LeeMaRS 2002-07-04
  • 打赏
  • 举报
回复
太难解释了,同学.
我到现在也还是晕菜晕菜的.

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧