算法专题---贪心算法

一、贪心算法和回溯算法,动态规划的区别

「解决一个问题需要多个步骤,每一个步骤有多种选择」这样的描述我们在「回溯算法」「动态规划」算法中都会看到。它们的区别如下:

「回溯算法」需要记录每一个步骤、每一个选择,用于回答所有具体解的问题;
「动态规划」需要记录的是每一个步骤、所有选择的汇总值(最大、最小或者计数);
「贪心算法」由于适用的问题,每一个步骤只有一种选择,一般而言只需要记录与当前步骤相关的变量的值。

二、贪心算法满足的条件

  • 最优子结构:规模较大的问题的解由规模较小的子问题的解组成,区别于「动态规划」,可以使用「贪心算法」的问题「规模较大的问题的解」只由其中一个「规模较小的子问题的解」决定;
  • 无后效性:后面阶段的求解不会修改前面阶段已经计算好的结果;
  • 贪心选择性质:从局部最优解可以得到全局最优解。
  • 对「最优子结构」和「无后效性」的理解同「动态规划」,「贪心选择性质」是「贪心算法」最需要关注的内容。

     「贪心算法」总是做出在当前看来最好的选择就可以完成任务;
解决「贪心算法」几乎没有套路,到底如何贪心,贪什么与我们要解决的问题密切相关。因此刚开始学习「贪心算法」的时候需要学习和模仿,然后才有直觉,猜测一个问题可能需要使用「贪心算法」,进而尝试证明,学会证明。

三、比较典型题目案例

3-1、【455.分发饼干题】(该题目已单独写文章)   可查看链接:455. 分发饼干

3-2、【一系列找零钱问题】

找零钱问题统一思路,一般都是先给出尽可能多的面值较大的纸币(硬币),然后再给出尽可能多的面值第二大的纸币(硬币),直到凑成了我们需要凑出的金额为止,这样找零钱得到的纸币(硬币)的张数(个数)最少。能够这样做,与 可选的硬币(纸币)的面值密切相关,大家可以仔细想一想这个问题,相信会是一个非常不错的思考问题。

【860.柠檬水找零】(该题目已单独写文章)可查看链接: 860. 柠檬水找零

3-3、【区域选择系列题目】

一类使用「贪心算法」解决的问题称为「活动选择问题」,解决这一类问题的直觉是「优先选择活动最早的活动」。

可以查看下面3道典型的题目(每道题目都单独写了详细解法)

56. 合并区间: 【贪心算法思路】区间重叠问题的处理,首先左边界排序,排序之后局部最优:每次合并都取【最大的右边界】,这样就可以合并更多的区间了,最后合并所有重叠的区间。

435. 无重叠区间  找到需要移除区间的最小数量,使剩余区间互不重叠

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值