贪心算法或者贪心思想采用贪心的策略,保证每次 *** 作都是局部最优的,从而使得得到的结果是全局最优的。
二、基本要素 最优子结构性质和贪心选择性质PS;最优子结构:
当一个问题的优化解包含了子问题的优化解时,这个问题具有优化子结构。
缩小子问题集合,只需那些优化问题中包含的子问题,降低实现复杂性。
优化子结构使得我们能自下向上地完成求解过程
整体的最优解可以通过一系列最优解来达到,每次做出的选择可以以来之前的选择,但是不依赖后续的选择
二、基本要素 最优子结构性质和重叠子问题性质PS:重叠子问题:
在问题的求解过程中,很多子问题的解将被多次使用
动态规划与贪心算法类似,都是将问题实例归纳为更小的、相似的子问题,并通过求解子问题产生一个全局最优解。
区别:贪心法选择当前最优解,而动态规划通过求解局部子问题的最优解来达到全局最优解。
<4>典型例题 01背包问题 题目:有N件物品和一个容量为V的背包。第i件物品的费用是weight[i],价值是value[i]。每件物品可以无限选用,求将哪些物品装入背包可使价值总和最大。分析:01背包问题的意思是每种物品仅有一件,放则为“1”,不放则为“0”.我们可以将问题简化为“将前 (i-1)件物品放入容量为V的背包中,总价值为f[n-1] [v]”,如果放第i件物品,问题为前i-1件物品放入剩下的容量为V-weight[i]的背包中,价值为f[i-1][V-weight[i]]+value[i]
核心代码如下
for (int i=1; i<=N; i++) for (int j=1; j<=M; j++) { if (weight[i]<=j) { f[i][j]=max(f[i-1][j],f[i-1][j-weight[i]]+value[i]); } else f[i][j]=f[i-1][j]; }
本篇博客学习自B站@万诺coding@秒懂算法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)