Algorithm --贪心算法

本文介绍了贪心算法的概念,包括其原理、贪心选择性质和最优子结构。阐述了解题关键在于选择的贪心策略需具备无后效性。详细讲解了贪心算法的五个步骤,并与动态规划进行了对比,指出两者都要求问题具有最优子结构性质,但贪心算法更侧重于自顶向下的局部最优选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念

  1. 原理:一种启发式策略,在每个决策点作出在当时看来最佳的选择,即总是遵循某种规则,做出局部最优的选择,以推导出全局最优解(局部最优解->全局最优解)
  2. 求解最优化问题的两个关键要素:贪心选择性质+最优子结构
    贪心选择性质:进行选择时,直接做出在当前问题中看来最优的选择,而不必考虑子问题的解;
    最优子结构:如果一个问题的最优解包含其子问题的最优解,则称此问题具有最优子结构性质;
  3. 解题关键:贪心策略的选择
    贪心算法不是对所有问题都能得到整体最优解的,因此选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

二. 算法步骤:

  • 1)有一个以优化方式来求解的问题。 为了构造问题的解决方案,有一个候选的对象的集合C,如活动安排问题中的活动集合E ={1,2,3,…,n}。
  • 2)随着问题求解过程的进行,这个集合将逐步被划分为两个集合: 一个包含已经被考虑过并被选择的候选对象集合S;另一个包含已经被考虑过但被丢弃的候选对象。
  • 3 )有一个函数solution(S)来检查一个所选择的对象集合是否提供了问题的解答。该函数不考虑此时的解决方法是否最优。如活动安排问题中所有活动是否已经被考察。
  • 4)还有一个函数feasible(S)检查是否一个所选对象的集合是可行的,也即是否可能往该集合上添加更多的候选对象以获得一个解。和上一个函数一样,此时不考虑解决方法的最优性。在活动安排问题中,这个函数用来判断所选出的活动之间是否相容。
  • 5)选择函数select ©用来从剩余候选对象集合中,根据当前状态选择出最有希望问题最优解的对象。在在活动安排问题中,选择函数是从剩余活动中选择最早结束的活动。
  • 6)最后,有一个目标函数给出问题解的值,如在活动安排问题中被选择安排的活动数。
    在这里插入图片描述
    其中,选择函数是贪心算法设计的关键,通常与目标函数有关。

三 . 贪心法与动态规划

  • 最优解问题大部分都可以拆分成一个个的子问题,把解空间的遍历视作对子问题树的遍历,则以某种形式对树整个的遍历一遍就可以求出最优解,大部分情况下这是不可行的。
  • 贪心算法和动态规划本质上是对子问题树的一种修剪,两种算法要求问题都具有的一个性质就是子问题最优性(组成最优解的每一个子问题的解,对于这个子问题本身肯定也是最优的)。
  • 动态规划方法代表了这一类问题的一般解法,我们自底向上构造子问题的解,对每一个子树的根,求出下面每一个叶子的值,并且以其中的最优值作为自身的值,其它的值舍弃。
  • 贪心算法是动态规划方法的一个特例,可以证明每一个子树的根的值不取决于下面叶子的值,而只取决于当前问题的状况。换句话说,不需要知道一个节点所有子树的情况,就可以求出这个节点的值。由于贪心算法的这个特性,它对解空间树的遍历不需要自底向上,而只需要自根开始,选择最优的路,一直走到底就可以了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值