首页 > 代码库 > 算法重拾之路——动态规划基础
算法重拾之路——动态规划基础
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************
闲谈: 快到期末了,身为计算机专业大三学生,各种大作业缠身,到了大三,不再局限于考试了,学校更重视的是实践能力,所以各种大作业啊,并行计算、软件工程、软件综合设计 等等,有些东西,要求做的,在前两年,没有学过,于是又去学习,基本要把时间榨干了,这本书看了很多,就是一直没时间去更新。继续努力吧!
这二章 动态规划
1.基本思想
动态规划的基本思想也是 将待求解问题分解成若干子问题,先求子问题,然后从这些子问题的解 得到 原问题的解。
但是,与分治法不同的是:经过分解的子问题,往往不是 相互独立 的。(分治法往往将有些子问题,重复计算多次,动态规划,用一个表 记录 所有 已解决的子问题的答案,不管用没用到,只要计算过,就存起来 )
2.按部就班
解动态规划问题的步骤:
1)找出最优解的性质,并刻画其结构特征
2)递归地定义最优值
3)以自底向上的方式计算出最优值
4)根据计算最优值时获得的信息,构造最优解
< 上面步骤 1 ~ 3 是动态规划算法的基本步骤。 在只需要求最优值的情况用1~3足够了,如果要求问题最优解,那就需要步骤4来帮忙了。>
PS: 关于最优值 和 最优解:以矩阵连乘 为例,如果最后求 最少需要多少次乘法 ,那就是最优值;如果最后求,最少次乘法 是如何配对括号来相乘,这就是 最优解 )
3.两个兄弟
> 兄弟:最优子结构:
· 设计动态规划算法的第一步通常是要 刻画最优解的结构。
· 当问题的最优解包含了其子问题的最优解时,称该问题有最优子结构性质。
· 分析一个问题是否有最优子结构性质时,所采用的方法是 普遍性:
首先假设由问题的最优解导出的子问题的解不是最优的,然后再设法说明在这个假设下可构造出比原问题最优解更好的解,从而导致矛盾。
· 利用问题的最优子结构性质,以 自底向上 的方式递归地从子问题的最优解逐步构造出整个问题的最优解。
> 兄弟:重叠子问题
· 在用递归算法 自顶向下 解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。动态规划算法正是利用这种子问题重叠性质,对每一个子问题,只求解一次,将解存入表格,下次用到,直接查看表格。
4.变形之 备忘录法
备忘录方法是动态规划算法的变形,与动态规划一样,备忘录方法也是用表格存储子问题的答案。但是,与普通动态规划方法不同的是,备忘录方法的 递归方式 是 自顶向下 的,而动态规划的算法是 自底向上 的。
因此,备忘录方法的控制结构 与 直接递归的控制结构相同,区别在于,备忘录方法有表来存储子问题的答案。
一般的来讲,当一个问题的所有子问题都至少要解一次时,用动态规划方法比用备忘录方法好。此时,动态规划算法没有任何多余计算。当子问题的空间中 部分子问题可不必求解时,用备忘录方法比较有利。
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************
算法重拾之路——动态规划基础