算法设计与分析之贪心法


前言

        大家好,越努力,越幸运,我是程序猿小猿。本篇文章小猿将跟您分享算法设计与分析中的贪心法,希望对您有所帮助。

在这里插入图片描述

一、贪心法设计思想

        贪心法总是做出在当前看来最好的选择,一旦做出了选择,不管将来有什么结果,这个选择都不会改变。也就是说贪心法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心法得到的最终结果也是整体最优的。虽然贪心法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。

几点说明:
        1、问题的求解过程看作是一系列选择,每次选择一个输入,每次选择都是当前状态下的最好选择(局部最优解)。每做一次选择后,所求问题会简化为一个规模更小的子问题。从而通过每一步的最优解逐步达到整体的最优解。
        2、贪心法也是一个多阶段决策方法。每一步选择都能构成问题的一个可行解,同时使目标函数的值增加最快(求max)或增加最慢(求min),这种选择过程是以某些量度标准(贪心选择策略)为根据,而量度标准有时可以是目标函数本身,也可以是别的量度。
        3、量度标准的选择是贪心法的关键。

二、贪心法的基本要素

        贪心法的基本要素是贪心选择性质和最优子结构性质。一个问题可用贪心法求得整体最优解,需要证明问题的贪心选择性和最优子结构性质!
        下面分别对贪心法的这两个基本要素进行介绍:

         1、贪心选择性
        所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。
        注意点
        1、贪心选择性是贪心算法可行的第一个基本要素。
        2、贪心选择性是贪心算法与动态规划算法的主要区别。动态规划法:先求解出相关子问题的解,再做出选择;贪心法:先做出局部选择,再求解出由该选择产生的相应子问题的解。动态规划法通常以自底向上的方式解各子问题,而贪心法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每做一次贪心选择就将所求问题简化为规模更小的子问题。
        简单的说贪心法与动态规划法的区别是:
        贪心法是按一定顺序一定的策略,每一步得到一个结果传递到下一步,自顶向下,一步一步地作出贪心选择;只能解决通过局部最优的策略能达到全局最优的问题;
        动态规划法是根据一定的决策,每一步决策出的不是一个结果,而只是使问题的规模不断的缩小。
        3、确定一个问题是否具有贪心选择性质,需要证明问题的一个整体最优解是从贪心选择开始的。

         2、最优子结构性质
        当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。
        注意点
        最优子结构性质是可用动态规划法或贪心法求解的关键特征。

三、贪心法的优缺点

优点
        求解速度快、时间复杂性有较低的阶。

缺点
        通常需要证明算法的最优性,即能够求得问题的最优解。

四、贪心法的设计步骤

设计步骤
1、确定求解问题的输入
        贪心法求解的问题往往有n个输入;
2、选择量度标准
        必须选择量度标准,以便求得可行解;
3、求可行解,并检验是否满足约束条件
        求解可行解的过程,以及可行解本身,必须满足约束条件;
4、设定目标函数
        设定目标函数,以便衡量一个可行解的"优劣";

设计过程中需要考虑的几个方面
        1、候选集合C:为了构造问题的解决方案,有一个候选集合C作为问题的可能解,即问题的最终解均取自于候选集合C。
        2、解集合S:随着贪心选择的进行,解集合S不断扩展,直到构成一个满足问题的完整解。
        3、解决函数solution:检查解集合S是否构成问题的完整解。
        4、选择函数select:即贪心策略,这是贪心法的关键,它指出哪个候选对象最有希望构成问题的解,选择函数通常和目标函数有关。
        5、可行函数feasible:检查解集合S中加入一个候选对象是否可行,即解集合扩展后是否满足约束条件。

注意点
        1、贪心法设计的关键是贪心策略的选择(量度标准)。
        2、选择的贪心策略要具有无后向性(即,某状态以后的过程和不会影响以前的状态,只与当前状态或以前的状态有关)。

贪心法的一般过程

在这里插入图片描述

五、贪心法示例

1、活动安排问题
2、背包问题
3、哈夫曼编码
4、Prim算法
5、Kruskal算法

总结

知识点总结
        1、贪心法的原理是:通过局部最优来达到全局最优,采用的是逐步构造最优解的方法。
        2、贪心法的基本思路:从问题的某一个初始解出发逐步逼近给定的目标,每一步都做一个不可回溯的决策,尽可能地求得最好的解。当达到某算法中的某一步不需要再继续前进时,算法停止。
        3、两大要素:贪心选择性、最优子结构性质
        4、贪心选择的结果不一定是最优结果,其求解问题的方式是"自顶向下"的。
        5、贪心法的最优性需要证明。

结语
        对贪心法的介绍就到这里啦,希望这篇文章能给予你一些帮助,感谢各位人才的:点赞、收藏和评论,我们下次见。

在这里插入图片描述

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值