四大经典算法之一:贪心算法思想

【算法】—贪心算法详解 !翻硬币快乐司机旅行家的预算买卖股票的最好时机I买卖股票的最好时机IIPrim算法_优快云博客_prim算法dijstra求最短路径最小花费。 阅读详情

所谓贪心,就是一直追求最好的选择。由于算法执行时重点关注的区域是本层执行空间,即本层循环或作用域,所以贪心算法的侧重点也是本层执行空间。因为其他层空间的参数无法直接涉及,所以贪心算法就是在本层空间或者本次执行中追求最优的算法结果。所以,贪心思想追求的是局部最优,并且是每一步都追求局部最优。但是本次局部最优可能会对上一次的局部最优造成影响,因此贪心思想可能无法获取最优解。但是,这对一些无最优解的问题又是很适合的。

    贪心的原理

      贪心算法的核心可以理解为:每次只追求局部最优,不兼顾或不考虑全局最优。贪心算法的设计直截了当,只看当前,不看整体或后来。在贪心思想中,“贪心”的是本次的运算能够获取最优解,而不用顾虑对全局造成的因此该算法执行时简单、直接、效率高,但是容易陷入局部最优的困境中。

     因此在选择贪心算法时需要考虑效率与其对全局最优的影响。一般在效率比获取全局最优解更加重要时采用贪心算法。假设某个算法共有 12 个可选的执行步骤,在图 5.11 中用 12 个矩形来表示。这 12矩形的宽度相等,长度代表矩形的执行效果,长度越长,则执行效果越好。

5ca7ff6ea59a8296716d57b4ba3b34a8.png

     现在要求在有限的 N次执行内执行完算法,每次执行只能选择有限的M个执行步骤。要求最后获得的算法执行效果最好。

      因为执行次数 N 与执行步骤 M 是有限的,所以最终能够选择的有效执行次数只有NXM 次。要求算法执行效果最好,那么每次选择的执行步骤的效果最好,即对应的矩形长度最长。

    因此,每次选择执行步骤时,都要在剩余的可选步骤中选择最大的矩形。

    因此尽量获取当前步骤的最大执行效果,就是贪心算法的特征。

    假设当前有3种执行方案可选,如图5.12所示。每种方案有两个执行步骤,用矩形表示。

     现在要求当前执行的效果最好,显然要选择执行步骤相加效果最好的方案,即矩形长度最长的两个矩形。

41d1ff0dc6641a3c46cdb3184aca59da.png

 贪心算法实例

    下面进一步拓展上一小节的实例,详细阐述贪心算法的设计原理与实施过程首先进一步量化如图 5.11 所示的实例,要求在有限的执行次数(N3)内执行完算法,每次执行只能选择两个执行步骤(M-2)。要求最后获得的算法执行效果最好。

      如图 5.13 所示,为了方便量化,将图 5.11 中代表执行步骤效果的矩形长度使用数字量化标注,数字越大,说明执行效果越好。

132129bb53b0f3f7582a806a56df8342.png

                                                  图5.13    贪心算法实用实例1

      然后开始第1次执行,如图 5.14所示,选取当前可选执行步骤中执行效果最好的两步,即长度最长的两个矩形8和 10。

       然后开始执行第2次,如图 5.15 所示,选取当前可选执行步骤中执行效果最好的两步,即长度最长的两个矩形6和8。

      然后开始执行第3次,如图 5.16所示,选取当前可选执行步骤中执行效果最好的两步,即长度最长的两个矩形6和 6。

5ff1a5868d44d8057a1798791c02d733.png

d37eb1a9cf8a5bbda9159366cd2247bb.png

a2f882b7cbf4c7549a0a3ebf2289aa91.png

      最终的执行效果如图 5.17 所示。

b57a2490367eb21201620fa662a696b0.png

      由于每次执行时选择的都是两个执行步骤中的最优效果,即长度最长的矩形,假设执行效果可以相加,经过3次执行(6个执行步骤)后,所获得的执行效果应该是最好的,即矩形相加的长度最长。

       下面结合上述实例与分析,通过具体的代码,来理解贪心算法的原理与实施过程。代码实现:

