贪心算法(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.学有余力再去思考如何去证明

相关推荐
HPtiger10 小时前
数据结构——选择排序
数据结构·算法·排序算法
康实训10 小时前
老年评估仿真实训平台架构设计与老年人能力评估实训室教学落地实践
大数据·人工智能·算法·实训室·实训室建设
DongQiShanRen10 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CCblandy10 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
丑梨数据10 小时前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
erzong23112 小时前
Linux操作系统:线程概念与控制
linux·算法
Nil20813 小时前
leetcode 5最长回文子串
算法·leetcode·职场和发展
xxwl58513 小时前
区域赛分类题解
c++·笔记·学习·算法
m0_6745719713 小时前
力扣 hot 100 python
python·算法·leetcode
青少儿编程课堂13 小时前
蓝桥杯+全国青少年信息素养大赛+电子学会PythonC/C++考级:最长公共子序列LCS解析
c++·python·算法·bfs·信息学竞赛