前言
动态规划一直作为很重要的算法,其难度也一直让很多希望学动态规划的人望而却步。本篇文章将从动态规划的理论开始,从理念走向实战,带领大家去理解动态规划并且去用动态规划解决实际问题。
如果有不喜欢看文字性内容(太具有理论性)的或者已经学过动态规划的,可以跳过看动态规划系列的其他文章
一、动态规划算法的概念
动态规划的基本思想是将待求解问题分解成若干子问题,先求解问题,再结合这些子问题的解得到原问题的解。
适用于动态规划的求解的问题经分解得到的子问题往往不是互相独立的。
二、动态规划的设计步骤
教科书化的步骤如下所示:
(1) 找出最优解的性质,并刻画其结构特征;
(2) 递归地定义最优值;
(3) 以自底向上的方式计算出最优值;
(4) 根据计算最优值时得到的信息,构造最优解;
然而在实战中,可以换一种更加简洁明了的表达方式,即:
(1) 设计状态
(2) 写出状态转移方程
(3) 设定初始状态
(4) 执行状态转移
(5) 返回最终的解
三、动态规划算法的基本要素
动态规划算法的有效性依赖于问题本身所具有的两个重要性质:最优子结构性质和子问题重叠性质。
1、最优子结构
设计动态规划算法的第一步通常是要刻画最优解的结构。当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。问题的最优子结构性质提供了该问题可用动态规划算法求解的重要线索。
在分析该问题的最优子结构性质时,所用的方法具有普遍性。首先假设由问题的最优解导出的其子问题的解不是最优的,再设法说明在这个假设下可构造出比原问题最优解更好的解,从而导致矛盾。
在动态规划算法中,利用问题的最优子结构性质,以自底向上的方式递归地从子问题的最优解逐步构造出整个问题的最优解。算法考虑的子问题空间中规模较小。
2、重叠子问题
在用递归算法自顶向下解此问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算。动态规划算法正是利用了这种子问题的重叠性质,对每个子问题只解一次,然后将其解保存在一个表格中,当再次需要解决此子问题时,只是简单地用常数时间查看一下结果。
3、备忘录方法
备忘录方法用表格保存已解决的子问题的答案,在下次需要解此子问题时,只要简单地查看该子问题的解答,而不必重新计算。与动态规划算法不同的是,备忘录方法的控制结构与直接递归方法的控制结构相同,区别在于备忘录方法为每个解过的子问题建立了备忘录以备需要时查看,避免了相同子问题的重复求解。文章来源:https://www.toymoban.com/news/detail-540631.html
总结
本篇文章大多摘录自王晓东老师所编著的《计算机算法设计与分析》一书中,书中所讲述的都是偏向于理论性的内容,读者可以通过阅读,增添自己的理论知识,后面几篇文章将深入带领大家,去走入动态规划算法,领悟动态规划的奥妙。文章来源地址https://www.toymoban.com/news/detail-540631.html
到了这里,关于动态规划(零)入门概念的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!