#贪心思想
def greedy():
ops=[3,6,3,5,6,8,6,3,5,3,8,10]print('所有可选的执行步骤的效果列表为'+str(ops))op max len =[]for i in range(3):
print('第'+str(i+1)+'次执行:')
max 1 = max(ops)
ops = ops[:ops.index(max 1)]+ ops[ops.index(max 1)+1:]max 2 =max(ops)
ops = opsl:ops.index(max 2)]+ ops[ops.index(max 2)+1:]print('当前最优的2个执行步骤的矩形长度为'+str(max1)+'和'+str(max 2))
op max len.append(max 1)
op max len.append(max 2)print(f'最优执行步骤的矩形长度集合为{op max len = }')#计算最优执行步骤的矩形长度之和
all len =0
for it in op max len:
all len += it
print(f'最优执行步骤的矩形长度之和为{all len =}')# 测试
greedy()

输出:

所有可选的执行步骤的效果列表为[3,6,3,5,6,8,6,3,5,3,8,10]
第 1次执行:
当前最优的2个执行步骤的矩形长度为:10和8
第 2 次执行:
当前最优的2个执行步骤的矩形长度为:8和6
第 3次执行:
当前最优的2个执行步骤的矩形长度为:6和6
最优执行步骤的矩形长度集合为op_maxlen =[10,8,8,6,6,6]
最优执行步骤的矩形长度之和为 all len = 44

注:本文节选自清华大学出版社出版的《算法不难:图解+python实现》(ISBN 9787302675099),略有改动。

22356233f3b773c4d4ec1e601f50e1cc.png

17d03115928b13c17eb00c4f4c30b230.png

算法讲解——贪心算法 贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优(局部最优)的选择,从而希望导致全局最优解的算法策略。贪心算法的核心思想是“贪心选择”,即通过局部最优解逐步构建全局最优解。 阅读详情

相关推荐

循序渐进,搞懂什么是贪心算法

详解贪心算法

weixin_43790276的博客 3646

贪心算法(greedy algorithm,又称贪婪算法)详解(附例题)

贪心算法(Greedy Alogorithm)又叫登山算法,它的根本思想是逐步到达山顶,即逐步获得最优解,是解决最优化问题时的一种简单但是适用范围有限的策略。贪心算法没有固定的框架,算法设计的关键是贪婪策略的选择。.........

Kk的博客 10万+

四大经典算法思想

上图就是一个回溯算法的思路,即先在第一行放置一个皇后,然后再试探性地再第二行放置一个皇后,以此类推,如果出现不满足要求的情况,则及时止损,返回上一行继续试探性地选择不同的方案,直到所有的方案都被列举出来位置。分治算法字面上的解释是“分而治之”,就是把一个复杂的问题拆分成两个或多个相同或相似的子问题,再把子问题拆分成更小的子问题......直到最后子问题可以简单地求解,原问题的解即子问题的解的合并。动态规划的思想是,若要解决一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。..

JavaShark的博客 1019

【贪心算法】贪心算法原理思想、算法步骤,应用示例(找零问题、活动选择问、霍夫曼编码、最小生成树问题、车辆路径问题)

贪心算法是一种基于贪心策略的优化算法,它在每一步选择中都采取当前状态下的最优决策,而不考虑未来的后果。通常,这种算法对于解决一些最优化问题非常有效,尤其是那些可以通过局部最优解来达到全局最优解的问题。

qq_35831906的博客 1万+

别再死记硬背了!用生活场景图解四大经典算法:Kruskal、Prim、Dijkstra和Floyd

本文通过快递配送和地铁换乘等生活场景,生动图解Kruskal、Prim、Dijkstra和Floyd四大经典算法。从最小生成树到最短路径问题,用日常案例揭示算法核心思想,帮助读者直观理解而非死记硬背,提升算法学习效率。

weixin_30444105的博客 399

深入理解IT领域四大经典算法:资源报告

算法是计算机科学的核心,是解决问题的指令序列。对于IT从业者而言,掌握算法设计与分析对于编写高效的代码和解决复杂问题至关重要。无论是在数据结构操作、数据库查询优化,还是在大数据处理和人工智能问题解决中,算法都是背后的强大支撑。分治法(Divide and Conquer)是一种算法设计范式,其核心思想是将一个难以直接解决的大问题分解成若干个小问题,分别解决这些小问题后再组合它们的答案以解决原来的大问题。分治法有三个主要步骤:分解(Divide)、解决(Conquer)、合并(Combine)。

weixin_31860973的博客 660

菜鸟学Python | 四大经典算法之一:贪心算法思想

所谓贪心,就是一直追求最好的选择。由于算法执行时重点关注的区域是本层执行空间,即本层循环或作用域,所以贪心算法的侧重点也是本层执行空间。因为其他层空间的参数无法直接涉及,所以贪心算法就是在本层空间或者本次执行中追求最优的算法结果。所以,贪心思想追求的是局部最优,并且是每一步都追求局部最优。但是本次局部最优可能会对上一次的局部最优造成影响,因此贪心思想可能无法获取最优解。但是,这对一些无最优解的问题又是很适合的。

