贪心算法简介(greed)

前言:

贪心算法(Greedy Algorithm)是一种在每个决策阶段都选择当前最优解 的算法策略,通过局部最优的累积来寻求全局最优解。其本质是"短视"策略,不回溯已做选择。

什么是贪心、如何来理解贪心(个人对贪心的理解)

前言对贪心是一种概念的回答。接下来就了解一下自己对贪心的理解,如果学习算法的化建议优先学习动态规划,动态规划相对于其他算法来说很简单。但是,贪心算法跟动态规划不同,非常难,贪心讲究策略,每一道贪心有每一道贪心题解题的策略。

什么是贪心算法:

解决问题的策略,由局部最优到全局最优,把解决问题的过程分为若干步,在解决每一步的时候,都选择当前看起来最优的解法,贪心就体现在最优上,希望得到全局最优,但只是看起来最优,在每一步的过程中都选择当前看起来最优的策略(找零问题),简单来说就是只考虑眼前的利益,目光不长远。

贪心算法的特点:

贪心策略的提出,可以看出贪心策略的提出是没有标准模板的,可能换一道贪心题其贪心策略也就不一样了,这也就是贪心难的地方了,可能每一道贪心题的贪心策略都是不同的。因为贪心是数目寸光的,所以就要考虑到贪心策略的正确性,有可能贪心策略是一个错误的方法,所以正确的贪心策略是需要严格证明的,说到贪心策略的证明,在数学上你见到的还是你没有见到的证明方法都可以拿来证明。

找零问题

cpp 复制代码
#include <vector>
#include <algorithm>
using namespace std;

vector<int> greedyCoinChange(int amount, vector<int> coins) {
    sort(coins.rbegin(), coins.rend()); // 降序排列
    vector<int> result;
    
    for (int coin : coins) {
        while (amount >= coin) {
            result.push_back(coin);
            amount -= coin;
        }
    }
    
    return (amount == 0) ? result : vector<int>(); // 返回空表示无解
}

活动选择

cpp 复制代码
struct Activity {
    int start, end;
};

vector<Activity> selectActivities(vector<Activity> activities) {
    sort(activities.begin(), activities.end(), 
        [](const auto& a, const auto& b){ return a.end < b.end; });
    
    vector<Activity> selected;
    int lastEnd = -1;
    
    for (auto& act : activities) {
        if (act.start >= lastEnd) {
            selected.push_back(act);
            lastEnd = act.end;
        }
    }
    
    return selected;
}
相关推荐
C_Liu_18 分钟前
从C语言到C++:拥抱面向对象编程的全新世界
c语言·开发语言·c++
瓦特what?30 分钟前
C + +
c语言·开发语言·c++·经验分享·笔记·算法·程序员创富
字节高级特工42 分钟前
线程互斥锁:守护临界区的关键
linux·运维·服务器·c语言
啊阿狸不会拉杆1 小时前
《算法导论》第 1 章 - 算法在计算中的作用
开发语言·数据结构·c++·算法·排序算法
WBluuue1 小时前
数据结构与算法:哈希函数的应用及一些工程算法
c++·算法·面试·哈希算法
刃神太酷啦1 小时前
C++ 容器适配器与核心数据结构精解:栈、队列、deque 底层实现与实战应用----《Hello C++ Wrold!》(17)--(C/C++)
java·c语言·数据结构·c++·qt·算法·leetcode
打点计时器1 小时前
onnxruntime配置开启ACL加速Arm上的模型推理
linux·c++
西红柿煎蛋2 小时前
C++17的 if constexpr 是如何简化模板元编程的?它与常规的 if 语句以及#if预处理指令有何根本不同?
c++
是店小二呀2 小时前
【动态规划 | 子序列问题】子序列问题的最优解:动态规划方法详解
算法·动态规划·代理模式
minichao_sz3 小时前
gdb print设置技巧,离线查看复杂结构体和数组变量内容,展开多层嵌套的结构体的方法
c语言·stm32·嵌入式硬件