贪心算法作为一种常见的算法思想,在算法设计中得到了广泛应用。其核心思想是在每个阶段选择最优的决策,并且希望通过局部最优的选择达到全局最优的结果。贪心算法在选择最优决策时,需要依赖某个性质。这个性质通常称为贪心选择性质,是贪心算法能够正确求解问题的基础之一。
一、定义与特性
贪心选择性质包含两个概念:贪心策略和最优子结构。贪心策略指的是在某个阶段,选择那个符合当前状态下最优解的方案。最优子结构指的是问题的最优解可以通过子问题的最优解来达到。
贪心选择性质的特点是可行性,即每步所选择的局部最优解一定能够导致全局最优解,此外,贪心选择性质具有原问题和子问题之间的无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关;另外还有阶段性,即对于一个问题,可以把它分成若干个阶段,每个阶段对应一个决策,每个阶段选择的决策都保证了接下来阶段的最优解。
二、应用
贪心选择性质广泛用于算法设计中。典型的应用包括贪心算法、哈夫曼编码、最小生成树、最短路径等。
以贪心算法为例,一旦确定了问题的贪心选择性质,贪心算法的实现就相对容易了。贪心算法是一个自下而上的过程,首先对原问题进行分析,然后对问题分成若干个阶段,每个阶段对应一个决策。判断是否符合贪心选择性质,如果符合,就进行局部最优解的选择,并在选择后判断是否是全局最优解,如果满足,转到下一个阶段;如果不满足,需要回退到上一个阶段重新做出决策。重复这个过程,直到得到全局最优解。
三、分析
贪心选择性质的推广有时存在一定的困难,往往需要通过多个角度来分析问题,以充分说明其正确性。下面从多个角度来分析贪心选择性质的正确性。
1. 反证法
对于一个问题,假设存在一种策略,不能达到全局最优,我们可以通过反证法来证明贪心选择性质的正确性。首先,假设存在一种选择方案无法得到最优解,则表示该选择方案不属于局部最优解。其次,则表示我们无法用该选择方案作为下一个阶段的最优解,而这又违背了贪心选择性质的定义。因此,原说法不成立,贪心选择性质就成立了。
2. 预留出可供后续决策利用的信息
在问题的分析中,考虑最终需要得出什么结果,以及哪些信息可以被保存下来以便后续的决策使用,也是贪心选择性质的正确性确认中的重要因素。有时,为了满足后续决策的计算需求,需要保存一部分可能看起来没有直接紧密联系的信息,因此在问题分析时需要注意这点。
3. 来源于问题本身的一些特定性质
贪心选择性质的正确性也与问题本身的特性有关。例如,在最小生成树问题中,每一次选取权值最小的两个点连接起来,一直循环下去,直至全部位置联通,这时问题就得到了解决,贪心策略的正确性来源于图的连通性。
微信扫一扫,领取最新备考资料