csdn_xmj的博客 1055

BurpSuit在不同浏览器中配置代理

文章通过分享各大浏览器如何设置代理的知识,帮助初学者快速掌握代理配置相关技能。

北冥同学的成长记录笔记 1万+

专业技能篇--算法

这篇简单理解一些常见的算法。如果面试的时候问到相关的算法,能够应付一二。思想:贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。定义问题:确定问题是否适合使用贪心算法,即问题具有贪心选择性质。选择标准:确定贪心选择的标准,即在每一步选择中如何判断“最好”或“最优”。执行贪心策略:按照贪心选择标准,逐步做出选择,直到问题解决。评估结果:分析结果,确定是否满足问题的要求,以及是否是最优解。

qq_45981373的博客 598

基于浏览器插件的拼多多买家订单导出方法

基于浏览器插件的拼多多买家订单导出方法

2501_93542170的博客 1741

【清风数学建模笔记】第十一讲:时间序列分析

【清风数学建模笔记】第十一讲:时间序列分析

manerzi的博客 834

数据与结构的四大经典算法思想

贪心算法(greedy algorithm) 解题思路: 1.针对一组数据,定义了限制值和期望值,在满足限制值的情况下,期望值最大 2.每次选择当前情况下,最对限制值同等贡献的情况下,对期望值贡献最大的数据 3.举几个例子验证一下贪心算法的正确性 在很多情况下贪心算法并不能给出问题的最优解,因...

chenglan9265的博客 1991

Linux SMP系统多核启动机制详解

对称多处理(SMP)是现代操作系统支持多核并行计算的基础架构。其核心原理是通过引导处理器(BSP)初始化系统环境后,通过处理器间中断(IPI)机制唤醒应用处理器(AP)。在x86架构中,AP启动时处于实模式,需要特殊的trampoline代码完成保护模式切换和分页设置。这种设计既保证了系统初始化的正确性,又实现了多核并行处理的性能优势。理解SMP启动流程对优化系统启动速度和调试多核问题至关重要,特别是在云计算和嵌入式系统中,高效的SMP初始化能显著提升系统响应能力。本文以Linux内核为例,深入解析了从BS

weixin_35006125的博客 292

四大算法思想:贪心,分治,回溯,动态规划

这里写目录标题1 贪心算法1.1 介绍1.2 案例(最短路径)2 分治算法2.1 介绍2.2 基本思想2.3 解题步骤2.4 应用场景2.5 分治与递归的联系2.6 案例(海量数据处理)2.6.1 题目要求2.6.2 解题思路3 回溯算法3.1 介绍3.2 解题步骤3.3 案例(八皇后问题)3.3.1 问题描述3.3.2 解题思路3.3.3 代码示例(Java)4 动态规划4.1 介绍4.2 应用场景 1 贪心算法 1.1 介绍 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择

sc179的博客 1万+

基于Simulink的输入-输出线性化精确转矩控制

本文详细介绍了基于Simulink的永磁同步电机(PMSM)输入-输出线性化(IOL)精确转矩控制方法。针对传统解耦控制在非线性转矩特性下的局限性,通过建立PMSM非线性状态空间模型,设计IOL控制器将系统转化为线性输入-输出映射。文章包含系统原理推导、Simulink建模步骤、参数整定方法和仿真结果分析,验证了IOL在高动态、宽速域工况下的优越性能(转矩误差降低90%)。最后提出了工程实现要点和扩展应用方向,为开发高精度电机驱动系统提供了实用指导。

xiaoheshang_123的博客 304

LED单元板驱动(HUB75接口)

开始之前先吐槽一下,搜这个的资料。要么都是Arduino,要么单片机的收费。小小的一个LED单元板,凭什么? 用Arduino是你速度快还是我ST,树莓派不好用?收费更离谱,这点东西还藏私?给你个中指凸。把原理都写出来看你怎么收费。 一、接口定义及原理 如图,有两个RGB通道,共占用6个IO。剩下的ABCDE为地址通道,LAT为行数据锁存通道,CLK为数据时钟,OE为低电平使能LED显示。图片这里没有E,证明它是16扫的,有E就会把B上面的地改为E。这样就是5位,2的5次方32扫。1.

a3748622的博客 3万+

四大经典算法之贪心算法(Greedy Algorithm Among the Four Classic Algorithms)

