贪心算法理论篇

文章目录

前言

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

贪心算法理论基础

什么是贪心算法

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

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

什么情况下用贪心算法

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

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

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

怎么判断该使用贪心算法

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

  • 从问题中抽象出一个明确的"贪心策略":我们要知道我们解决贪心问题的时候的最重要的就是设定一个评估标准,每次都选择当前情况的最优解。例如,在活动选择问题中,我们可以按照每个活动的结束时间从早到晚排序,然后每次选择最早结束且不与已选活动冲突的活动,这就是一个典型的贪心策略。
  • 验证该问题是否满足"贪心选择性质":在每一步做出局部最优选择之后,我们是否仍能通过这一选择构造出问题的整体最优解这是我们是否能用贪心算法解决问题的关键。换句话说,贪心策略是否不会因为过早做出某些决定而导致整体结果变差。如果这个性质不成立,贪心算法就可能得到次优甚至错误的解。这时我们通常需要考虑更全面的方法,如动态规划,它通过记录多个子问题的状态来避免贪心策略可能带来的误差。
相关推荐
会的全对٩(ˊᗜˋ*)و4 分钟前
【数据挖掘】数据挖掘综合案例—银行精准营销
人工智能·经验分享·python·数据挖掘
??tobenewyorker14 分钟前
力扣打卡第二十一天 中后遍历+中前遍历 构造二叉树
数据结构·c++·算法·leetcode
蓝澈112122 分钟前
迪杰斯特拉算法之解决单源最短路径问题
java·数据结构
___波子 Pro Max.24 分钟前
GitHub Actions配置python flake8和black
python·black·flake8
贾全35 分钟前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人
GIS小天1 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月4日第128弹
人工智能·算法·机器学习·彩票
满分观察网友z1 小时前
开发者的“右”眼:一个树问题如何拯救我的UI设计(199. 二叉树的右视图)
算法
阿蒙Amon1 小时前
【Python小工具】使用 OpenCV 获取视频时长的详细指南
python·opencv·音视频
橘子编程2 小时前
Python-Word文档、PPT、PDF以及Pillow处理图像详解
开发语言·python
蓝婷儿2 小时前
Python 机器学习核心入门与实战进阶 Day 2 - KNN(K-近邻算法)分类实战与调参
python·机器学习·近邻算法