贪心算法
学习视频:
练习题目:
什么是贪心
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。这么说有点抽象,来举一个例子:
例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?
指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。
贪心算法并不保证得到最优解,但对很多问题确实可以求得最优解。
没有套路
不好意思,贪心没套路,就刷题而言,如果感觉好像局部最优可以推出全局最优,然后想不到反例,那就试一试贪心吧!
而严格的数据证明一般有如下两种:
- 数学归纳法
- 反证法
数学就不在讲解范围内了,感兴趣的同学可以看一下我上个学期《算法导论》课程的PPT。
贪心算法一般分为如下四步:
- 将问题分解为若干个子问题
- 找出适合的贪心策略
- 求解每一个子问题的最优解
- 将局部最优解堆叠成全局最优解
这个四步其实过于理论化了,我们平时在做贪心类的题目很难去按照这四步去思考。做题的时候,只要想清楚局部最优是什么,如果推导出全局最优,其实就够了。
贪心没有套路,说白了就是常识性推导加上举反例。所以贪心在实际题目中应用非常灵活,所以贪心的学习还是要靠多做题来熟悉。