编程初学者如何快速搞懂贪心算法?

本文针对编程初学者,深入浅出地讲解贪心算法的基本思想、解决的问题和典型应用。通过区间问题、哈夫曼树、排序不等式等案例,帮助读者快速理解和掌握贪心算法,实现从基础到进阶的跨越。
摘要由CSDN通过智能技术生成

概论

贪心问题是算法中相当困难的部分,因为一般的算法往往有通用的模板,方便我们理解,但贪心不仅没有模板,也没有通用套路,更倾向于是一种思想。

那么如果一个编程初学者,需要快速了解贪心,有可能吗?

当然还是可以的,但还是推荐先把基础的算法搞懂再来升级打怪,本篇文章可以先放在收藏夹里吃灰

那么如果真的需要快速学会贪心算法,本文将从贪心的基本思想,基础题型,经典例题,全方位为你的速通服务。

能力有限,如有不当之处欢迎讨论区交流。

基本思想

贪心算法其实是动态规划的一种,在特定情况下,删去动态规划的一些不必要的遍历和穷举。

所以如果搞不懂可以都用dp。

dp还是有套路可言的,按照套路带入题可以轻松解决绝大多数dp问题,有兴趣可以移步我的另一篇博客:指路

贪心最主要的特点是只关注下一步如何利益最大化而非全局

这样的算法就是尝试把所有局部最优解结合起来,得到全局最优解。

贪心解决的问题

很明显这样的思想不一定是对的,而其难点在于,如何证明这样的解法是对的。

能使用贪心的题目有一定限制,或者可以通过将数据修改(排序等),符合贪心题目的限制。

这里有一个证明方法:如有一类数 c n t cnt cnt,和一个数 a n s ans ans,若:
c n t < = a n s cnt <= ans cnt<=ans 并且 c n t > = a n s cnt >= ans cnt>=ans c n t = a n s cnt = ans cnt=ans

贪心也是一样,如果最终答案符合即可以小于等于所有方案,又可以大于等于所有可能的方案,自然就是最终答案了。

以下的几个题型,本文详细给出了题目及解题方法。

区间问题

通用思路

区间问题往往通用步骤就是先排序,按照左端点或者右端点。

再从小到大枚举每个区间。

选出当前如何选利益最大化(一般是通用的,比如选最右边或者最大等特征)。

遍历后续情况,按照该特征继续选取,得出最后结论。

那么我们先看一道题:

典例1:区间选点

题目链接

分析

根据输入样例,按照通用步骤,我们假设按照右端点进行排序,由于每个区间必须包含一个点,所以该区间上一定是存在一个点的。

按照贪心的思想:如何选取这个点使整个选取利益最大化? 本题的利益

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值