贪心算法的介绍

目录

贪心算法

一、贪心算法的原理与特点

1、什么是贪心算法?

2、贪心算法的特点

二、贪心策略的证明

三、学习贪心的方向

四、贪心题目更新讲解


贪心算法

本篇博客是我学习贪心算法的入门篇,在此我主要讲解贪心算法的原理实现以及其特点,更重要的是当我们遇到此类问题的时候应该如何运用原理解题。


一、贪心算法的原理与特点

首先,在我们学习算法的过程之中,我们肯定会有类似的经历:
比如我们在学习二分查找、回溯等等之类的算法,我们肯定是先理解原理,然后通过练习几道经典题目来总结做题套路,最后能够举一反三!!!
但是,当我在学习贪心算法的过程中,我惊奇的发现当我了解其原理,做了20道题后,我发现我在之前题目所总结的套路,放在21题上完全不适用!!!,就此断绝一切想要投机取巧的想法TnT。

这就是贪心算法的特点,毫无规律可言,如果想靠死记硬背套路完全不可行!!!。

所以接下来给大家介绍我理解的贪心算法。 

1、什么是贪心算法?


与其说是贪心算法,倒不如说是贪心策略:

解决实际问题的策略,从局部最优解--->全局最优解

我这里把算法流程分为三部分: 
1、把要解决的问题分为若干步。
2、在解决每一步的时候,都选择当前步骤看起来“最优的” 解法。
3、最后“希望“得到全局最优解。**

那么我们应该如何理解上面的三个步骤呢?接下来我将列举三个例子来帮助理解

例一:找零问题

张三在一家超市买了一瓶水,花了4元,但是他身上只有一张50元,他拿给老板找零。

假如你是老板,现在超市只有面额为20元、10元、5元、1元的纸币,现在问最少需要几张纸币才能找完?

下面是贪心策略的步骤:

例二:最小路径和的问题

例三:背包问题

由上面三个例子,我们就可以总结出贪心算法的本质:

贪婪 + 鼠目寸光,我在每一步都想要最好的解,但总体来看却是得不偿失

2、贪心算法的特点

由上面的说明,我们可以得出贪心算法的特点:

1、贪心策略的提出

①贪心策略的提出是没有标准和模板的!!!

②每一道题的贪心策略都是不同的!!!

2、贪心策略的正确性(这也是最重要的一点!!!

因为“贪心策略”有可能是一个错误的方法,比如上面的例2、例3

但是正确的“贪心策略”,是需要我们“证明的”!!!

常见的证明方法:我们在学习数学过程中的所有方法

二、贪心策略的证明

比如例2、例3我们可以举一个反例来证明其贪心策略是错误的

但是我们怎么证明例1的贪心策略是对的呢???

接下来我将讲我所理解的例1证明方法:

如下图:

我们假设所花费的纸币数量的最优解是:A,B,C,D

就能得出如图性质,原因在于B>=2时,可以被一张A代替,C,D同样如此。

我们假设贪心解是:a,b,c,d。此时证明最优解与贪心解相同即可,则证A=a......

首先,我们可以得出a>=A,原因在于贪心策略一定是要先满足a取到最大,再往后取b、c、d

但此时假设a>A,但是总价不变,则B,C,D凑剩下的价格所用的张数一定比用A多,所以不可能是最优解!!!所以a只能等于A,同理证b=B、c=C、d=D。证毕。

三、学习贪心的方向

由上面的证明,我们能够看出贪心的难点。

所以遇到不会的贪心题,很正常,把心态放好!!!

我自己总结了两点:

1、前期学习的时候,我会把重心放在如何寻找最优贪心策略上,遇到不会的问题就看题解或者找教学视频,总结一定的经验。

2、学习策略的证明,究竟是如何得出最优贪心解。

四、贪心题目更新讲解

接下来我会从LeetCode上把我做过的题目分享出来,将题解写成博客贴到下方,需要就点击查看吧。

1. 柠檬水找零问题 (easy)

2. 将数组和减半的最少操作次数(medium)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值