贪心算法(1)---简介

1.什么是贪心算法?(贪婪+鼠目寸光)

与其说是贪心算法,不如说是**贪心策略:**这是一种解决问题的策略,该策略的思路就是

"局部最优---->全局最优",具体步骤如下:

{

1.把解决问题的步骤分为若干步;

2.解决每一步的时候,都选择当前看起来"最优的"解法;

3."希望"全局达到最优解

}

例1:找零问题

已知我们只有面额【20,10,5,1】的纸币,要想用最少的张数来找够钱数46

(贪心思路:1.把该问题拆解为找一张张纸币的问题,要求找钱张数最少,就要找钱面额比较大;2.给他找第一张,选取局部最优的20,第二张局部最优20,第三张局部最优5,第四张局部最优1;3.正好满足加起来是46,达到全局最优解)

例2:最小路径和

|---|---|---|
| 1 | 3 | 1 |
| 1 | 7 | 1 |
| 6 | 1 | 1 |

题意:只能向下或者向右走,求从左上角到右下角的最优路径(即所走方框中的数和最小的路径)

贪心策略:从1开始,向下走(1+1)-->向下走(1+1+6)-->向右走(1+1+6+1)-->向右走(1+1+6+1+1)【每一步都是选择局部最优解,当然本题只是为了加深贪心策略的想法】

例3:背包问题

|-------|----|---|---|
| | 1 | 2 | 3 |
| V(体积) | 5 | 4 | 1 |
| W(价值) | 10 | 7 | 1 |

题意:背包的最大容量(体积)为8,目前有1,2,3三种种类的商品,他们的数量都是无限的,问如何装物品才能保证在不突破背包最大容量的情况下,装去最大价值的商品? 贪心策略1:只考虑体积作为限制条件,疯狂装体积小的商品,装的商品越多,价值就会越高;

贪心策略2:只考虑价格作为限制条件,先装一个1号物品,发现2号商品装不下,再装三个3号;

贪心策略3:将W/V作为限制条件,表示单位体积的商品的价值(1:2;2:1.75;3:1)按这个比值去决定装商品的顺序,先装一个1号物品,发现2号商品装不下,再装三个3号;

2.贪心算法的特点

2.1贪心策略的提出

  1. 贪心策略的提出是没有标准和模板的(有的根据常识经验,有的根据题意,有的可以根据多个条件)
  2. 可能每一道题的贪心策略都是不同的;

2.2贪心策略的正确性

因为有可能"贪心策略"是错误的方法(正如上述的例2和例3),正确的贪心策略是需要证明的;

常用的证明方法:数学中见过的所有证明方法

证明:找零问题

【20(A),10(B),5(C),1(D)】

以B为例,当B>2时,只要有两个B就可以用一个A代替;当B=2时,两个B可以用一个A来代替,所以要使用B达到最优策略,就必须B的数量<2;C也同理,C的数量<2;D也同理,D的数量<5;

因此,最优解的性质:B<=1;C<=1;d<=4;---->这样一来,BCD最多能凑的钱是19(10+5+4);

贪心:【a,b,c,d】: 能用a解决的就用a解决,

最优解:【A,B,C,D】结合BCD{MAX}=19,故A也是能用A解决就用A解决,所以A=a;

同理可以推导b=B,C=c,D=d;

3.学习贪心的方向

1.心态放平,遇到不会的贪心题目很正常

2.前期学习时把重点放在贪心策略上,当成经验吸收掉;(不要去深究为什么会这样想,为什么是对的,只是当成经验和知识吸收掉,能够用到下次题目中即可)

3.学有余力再去思考如何去证明

相关推荐
冻柠檬飞冰走茶20 分钟前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
雪落漂泊40 分钟前
C++算法 二分查找篇(上)
开发语言·c++·算法
LabVIEW开发2 小时前
LabVIEW 连接板:28 个端子怎么排,优先级怎么定
java·算法·labview
严肃小白兔4 小时前
MATLAB 数值计算中的精度与误差问题:浮点运算、误差传播与数值稳定性
人工智能·算法·matlab
青少儿编程课堂5 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
jktantan6 小时前
注解式脱敏:用 Jackson 的 ContextualSerializer 做字段级策略(一)
spring boot·后端·算法·spring cloud·系统架构
Dream it possible!19 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊19 小时前
算法之双指针系列(一)
算法·leetcode
十二19 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
小此方20 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划