news 2026/4/23 6:22:19

贪心算法:用局部最优解迈向全局最优的艺术

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
贪心算法:用局部最优解迈向全局最优的艺术

贪心算法:用局部最优解迈向全局最优的艺术

什么是贪心算法?

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是全局最好或最优的算法策略。它不像动态规划那样考虑所有可能的子问题,而是局部最优,希望全局最优

贪心算法的适用场景

贪心算法适用于满足以下两个条件的问题:

  1. 贪心选择性质:局部最优选择能导致全局最优解

  2. 最优子结构:问题的最优解包含其子问题的最优解

经典问题与C++实现

1. 找零钱问题(硬币问题)

问题描述:给定不同面额的硬币和一个总金额,求最少硬币数。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int coinChangeGreedy(vector<int>& coins, int amount) {
// 从大到小排序硬币
sort(coins.rbegin(), coins.rend());

int count = 0;
for (int coin : coins) {
while (amount >= coin) {
amount -= coin;
count++;
}
}

return (amount == 0) ? count : -1;
}

int main() {
vector<int> coins = {1, 5, 10, 20, 50, 100};
int amount = 123;

int result = coinChangeGreedy(coins, amount);
if (result != -1) {
cout << "找零 " << amount << " 元需要最少 " << result << " 枚硬币" << endl;
} else {
cout << "无法找零" << endl;
}

return 0;
}

2. 区间调度问题

问题描述:给定多个会议的开始和结束时间,求最多能参加多少个不冲突的会议。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct Interval {
int start;
int end;
};

bool compare(Interval a, Interval b) {
return a.end < b.end; // 按结束时间升序排序
}

int maxMeetings(vector<Interval>& meetings) {
if (meetings.empty()) return 0;

// 按结束时间排序
sort(meetings.begin(), meetings.end(), compare);

int count = 1; // 第一个会议总是可以参加
int lastEnd = meetings[0].end;

for (int i = 1; i < meetings.size(); i++) {
if (meetings[i].start >= lastEnd) {
count++;
lastEnd = meetings[i].end;
}
}

return count;
}

int main() {
vector<Interval> meetings = {
{1, 3}, {2, 4}, {3, 6}, {5, 7}, {8, 9}
};

int result = maxMeetings(meetings);
cout << "最多可以参加 " << result << " 个会议" << endl;

return 0;
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 6:45:10

使用Qwen3-32B进行复杂推理任务的技巧与优化

使用 Qwen3-32B 实现复杂推理&#xff1a;从原理到工程落地的深度实践 在当前 AI 系统日益深入企业核心业务的背景下&#xff0c;模型能否真正“思考”&#xff0c;而不仅仅是“续写”&#xff0c;已成为衡量其价值的关键标准。我们不再满足于让大模型回答“什么是牛顿第二定律…

作者头像 李华
网站建设 2026/4/18 21:50:25

文件哈希管理神器:轻松掌握批量修改技巧的终极指南 [特殊字符]

文件哈希管理神器&#xff1a;轻松掌握批量修改技巧的终极指南 &#x1f680; 【免费下载链接】HashCalculator 一个文件哈希值批量计算器&#xff0c;支持将结果导出为文本文件功能和批量检验哈希值功能。 项目地址: https://gitcode.com/gh_mirrors/ha/HashCalculator …

作者头像 李华
网站建设 2026/4/3 7:34:26

时间复杂度与空间复杂度详解

一. 算法效率 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏&#xff0c;一般是从时间和空间两个维度来衡量的&#xff0c;即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法的运行快慢&#xff0c;而空间复杂度…

作者头像 李华
网站建设 2026/4/18 5:24:02

深度学习基础概念详解

1. 模型的本质是什么&#xff1f; 模型 一个数学函数 一堆参数&#xff08;权重&#xff09;最简单的例子&#xff1a;线性回归y w * x b- w和b就是"参数"&#xff08;也叫权重&#xff09;- 训练就是找到最好的w和b&#xff0c;让预测值y尽量接近真实值神经网络…

作者头像 李华
网站建设 2026/4/18 14:00:07

腰果矮砧密植:水肥一体化系统的铺设要点指南

认识腰果矮砧密植腰果矮砧密植&#xff0c;简单来说就是选用矮化品种&#xff08;Dwarf variety&#xff09;&#xff0c;通过科学增加种植密度来提高产量的创新栽培模式。就像在有限的果园空间里&#xff0c;巧妙布局更多果树&#xff0c;让每寸土地都释放出最大潜力。这种栽培…

作者头像 李华
网站建设 2026/4/22 13:17:38

橄榄矮砧密植:水肥一体化系统的铺设要点指南

认识橄榄矮砧密植橄榄矮砧密植&#xff0c;简单来说就是选用矮化品种&#xff08;Dwarf variety&#xff09;&#xff0c;通过科学增加种植密度来提高产量的创新栽培模式。就像在有限的果园空间里&#xff0c;精心布局更多果树&#xff0c;让每寸土地都发挥最大效能。这种栽培模…

作者头像 李华