贪心算法讲解

本文介绍了贪心算法的基本特征,如局部最优决策和无后效性,以及在活动安排问题中的不同贪心选择标准。强调了找到合适的选择标准和预处理数据的重要性,以举例说明在求解最小生成树问题中的应用,如Prim算法和Kruskal算法。
摘要由CSDN通过智能技术生成

贪心算法的特征规律

贪心算法,“贪心”二字顾名思义,因此其规律特征就是更加注重当前的状态,贪心法做出的选择是对于当前所处状态的最优选择,它的解决问题的视角是微观的“局部”,而不是从全局宏观的角度思考和看待问题,根据这样的性质,要求贪心法解决的问题有“无后效性”——当前的决策不会影响到后续的决策,因为如果问题前后勾连紧密的话,会造成求解过程十分混乱。贪心算法常常用于组合优化问题,它的求解过程是多步判断的过程。

如果一个待求解的问题具有以上的特征,很有可能可以使用贪心算法解决。

 

算法设计策略

贪心算法设计的核心是——“贪心选择的标准”,结合《算法设计与分析》书中的“活动安排问题”,该问题有“最早开始时间”“持续时间最短”“结束时间最早”三种贪心选择的标准。

1.如果按照“最早开始时间”

 

v2-b309044f84128eec951912df301f0fb8_1440w.jpg

 

选择了活动1,就无法选择活动2和活动3

2.如果按照“持续时间最短”

 

v2-ccfe0980a9cd6971c007c8a5d9bfc9cf_1440w.jpg

 

选择了活动2.就无法选择活动1和活动3

3.综合上述分析该问题应该选择“结束时间最早”的贪心选择标准

 

 

通过上面的例子可知,对于贪心算法,核心是通过分析找到合适的“贪心选择标准”。

此外,还需要对贪心算法的合理性进行证明,通常采用反证法证明,如果想要证明某一贪心策略不正确,可以寻找反例(如“活动安排问题”的开始时间最早、持续时间最长这两种贪心策略都是通过举反例的方法排除的)。

 

当选定了“贪心选择的标准”之后,要按照这个对已知的数据信息进行预处理,通常的预处理是“排序”。本题中就要按照结束时间从小到大的顺序进行排序。

将数据进行预处理(排序)之后,一次按顺序遍历,并根据条件进行选取,构建两个集合,其中一个集合用于装符合条件的元素,另一个集合用于装未进行判断的元素,这是一个分步完成的过程。(有这个特征的典型应用就是在《数据结构》课程中曾经学习的求解最小生成树使用的prim算法、kruskal算法,两者都是分步的将符合条件的边收纳进入一个集合,再从另一个集合中挑选出符合“贪心标准”的边放入最小生成树集合)。

 

 

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值