贪心算法

贪心算法是指在对问题求解时,总是作出当前看来是最好的选择。也就是说,不从整体最优上加以考虑,所得的仅是在某种意义上的局部最优解。

贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。

4种硬币,面值为二角五分、一角、五分、一分。现在有人用1块钱买了4角钱的东西,当售货员找零钱时,希望她找给小孩的硬币数目最少。

通常先找出不超过六角的最大面值即二角五分;然后用六角减去二角五分为三角五分,再找出二角五分,剩下一角;最后再找出一角即可。这种按递减的顺序考虑各种币种的方法称为贪心法(Greey Method),或称为启发式搜索法。

对上述问题可以描述为有n个输入,而它的解由这n个输入的某个子集组成,只有当某个子集满足某些事先给定的条件(约束条件)时才称为子集为该问题的一个可行解。显然,满足约束条件的子集可能有多个。因此,一般来讲,可行解也存在多个。为了衡量不同可行解的优劣,事先需要给出一定的判断标准。这些标准一般以目标函数的形式出现,只有保证目标函数能获取到极值的可行解才称为最优解。

实践表明,贪心法一般可以快速得到满意的解,因为省去了为寻找最优解需要穷尽所有可能的操作。另外,贪心法对许多问题也能产生整体最优解。如对单源最短路径,最小生成树等问题的求解。在有些情况下,即使贪心法得不到整体最优解,但其最终结果也可能是最优解的近似解。

贪心法的基本思路

从问题的某一个初始解触发逐步逼近给定的目标,以尽可能快的方法求得更好的解。即当达到算法中的某一步不能再继续前进时,算法停止,得到一个解,该算法有如下特点:

(1)不能保证求得的最终解是最佳的;

(2)不能用来求最大或最小等有极值要求问题的解;

(3)只能求得满足某些约束条件的可行解;

贪心选择性质:

一个问题的整体最优解可通过一系列局部的最优解的选择达到,并且每次的选择可以依赖以前作出的选择,但不依赖于后面要作出的选择。

对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解。

最优子结构选择:

当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构。问题的最优子结构性质是该问题可用贪心法求解的关键所在。

利用贪心法求解问题的过程通常包含如下3个步骤。

1)分解。将原问题分解为若干相互独立的阶段。

2)解决。对于每个阶段求局部的最优解,即贪心选择。在每个阶段,选择一旦作出就不可更改,作出贪心选择的依据称为贪心准则。贪心准则的制定是用贪心法解决最优化问题的关键,它关系到问题能否得到成功解决及解决质量的高低。

3)合并。将各个阶段的解合并为原问题的一个可行解。

贪心算法优点是求解速度快,时间复杂性低、缺点是需要证明要求解的问题的解是最优解。

背包问题

开心的金明:http://blog.csdn.net/wangdd_199326/article/details/57127173

ALGO-30 算法训练 入学考试http://blog.csdn.net/wangdd_199326/article/details/56293834

ALGO-21 算法训练 装箱问题 http://blog.csdn.net/wangdd_199326/article/details/56293227

拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
原文地址:https://www.cnblogs.com/dd2hm/p/7225773.html