贪心算法理论篇

文章目录

前言

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

贪心算法理论基础

什么是贪心算法

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

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

什么情况下用贪心算法

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

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

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

怎么判断该使用贪心算法

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

  • 从问题中抽象出一个明确的"贪心策略":我们要知道我们解决贪心问题的时候的最重要的就是设定一个评估标准,每次都选择当前情况的最优解。例如,在活动选择问题中,我们可以按照每个活动的结束时间从早到晚排序,然后每次选择最早结束且不与已选活动冲突的活动,这就是一个典型的贪心策略。
  • 验证该问题是否满足"贪心选择性质":在每一步做出局部最优选择之后,我们是否仍能通过这一选择构造出问题的整体最优解这是我们是否能用贪心算法解决问题的关键。换句话说,贪心策略是否不会因为过早做出某些决定而导致整体结果变差。如果这个性质不成立,贪心算法就可能得到次优甚至错误的解。这时我们通常需要考虑更全面的方法,如动态规划,它通过记录多个子问题的状态来避免贪心策略可能带来的误差。
相关推荐
西柚小萌新43 分钟前
【大模型:知识库管理】--Dify接入RAGFlow 知识库
python
博士僧小星1 小时前
在线机考|2025年华为暑期实习&春招&秋招编程题(最新)——第2题_网络整改
python·华为·在线编程·机考·秋招笔试
博士僧小星1 小时前
在线机考|2025年华为暑期实习&春招&秋招编程题(最新)——第1题_物流运输
python·华为·机考·春招·秋招笔试·在线笔试
wennieFan1 小时前
python基础面试练习题
开发语言·python
电院工程师1 小时前
轻量级密码算法CHAM的python实现
python·嵌入式硬件·算法·安全·密码学
阿福不是狗1 小时前
Python使用总结之Linux部署python3环境
linux·开发语言·python
大白曾是少年1 小时前
哈希表三种数据结构在leetcode中的使用情况分析
数据结构·leetcode·散列表
27669582922 小时前
朴朴超市小程序 sign-v2 分析
java·python·小程序·逆向分析·朴朴超市·sign-v2·朴朴
Y3174292 小时前
Python Day50 学习(仍为日志Day19的内容复习)
python·学习·机器学习
whyeekkk3 小时前
python打卡第52天
pytorch·python·深度学习