news 2026/4/30 23:22:43

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

作者头像

张小明

前端开发工程师

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/23 20:26:29

如何在GitHub上部署Qwen-Image-Edit-2509实现高效图像编辑?

如何在GitHub上部署Qwen-Image-Edit-2509实现高效图像编辑&#xff1f; 在电商运营、社交媒体内容生产和数字创意设计的日常工作中&#xff0c;频繁修改图片已成为常态。然而&#xff0c;依赖Photoshop等专业工具进行手动调整不仅耗时费力&#xff0c;还对操作者的技术水平有较…

作者头像 李华
网站建设 2026/4/27 4:23:50

SLAM文献之A micro Lie theory for state estimation in robotic(1)

摘要 李群&#xff08;Lie group&#xff09;是一种历史悠久的数学抽象对象&#xff0c;其理论可追溯到19世纪&#xff0c;当时数学家 Sophus Lie 奠定了连续变换群理论的基础。此后多年&#xff0c;李群的影响逐渐扩展到科学与技术的诸多领域。近年来&#xff0c;在机器人领域…

作者头像 李华
网站建设 2026/4/26 23:42:51

wiliwili客户端全面故障排查指南:从入门到精通的手柄控制解决方案

大家好&#xff01;作为一款专为手柄控制设计的跨平台B站客户端&#xff0c;wiliwili确实给我们带来了全新的观影体验。但有时候&#xff0c;各种小问题也会让我们头疼不已。别担心&#xff0c;今天我就为大家带来一份超详细的wiliwili故障排查指南&#xff0c;让你轻松解决99%…

作者头像 李华
网站建设 2026/5/1 6:22:41

Live2D智能助手:3步打造网站AI虚拟角色完整指南

Live2D智能助手&#xff1a;3步打造网站AI虚拟角色完整指南 【免费下载链接】live2d_ai 基于live2d.js实现的动画小人ai&#xff0c;拥有聊天功能&#xff0c;还有图片识别功能&#xff0c;可以嵌入到网页里 项目地址: https://gitcode.com/gh_mirrors/li/live2d_ai 想要…

作者头像 李华
网站建设 2026/5/1 6:25:14

火山引擎AI大模型服务为何选择vLLM作为底层引擎?

火山引擎AI大模型服务为何选择vLLM作为底层引擎&#xff1f; 在大模型落地的浪潮中&#xff0c;推理性能已成为决定企业能否将先进AI能力真正转化为生产力的关键瓶颈。尽管许多团队已经成功训练或微调出高质量的语言模型&#xff0c;但在实际部署时却常常遭遇“跑不快、撑不住、…

作者头像 李华
网站建设 2026/5/1 5:42:18

LangChain Expression Language重构Qwen3-VL-30B链式逻辑

LangChain Expression Language重构Qwen3-VL-30B链式逻辑 在智能文档理解、医疗影像分析和自动驾驶感知系统日益复杂的今天&#xff0c;如何高效调度大型视觉语言模型&#xff08;VLM&#xff09;的推理流程&#xff0c;已成为AI工程落地的核心瓶颈。传统的串行调用方式难以应对…

作者头像 李华