贪心算法理论篇

文章目录

前言

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

贪心算法理论基础

什么是贪心算法

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

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

什么情况下用贪心算法

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

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

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

怎么判断该使用贪心算法

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

  • 从问题中抽象出一个明确的"贪心策略":我们要知道我们解决贪心问题的时候的最重要的就是设定一个评估标准,每次都选择当前情况的最优解。例如,在活动选择问题中,我们可以按照每个活动的结束时间从早到晚排序,然后每次选择最早结束且不与已选活动冲突的活动,这就是一个典型的贪心策略。
  • 验证该问题是否满足"贪心选择性质":在每一步做出局部最优选择之后,我们是否仍能通过这一选择构造出问题的整体最优解这是我们是否能用贪心算法解决问题的关键。换句话说,贪心策略是否不会因为过早做出某些决定而导致整体结果变差。如果这个性质不成立,贪心算法就可能得到次优甚至错误的解。这时我们通常需要考虑更全面的方法,如动态规划,它通过记录多个子问题的状态来避免贪心策略可能带来的误差。
相关推荐
要开心吖ZSH1 分钟前
软件设计师备考-(十六)数据结构及算法应用(重要)
java·数据结构·算法·软考·软件设计师
带娃的IT创业者14 分钟前
如何开发一个教育性质的多线程密码猜测演示器
网络·python·算法
zhong liu bin1 小时前
MySQL数据库面试题整理
数据结构·数据库·mysql
Aczone282 小时前
硬件(六)arm指令
开发语言·汇编·arm开发·嵌入式硬件·算法
luckys.one6 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
大翻哥哥7 小时前
Python 2025:量化金融与智能交易的新纪元
开发语言·python·金融
~|Bernard|7 小时前
在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
算法·conda
战术摸鱼大师8 小时前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制
Christo38 小时前
TFS-2018《On the convergence of the sparse possibilistic c-means algorithm》
人工智能·算法·机器学习·数据挖掘
好家伙VCC9 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模