贪心算法介绍

贪心算法简介

与其说是贪心算法,不如说是贪心策略,解决问题的策略:从局部最优解推出全局最优解。

  • 把解决问题的过程分为若干步
  • 在解决每一步的时候,都选择当前最优的解法
  • 希望得到全局最优解

例一:找零问题

我们手里有若干的纸币,1块、5块、10块、20块,现在用最少的张数,完成找零工作。

每次选择都选择当前能选择的最大面额

正确性证明:

这里能算出:

  • C <= 1,因为2张10元面值可以替换成1张20元面值
  • B <= 1,2张5元面值可以替换成1张10元面值
  • A <= 4,5张1元面值可以替换成1张5元面值

要证明贪心策略正确,需证明a == A && b == B && c == C && d == D

  • d >= D,因为每次都选择最大的,但是d > D不可能,因为后面的凑不出20块,最多4 + 5 + 10 = 19

    所以d == D

之后的a、b、c都是同理
这也是个面试题,之前遇到过:

为什么人民币有1块、5块、10块、20块、50块这些面值,为什么要这样?

例二:最小路径和

从左上角到右下角,每次只能走一步,向下或者向右,求最少的路径和。

每一步都选择当前最小的:

这里通过贪心,得到的结果并不是正确的

例三:背包问题

假设每个物品有无穷多个,此时所能装的最大价值是多少

这里有三个条件:

  • 背包容量
  • 物品体积
  • 物品价值
  1. 贪心策略1: 选择体积最小的,就装最小的 1 * 8 = 8
  2. 贪心策略2: 选择价值最大的10 + 1 + 1 + 1 = 13
  3. 贪心策略3: 单位体积(价值w / 体积v)的价值最大10 + 1 + 1 + 1 = 13

此时的三种贪心策略,都是错的...


通过上述三个例子,贪心算法即只考虑眼前最大利益,从而希望得到全局最大利益的。

贪心算法特点:

  • 贪心策略的提出,每次的标准都是不一样的
  • 贪心策略不一定正确,而正确的贪心策略,需要证明(证明稍微复杂)

贪心策略很多很多,前期学习将重点放在贪心策略上,将此策略当作经验吸收即可;

学到一定程度,可以尝试深究策略正确性的证明。

相关推荐
不会代码的小猴4 小时前
2. 了解Qt
开发语言·c++·笔记·qt·算法
比奇堡裤头村4 小时前
统计学习方法——支持向量机
算法·支持向量机·学习方法
wangruofeng4 小时前
3 步把 MacBook 变成 7×24 远程主机,人在外面随时接管桌面
ios·agent·mac
兵哥工控4 小时前
mfc实现在数值范围内实时改变静态文本控件字体颜色实例
c++·mfc
weixin_403810134 小时前
iOS免越狱自动化蓝牙HID方案:不装代理也能跑脚本
运维·ios·自动化·跨境电商·ai智能体·ios投屏·苹果投屏
程序喵大人6 小时前
【C++进阶】STL算法与函数对象 - 09 函数对象保存状态并复用规则
开发语言·c++·算法·stl·函数对象
致Great11 小时前
DeepSeek Harness插件开发实战教程:我让它自己写了一个 arXiv 搜索插件
算法
ShineWinsu12 小时前
对于C++:auto_ptr、unique_ptr、shared_ptr的模拟实现
c++·面试·笔试·智能指针·unique_ptr·shared_ptr·auto_ptr
XLYcmy14 小时前
京东 算法实习一面 下+手撕
c++·python·llm·概率论·数据处理·训练·codebert
反转180度15 小时前
Qt 6 + C++17 实现 SFTP 批量部署:工业设备运维工具实战解析
运维·c++·qt