算法分析与设计——贪心法

贪心算法,只在乎眼前利益,只做出在当前看来最好的选择。也就是说贪心算法不从整体最优考虑,它所做出的选择只是在某种意义上的局部最优选择。

        当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。

        我们看一个找硬币的例子。假设有四种硬币,它们的面值分别为:2角5分,1角,5分,1分。现在要找给顾客6角3分。怎样找使得给顾客的硬币最少。

我们下意识地使用了这样的找硬币算法:首先选出一个不超过6角3分的最大硬币,然后,从6角3分中减去,再在剩余的值中选出一个不超过该值的最大硬币,如此反复,直到找够为止。这个找硬币的算法就是贪心选择算法。

        如果上述问题改为:要找给顾客1角5分,硬币的面值分别为:1角1分,5分和1分。这时用贪心算法,给顾客找的情况是:一个1角1分和四个1分。而找三个5分为最优找法。故贪心算法不是对所有问题都能得到整体最优解。

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

基本思想:从问题的某一初始解出发,在每一阶段都根据贪心侧罗来做出当前最优的决策,逐步逼近给定的目标,尽可能快的求得更好的解。当达到算法中的某一步不能再继续 前进时,算法终止。

从思想中推出结论:

1、每个阶段,贪心法都会做出对眼前来讲最有利的选择。

2、选择一旦做出,不能更改。不允许回溯。

3、根据贪心策略来逐步构造问题的解。

贪心法的基本要素:

        最优子结构性质:一个问题的最优解一定包含其子结构的最优解。

        贪心选择性质:所求问题的整体最优解可以通过一系列局部最优的选择获得,即通过一系列的逐步局部最优选择使得最终的选择方案是全局最优的。

 

你可能感兴趣的:(算法,算法)