贪心算法理论篇

文章目录

前言

今天继续带大家进行新的篇章贪心算法,什么是贪心,通俗的说就是我要最好的,每次都要最好的,最终得到的结果也是最好的,就是通过局部最优到全局最优。但是如何其实现呢?一文带大家弄懂。本文用于记录自己的学习过程,同时向大家进行分享相关的内容。本文内容参考于代码随想录同时包含了自己的许多学习思考过程,如果有错误的地方欢迎批评指正!

贪心算法理论基础

什么是贪心算法

贪心算法的本质是在解决问题时,通过将问题划分为多个阶段,在每个阶段都选择当前状态下的最优解(即局部最优解),以期望通过局部最优最终达到全局最优的目标。

首先我们要明确贪心算法通常不回溯,也不从整体上考虑所有可能的情况,而是一步步推进,并在每一步中都做出看似最好的选择。虽然这种方法不能保证在所有问题中都得到最优解,但在某些特定问题中,贪心策略能够产生全局最优解。但是有些问题比如所背包问题的,就无法通过贪心算法来得到最优解了,需要用到动态规划了。

什么情况下用贪心算法

贪心算法适用于以下几类问题:

具有"最优子结构"性质的问题:什么是"最优子结构"呢?就指的是一个问题的整体最优解可以通过其子问题的最优解组合而成。也就是说,如果我们能够找到每个子问题的最佳解,并将这些解结合起来去构建出整个问题的最优解。若一个问题没有我们刚才所说的最优子结构,那么贪心策略在某一阶段的最优选择可能会破坏整体解的最优性,从而得不出最终的全局最优解。

具备"贪心选择性质":具备贪心选择性质就是说明我们可以在每一步都做出一个当前看来最优的选择,而这一选择不会影响全局的最优解。也就是说,在不考虑后续决策的前提下,仅通过当前最优就能朝着整体最优逼近,从而无需回溯或存储所有历史状态。

怎么判断该使用贪心算法

判断一个问题是否适合用贪心算法,我们可以从以下几个方面去思考:

  • 从问题中抽象出一个明确的"贪心策略":我们要知道我们解决贪心问题的时候的最重要的就是设定一个评估标准,每次都选择当前情况的最优解。例如,在活动选择问题中,我们可以按照每个活动的结束时间从早到晚排序,然后每次选择最早结束且不与已选活动冲突的活动,这就是一个典型的贪心策略。
  • 验证该问题是否满足"贪心选择性质":在每一步做出局部最优选择之后,我们是否仍能通过这一选择构造出问题的整体最优解这是我们是否能用贪心算法解决问题的关键。换句话说,贪心策略是否不会因为过早做出某些决定而导致整体结果变差。如果这个性质不成立,贪心算法就可能得到次优甚至错误的解。这时我们通常需要考虑更全面的方法,如动态规划,它通过记录多个子问题的状态来避免贪心策略可能带来的误差。
相关推荐
apocelipes12 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
HjhIron13 小时前
面试常客:字符串算法从入门到进阶
算法·面试
用户83562907805113 小时前
使用 Python 在 PDF 中创建与管理书签
后端·python
吴佳浩15 小时前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹16 小时前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
MeixianAgent18 小时前
Python 回测数据入口怎么验?历史 K 线入库前先做 5 个检查
后端·python
vivo互联网技术20 小时前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
咕白m62521 小时前
用 Python 实现一键批量查找与替换 Excel 数据
后端·python
浮生望1 天前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
黄敬峰1 天前
面试必刷:从JS底层包装类到双指针,彻底搞懂字符串与回文算法
算法