贪心算法与动态规划

贪心算法与动态规划,第1张

贪心算法与动态规划 <1>贪心算法 一、基本定义

贪心算法或者贪心思想采用贪心的策略,保证每次 *** 作都是局部最优的,从而使得得到的结果是全局最优的。

二、基本要素 最优子结构性质和贪心选择性质

PS;最优子结构:
当一个问题的优化解包含了子问题的优化解时,这个问题具有优化子结构。
缩小子问题集合,只需那些优化问题中包含的子问题,降低实现复杂性。
优化子结构使得我们能自下向上地完成求解过程

三、基本思路 1.建立数学模型 2.把需要求解的问题分成多个子问题 3.对每一个字问题求解,得到子问题的局部最优解 4.把子问题的局部最优解合成原来问题的一个最优解 <2> 动态规划 一、基本定义

整体的最优解可以通过一系列最优解来达到,每次做出的选择可以以来之前的选择,但是不依赖后续的选择

二、基本要素 最优子结构性质和重叠子问题性质

PS:重叠子问题:
在问题的求解过程中,很多子问题的解将被多次使用

三、基本思想 1.把原始问题划分为一系列子问题 2.求解每个子问题仅一次,并将其结果保存在一个表中,以后用到时到时直接存取,不重复计算,节省计算时间 3.自底向上地计算 <3>区别与联系 联系:

动态规划与贪心算法类似,都是将问题实例归纳为更小的、相似的子问题,并通过求解子问题产生一个全局最优解。

区别:

贪心法选择当前最优解,而动态规划通过求解局部子问题的最优解来达到全局最优解。

<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@秒懂算法

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5718850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存