贪心算法(Greedy Algorithm)‌是一种在每一步选择中都采取在当前状态下最好或最优选择的方法,从而希望导致结果是全局最好或最优的算法策略。贪心算法在有最优子结构的问题中尤为有效,即局部最优解能决定全局最优解的问题‌本章详细介绍四大经典算法之贪心算法

Linux运维老纪的博客 1175

基于STM32设计的数字电子秤

当前项目是采用采用STM32+称重模块+OLED实现了简单的电子秤项目,称重模块上采用24位的ADC芯片,精度较高。实现了称重,校准、去皮等功能。

1万+

算法概述——四大算法总结

解决一个问题具体方法或者说过程,也就是能根据实际情况输入对应条件,在有限的时间内获得所要求的结果。因为计算机的运算资源和存储容器是有限的,为了保证程序的**执行效率**,我们需要再面对具体问题时采用合适的算法去处理问题,而解决同一个问题的不同的算法的效率可能会相差非常大,算法效率的差距影响有时甚至比计算机配置的差距还要更大,所以面对问题时一个正确的合适的算法至关重要!算法和数据结构构成可运行程序,算法是程序的灵魂!

xianren95的博客 2957

从技术债红线到系统治理:透视 SAP Clean Core 中的 Level D

SAP推出的Clean Core分级体系将扩展风险划分为A到D四个等级,其中Level D代表最高风险类别,涉及直接修改标准代码、隐式增强、使用noAPI对象等不被推荐的做法。这些做法虽然短期见效快,但会带来升级冲突、数据完整性风险等长期问题。SAP强调治理重点不是完全消除经典ABAP,而是优先清理Level D对象,逐步向稳定接口迁移。典型案例显示,依赖内部细节的扩展往往在系统升级或云迁移时集中暴露出问题。企业应通过工具链持续监控Level D占比,将其纳入技术债管理范畴。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1066

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

四大常规算法

分治法,动态规划法,回溯法,贪心法。

m0_60529319的博客 1118

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

四大常用算法:分治、动态规划、贪心、回溯

分治算法 原文 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 二、基本思想及策略 分治法的设计思想是:将一个...

weixin_42263238的博客 8027

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

算法设计与分析:贪心算法全面深度解析

假设你正在超市购物,预算有限,想要买到尽可能多的商品。每次优先拿最便宜的商品。你不会先花大量时间去计算所有可能的组合,而是"眼前最优"地一步步做选择。这种"每一步都选择当前看起来最好的方案"的思维方式,就是贪心算法的核心思想。再举一个例子:找零钱问题。顾客消费了 63 元,付了 100 元,需要找零 37 元。如果面额有 20、10、5、1 元,你会怎么找?绝大多数人的第一反应是:先给一张 20,再给一张 10,再给一张 5,最后给两张 1。这就是贪心——每一步都选当前能用的最大面额。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 947

算法设计题高分攻略:掌握思想,攻克代码填空

软考下午算法设计题备考策略:重点理解四大经典算法思想(分治法、动态规划、回溯法、贪心算法)的核心逻辑和代码结构,而非死记硬背。分治法注意递归终止条件和合并操作;动态规划掌握状态转移方程;回溯法牢记撤销选择步骤;贪心算法关注选择策略。答题时先通读题目,结合注释理解程序框架,再补全关键代码。建议通过动手实践和真题训练来巩固理解,特别要注意C语言基础语法。备考口诀:分治重递归合并,动规看状态转移,回溯勿忘撤销步,贪心先排再选择。

IT913913的博客 1587

贪心算法实战:从基础概念到 LeetCode 高频题解全攻略

本文系统阐述贪心算法的核心思想与面试实战策略,深度解析其“局部最优推导全局最优”的本质特征与适用条件。文章精选7道LeetCode高频真题,涵盖区间调度、资源分配、字符串构造等经典场景,详细剖析贪心策略设计思路与正确性证明方法。通过对比动态规划、梳理避坑指南,为算法面试提供从理论到实战的全流程攻略。

macowl的博客 940

C++实现股市投资技术分析工具:四大算法的综合应用

std::cout << "最大收益: " << std::fixed << std::setprecision(2) << dp_profit << std::endl << std::endl;std::cout << "第" << i+1 << "天: " << std::fixed << std::setprecision(2) << ma_5[i] << std::endl;// 初始买入价为开盘价。std::cout << "=== 动态规划最优持仓收益 ===" << std::endl;

2502_94569002的博客 1238
上一篇: 未出版就被周鸿祎等多位大佬推荐的爆款书新鲜出炉了....
下一篇: 太厉害了!如何用AI轻松给你照片带上圣诞帽!
菜鸟学Python
博客等级 码龄9年 8088粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值