这是我参与「第五届青训营 」笔记创作活动的第16天
贪心算法
贪心算法的本质
贪心算法可以理解为以局部的最优,达到全局最优的方法。
(1)贪心算法在每个阶段面临选择时,都将做出对眼前来讲最有利的选择,并不考虑该选择对将来是否有不良影响。
(2)贪心算法每个阶段的决策一旦做出,就不可更改,也即该算法不允许回溯
(3)贪心算法是根据贪心策略来逐步构造问题的解,若贪心策略不同,则得到的解就可能不同。因此,贪心算法的好坏取决于贪心策略的好坏。
(4)贪心算法具有高效性,他可以非常迅速的获得一个解。
例题1:找零钱问题
给定n种面值的钱币,钱币的面值分别是a1,a2,a3.....an。是正数。要找出m元钱,如何才能使得找出的钱币个数最少?
解:每一阶段都根据贪心策略作选择
例题2:最优装载问题
贪心策略:重量轻的集装箱先装。
设计简单、高效的近似算法尤为重要,贪心算法是首选。
贪心算法的基本要素
最优子结构和贪心选择结构。
1.最优子结构
最优子结构性质是指一个问题的最优解一定包含其子问题的最优解。换句话说,一个问题能够分解成各个子问题来解决,通过各个子问题的最优解能递推到原问题的最优解。那么原问题的最优解一定包含各个子问题的最优解,只有拥有最优子结构性质才能保证贪心法得到的解是最优解。
2.贪心选择性质
贪心选择性质是指所求问题最优解可以通过一系列局部最优的选择获得,通过一系列的逐步局部最优选择使得最终的选择方案是全局最优的。
贪心法的解题步骤
1.分解
2.解决
3.合并