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

相关推荐
大明者省3 小时前
WSL2 Ubuntu22.04 GPU训练环境配置指南
人工智能·算法·计算机视觉
白狐_7984 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander2585 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
Shell运维手记5 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
杨航 AI5 小时前
O(n log n):线性对数原理拆解 这个是排序算法的黄金复杂度之一。
算法·排序算法
船厂电气自动化ai大模型6 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
旖旎夜光6 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
叠层归一研究院7 小时前
AGI 系统(十一):二阶网络 — 二阶递归 × 多主体 (元符号网络)
开发语言·人工智能·算法·php·agi
zlinear数据采集卡8 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
杨石兴8 小时前
31、玩具MoM:用2x2矩阵串起全套流程
人工智能·算法·矩阵·电磁学