贪心——一种算法思想

一、贪心算法的概念

贪心算法的实质:每一阶段得到局部最优,最终结果达到全局最优

例如,有一堆钞票,我们可以从中拿走十张,问怎样使拿到的钞票总金额最大?

这题的思路很清楚,我们如果每次都拿最大金额的钞票,那么,最终肯定是拿走了最大数额的钱。

在这题中,每次拿最大的就是局部最优,最后拿走最大数额的钱就是达到全局最优。

再比如,对于背包问题,如果有一堆物品,你有一个背包体积为N,现在问我们要如何把背包尽可能装满,并且使得最终背包内所有物品的总价值最大。

可能我们会想到,每次去选所占体积最小的物品。的确,这样可以能够保证我们装入物品的数量最多,但是所有物品的总价值不一定是最大的。

这时候就需要用到动态规划了。

具体求解方法请浏览:动态规划之背包问题篇_PL_涵的博客-优快云博客

二、如何验证贪心是否可行?

可能我们在刷一些类型是贪心算法的题目的时候,根本想不出来题目怎么与贪心相联系了,所以经常有人问有没有什么套路可以一看就看出来是贪心,但是贪心算法并没有固定的套路。

换句话说,贪心算法更像是一种思想。

所以在碰到此类题目的时候,最大的难点就是怎么去实现通过局部最优推出整体最优的过程。

那么如何看出局部最优是否能推出整体最优呢?

这就需要靠我们自己手动去模拟一些情况,如果模拟可行,就可以试一试贪心策略。

那么我们如何验证可不可以用贪心算法呢?最好的方法就是举反例,手动模拟的时候,感觉可以通过局部最优推出整体最优,而且想不到反例,那么就试一试贪心。

如果贪心的思路不可行,那么可能就需要动态规划或者一些其他的方法了。

所以这也是为什么我们AC了一些贪心算法的题目,但也不知道自己用了贪心算法,因为贪心有时候就是一些常识的知识,所以我们会认为本来就是这么做的。

三、贪心解题步骤

贪心算法的解题思路一般可分为以下四步:

1. 将问题分解为若干个子问题

2. 找出适合的贪心策略

3. 求解每一个子问题的最优解

4. 将局部最优解堆叠成全局最优解

其实这样算分的较细了,而我们真正刷题的时候,很难分出这么详细的解题步骤,因为有时候可能贪心的题目往往还和其他方面的知识混在一起。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PL_涵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值