动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式。
如果大家对于动态规划不是很熟悉的话,可能看着上面一段文字会不知所云,我一般的学习方法是首先扫描一下基本定义,不深究(有点不求甚解的味道),然后去看一些实例,结合自己的体会,最后再回顾,精读一下定义,这样我对定义才能够真正的理解。下面我们依托一个经典的算法问题来体现上面这段文字的思想,0-1背包问题在算法学习中可谓是必修课程,一般在讲动态规划问题的时候都会用到这个例子。
问题描述:一个旅行者有一个最多能用M公斤的背包,现在有N件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为P1,P2,...,Pn.若每种物品只有一件 在不超过M公斤的前提下,求旅行者能获得最大总价值的方案。
输入格式:M,N W1,P1 W2,P2 ......
问题分析:最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][j]表示前i件物品恰放入一个容量为j的背包可以获得的最大价值。则其状态转移方程便是:f[i][j] = max{f[i-1][j], f[i-1][j-w[i]]+P[i]} 则问题就迎刃而解了。
动态规划算法的基本思想是:将待求解的问题分解成若干个相互联系的子问题,先求解子问题,然后从这些子问题的解得到原问题的解;对于重复出现的子问题,只在第一次遇到的时候对它进行求解,并把答案保存起来,让以后再次遇到时直接引用答案,不必重新求解。动态规划算法将问题的解决方案视为一系列决策的结果,与贪婪算法不同的是,在贪婪算法中,每采用一次贪婪准则,便做出一个不可撤回的决策;而在动态规划算法中,还要考察每个最优决策序列中是否包含一个最优决策子序列,即问题是否具有最优子结构性质。
分享到:
相关推荐
算法设计与分析——概率算法;中国科学技术大学;研究生课程资源
常用排序算法总结——数据结构
C语言常用算法模块的总结 一、最大值,最小值问题 教材page13/1.6、page36/2.4(2)、(3)、page98例5.1、5.2 二、连乘连加问题 page113、114、115 page129/6.3 page129/6.4、6.5 三、闰年算法 page17、 page107 四...
ACM算法总结大全:基本算法、图算法、数据结构、简单搜索、动态规划、数学、计算几何学等等。
运用动态规划算法解决最长公共子序列问题,计算最长公共子序列长度的动态规划算法LCS_LENGTH(X,Y)以序列X=, x2, …, xm>和Y=, y2, …, yn>作为输入。输出两个数组c[0..m ,0..n]和b[1..m ,1..n]。其中c[i,j]存储Xi与...
通过几天学习终于将标准库中排序相关的函数学完了,虽然有些问题没有搞得非常透彻,但是这些算法用起来应该是没问题了!
本书主要讲述了线性结构、树结构和图结构中数据表示及数据处理的方法,书中对各类数据结构的分析按照“算法思想——算法实现过程分析——算法实现程序——性能分析”的顺序进行讲述,算法采用C语言描述。
A very simple Genetic Algorithm implementation for matlab, easy to use, easy to modify and runs fast. Even has some visualization too. 各种遗传算法程序总和 总有一款适合你
并行计算——结构·算法·编程 复习总结 根据老师的复习要点和PPT的总结,不过没有很好的整理。
常用加密算法的java实现总结,常用加密算法的java实现总结,常用加密算法的java实现总结,常用加密算法的java实现总结,常用加密算法的java实现总结
NOIP2016专题 ——动态规划 by kqp 本ppt为归纳总结性ppt
3.徐持衡《浅谈几类背包题》 8.徐源盛《对一类动态规划问题的研究》 背包九讲Pack 【专辑】插头DP 【专辑】单调队列+斜率优化...算法导论第15章-动态规划 最长公共子序列和字符串相似度 最大矩阵连乘次数(最小连乘变形)
非变异算法总结了标准库提供的对各种容器操作的变异算法,比如交换、查找、匹配、复制、删除等等。
里面包括了1插入排序(Insertion Sort)、2选择排序、3冒泡排序(BubbleSort)、4快速排序(Quick Sort)、5堆排序(Heap Sort)
计算几何算法集锦,讲解,源代码等, 计算几何题目总结及分类,课件等等
掌握折半查找的概念和算法,了解它与其它查找方法的区别
其次, 它对现有的SAR算法进行了总结,并利用相干信号处理术语予以表述。本书与传统雷达书籍的不同之处在于,它是从处理角度而非雷达载荷角度进行讨论的。由于本书主要针对的是斜视角和孔径都相对较小的星载SAR, ...
经过3天努力,在容器学完后又解决了非变异算法的战斗,感觉收获挺多,拿出来与大家分享,记下来还有变异算法、排序算法和数值算法的总结都会相继分享!