您的位置:首页 > 其它

贪心算法的理解

2016-08-31 17:52 127 查看
什么是贪心算法?
贪心算法从步步最优,到达全局最优。

什么时候能够使用贪心算法?
一般来说,凡是经过数学归纳法证明可以采用贪心法的情况都应该采用它,因为它具有高效性。
通常还有另外一个方法来判断,如果一个问题具有这两大性质,那么使用贪心法来对其求解总能求
得最优解。
1.最优子结构性质
当一个问题的最优解一定包含其子问题的最优解时,称此问题具有最优子结构性质。如何理解?换句话说:最优解一定是子问题的最优解组合而成的。没有这条性质,求出的最优解一定不是最优解,所以这才是重中之重。这也是动态规划问题的基石。
2.贪心选择性质
贪心选择性质时指所求问题的整体最优解可以通过一系列局部最优的选择获得,即通过一系列的逐步局部最优选择使得问题最终的选择方案是全局最优的。

贪心策略?
根据不同的贪心方式,选择的结果也会不尽相同,比如会场安排问题就有3中策略
第一种,最早开始时间:
第二种,最短时间
第三种,最早结束时间

利用贪心法求解问题的过程通常包含如下三个步骤:
(1)分解:将原问题分解为若干个相互独立的阶段。
(2)解决:对于每个阶段依据贪心策略进行贪心选择,求出局部的最优解。
(3)合并:将各个阶段的解合并为原问题的一个可行解。
Greedy(A,n)
{
//A[0:n-1]包含n个输入,即A是问题的输入集合
将解集合solution初始为空

for(int i=0;i<n;i++)
{
x=select(A);//依据贪心选择策略做贪心选择,求得局部最优解
if(x可以包含在solution)//判断解集合solution在加入x后是否满足约束条件
{
solution=union(solution,x);//部分局部最优解进行合并
}
return ( 解向量 solution); //n个阶段完成后,得到原问题的最优解

}
示例如下:这里的A,可以作为要(10枚钱币中,选择最少的个数,来达到100元,A就是这些钱币集合)solution就是局部最优解。

如何理解最优子结构性质?
最优子结构性质:如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质

最优子结构性质是最难得表示,必须要通过一些方法来证明,比如反证法,来证明其具备最优子结构性质,表现形式如下:若A是对于E的活动安排问题包含活动1的一个最优解,则相容活动集合A’=A-{1}是对于E‘={i属于E:si>=f1}的活动安排问题的一个最优解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  贪心法的理解