贪心算法概念

• 贪心算法总是作出在当前看来最好的选择,不从整体最优考虑,在某种意义上的局部最优选择。希望得到的最终结果也是整体最优的。
• 贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路径问题,最小生成树问题等。
• 在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。

贪心算法的基本要素

• 对于一个具体的问题,怎么知道是否可用贪心算法解此问题,以及能否得到问题的最优解呢?这个问题很难给予肯定的回答。
• 但是,从许多可以用贪心算法求解的问题中看到这类问题一般具有2个重要的性质:贪心选择性质和最优子结构性质

1、贪心选择性质

• 贪心选择性质:所求问题的整体最优解可通过一系列局部最优的选择,即贪心选择来达到。这是第一个基本要素,也是与动态规划算法的主要区别。
• 动态规划算法:自底向上,贪心算法:自顶向下,迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。
• 对于一个具体问题,确定它是否具有贪心选择性质,须证明每一步所作的贪心选择最终导致问题的整体最优解。

2、最优子结构性质

当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。

0-1背包问题:

给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大?


• 背包问题: 与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1≤i≤n。这2类问题都具有最优子结构性质,极为相似,但背包问题可以用贪心算法求解,而0-1背包问题却不能用贪心算法求解。

用贪心算法解背包问题的基本步骤:

• 计算每种物品单位重量的价值Vi/Wi
• 依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包
• 若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价值次高的物品并尽可能多地装入背包
• 依此策略一直地进行下去,直到背包装满为止。
• 具体算法可描述如下页:



最后修改:2021 年 12 月 12 日
如果觉得我的文章对你有用,请随意赞赏