news 2026/6/6 0:21:33

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

作者头像

张小明

前端开发工程师

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/6/5 11:10:06

ReasonRAG:仅用5k数据超越90k训练的SOTA模型,大模型RAG训练新范式

ReasonRAG是由港城大与华为诺亚方舟实验室提出的基于过程监督的Agentic RAG训练框架&#xff0c;通过SPRE设计过程级奖励&#xff0c;结合MCTS探索高质量推理路径&#xff0c;构建了首个过程监督数据集RAG-ProGuide。该方法仅需5k训练数据就在多个评测集上超越了需90k数据的SOT…

作者头像 李华
网站建设 2026/6/5 15:04:49

微信小程序表格组件技术解析与工程实践

在微信小程序开发中&#xff0c;数据表格作为信息展示的核心组件&#xff0c;其实现质量直接影响用户体验。传统方案往往面临样式定制困难、性能瓶颈和兼容性问题等挑战。本文将从技术架构、性能对比和实际应用三个维度&#xff0c;深入剖析miniprogram-table-component组件的设…

作者头像 李华
网站建设 2026/6/2 19:44:56

npm安装Vue前端可视化Qwen-Image调用界面教程

npm安装Vue前端可视化Qwen-Image调用界面教程 在创意设计与数字内容生产日益依赖AI的今天&#xff0c;如何让非技术人员也能轻松使用强大的文生图模型&#xff1f;这不仅是技术问题&#xff0c;更是产品体验和工程落地的关键挑战。Qwen-Image作为通义实验室推出的200亿参数级文…

作者头像 李华
网站建设 2026/6/4 3:19:52

深入理解ACE-Step的深度压缩自编码器:实现高质量音频重建的关键

深入理解ACE-Step的深度压缩自编码器&#xff1a;实现高质量音频重建的关键 在AI加速渗透创意产业的今天&#xff0c;音乐创作正经历一场静默却深刻的变革。过去需要数年训练才能掌握的作曲技巧&#xff0c;如今通过一个文本提示就能生成一段结构完整、情感丰富的旋律。然而&am…

作者头像 李华
网站建设 2026/6/5 7:17:39

EasyAdmin8终极指南:从零构建企业级后台管理系统的完整方案

EasyAdmin8终极指南&#xff1a;从零构建企业级后台管理系统的完整方案 【免费下载链接】EasyAdmin8 项目地址: https://gitcode.com/gh_mirrors/ea/EasyAdmin8 还在为后台管理系统的开发效率而烦恼吗&#xff1f;想要一个既能快速上手又具备强大扩展性的解决方案吗&am…

作者头像 李华
网站建设 2026/6/3 10:30:25

tensorflow 零基础吃透:RaggedTensor 的不规则形状与广播机制 2

作为初学者&#xff0c;我们先从核心概念拆解开始&#xff0c;用最通俗的语言讲清楚「广播」和「不规则张量&#xff08;RaggedTensor&#xff09;」&#xff0c;再一步步拆解每个示例的计算过程&#xff0c;最后总结规律。 一、先搞懂3个基础概念 1. 张量的「维度&#xff08;…

作者头像 李华