贪心算法应该是动态规划算法算法的一种特殊情况,在这种情况下,递归算法可以变为迭代算法, 应该能证明有问题总是有一个最优解是做贪心选择得到的,从而说明贪心算法是安全的。 并且做了贪心选择后,剩下的子问题也就有这样的性质,子问题的最优解和我们所作贪心算法的联合可以得到原问题的最优解。
但是设计的算法是完全不同,贪心算法是自顶向下的,动态规划是子低向上的。贪心算法子问题的解不依赖与当前问题的解。 动态规划算法中原问题的解,依赖于子问题的解。
动态规划的两个性质,最优子结构和重叠子问题。 再车间装配问题中,最优子结构,是当前两个环节装配的时间最短。重叠子问题:当前的装配环节依赖于上一个装配环节的解决。 动态规划常用于最优化问题。这种问题有很多解,我们可以找到最优化的解。
1,描述最优解的子结构 2,递归定义最优解的值 3,自底向上计算最优解的值 4,由计算出的结果构造出最优解 再装配车架问题中:最优解的子结构,到a1j的最短时间是找到到a1,j-1的最短时间,或者是到a2,j-1的最短时间。 矩阵乘法的最优解子结构,矩阵ai和ai+1,的计算次数最少。这个用贪心 算法就行,这个是简单的问题。
再0-1问题中子问题的最优解是什么呢? 假设袋子能装的重量是W,能装的财务a1到an,他们的重量分别是w1到wn,价值分别是m1到mn。求出袋子能装的最大价值。 子结构就是剩余袋子中所能装的最大价值,这不是问题的解,这是原问题。 放入第i件物品所能得到的价值,不放入第二件物品所能得到的价值, 取这两个价值当中较大者,这就是子问题的解。我为什么没想到呢?
图的表示,链表表示和矩阵表示。 对于图广度优先算法搜索出来的路径就是到达该点的最短路径。 深度优先搜索可以用来证明回路和和子节点问题。 求出一个图的强连通分支。
接下来知道是什么问题,知道问题再这里有解就行了。没必要完全理解,证明这些问题。 最小生成树问题:寻找一个连通图的最小生成树,这里有一些点,把这些点链接起来的线,权值最小。 单源最短路径问题:寻找一个城市到另外一个城市的最短路径。这应该也是一个经典的动态规划算法。 首先最短路径的子路径是最短路径。然后介绍一个算法,这个算法能解决最短路径问题。 最小生成树,其实是最小权重生成树。轻边,权重最小的边。
算法问题选编浏览: 矩阵,矩阵是计算机中常用的方法,对矩阵算法是有很多处理的。
线性规划:就是说的线性函数和线性不等式。使用有限的资源将收益最大化。 我要知道什么情况下用线性规划算法能解决,要对某一个为题迅速区分出来是什么问题用什么算法。 对线性规划问题用矩阵解决。是解决多变量最优决策的方法。 多项式和快速傅里叶变换。能将特定条件的函数表示成三角函数的线性函数的积分,在工程学,热力学 关于数论的算法,大素数分解再加密科学中的应用。 字符串匹配算法,可已经有些问题用字符串算法处理。能找到相似的情况,知道用这样的算法就行了。 计算几何学。判断线段是否相交,寻找凸包。包含所有点的多边形。 有些问题虽然是np问题我们也可以当道近似的解。总比没有解
这本书要是被谁完全搞懂了。那一定是大牛。那就可以到一个地方做算法工程师,那百万年薪不是梦呀。 我的数学能力太差了,在这方面没有天分。