贪心算法

证明贪心算法的正确性(详细总结) 目录 证明贪心算法的正确性 证明贪心算法的结构 第一步:符合贪心选择的特性(Greedy Choice Property) 第二步:符合归纳法结构(Inductive Structure) 第三步:最优子结构(Optimal Substructure) 例子:部分背包问题 定义我们的算法: 证明符合贪心选择的特性: 证明符合归纳法结构(Inductive Structure) 证明最优子结构(Optimal Substructure) 证明贪心算法的正确性 证明贪心算法的结构 第一 阅读详情

Foreward:

Greed is human nature, curiosity is human motivation.
贪婪是人类的本性,求知是人类的动力。

今天要介绍的算法是贪心算法(Greedy),又名贪婪算法

整体会比较基础易懂

所以 What’s the greedy algorithm?

Definition:

A greedy algorithm is a simple, intuitive algorithm that is used in optimization problems. The algorithm makes the optimal choice at each step as it attempts to find the overall optimal way to solve the entire problem.
Wiki

简单来说,就是在每一步寻求当前最优解,不断追求局部最优,与之后会讲到的考虑全局最优的动态规划恰恰相反

使用贪心算法解决问题时,会将问题分为若干个子问题,利用贪心的原则从内向外依次求出当前子问题的最优解,也就是说会从小利益出发,从局部考虑问题,求得当前子问题的最优解,才能继续寻求下一个子问题的最优解,所以前一个子问题的最优解会是下一个子问题最优解的一部分,一直不断的一步步求子问题的最优解最终解决问题。

贪心算法最关键的部分在于贪心策略的选择,当贪心算法可以解决一个个子问题进而最终得到全局的最优解时,这就是一个不错的贪心算法。

需要注意的是,贪心算法的设计必须有“无后效性”的特点。

什么是无后效性呢?就是对于某个状态,也就是对于某个子问题的抉择,不会影响之前求得的局部最优解,否则就必须通过全局的考虑很分析来求得最终答案。

还有需要注意的是,贪心算法没有固定的解决方案,需要多加练习熟能生巧,当然用某个蒟蒻(就是彩笔)的话来讲,这是真正意义上开始学的第一个最基础的算法

贪心正确性的证明

方法一:数学归纳法

首先我们需要构造一个贪心的算法P(n)
我们使用第一或第二数学归纳法证明P(n)P(n)P(n)。

  • 第一数学归纳法:
    证明:P(1)P(1)P(1)为真;若P(n)P(n)P(n)为真,则P(n+1)P(n+1)P(n+1)为真。
  • 第二数学归纳法:
    证明:P(1)P(1)P(1)为真;若对所有k<nk<nk<n,有P(k)P(k)P(k)为真, 则P(n)P(n)P(n)为真。

方法二:交换论证法

  1. 分析一般最优解与贪心法的解的区别,然后定义一种转换规则,使得从任意一个最优解出发,经过不断对解的某些成分的排列次序进行交换或者用其他元素替换,将这个解最终能够转变成贪心法的解。
  2. 证明在上述转换中解得优化函数值不会变坏。
  3. 证明上述转换在有限步结束。

最后总结一下贪心的基本做法

  • 建立数学模型来描述问题
  • 把求解的问题分成若干个子问题
  • 对每个子问题求解,得到子问题的局部最优解
  • 把子问题的解局部最优解合成原来问题的一个解

记得不是一眼题的话稍微证明一下正确性哦

好啦理论结束咯
我们来看几个非常简单的例子开始~

1. 教室调度问题

若有一个课表,作为一个好学的SCIE三好青年,你希望做出最佳的选课方案(将尽可能多的课程安排在课表之上)

课程开始时间结束时间
ADO社🔥19AM10AM
Computer Science9:30AM10:30AM
ADO社🔥210AM11AM
Sailing Lesson10:30AM11:30
ADO社🔥311AM12 PM

很显然最佳选择是ADO社🔥+ADO社🔥+ADO社🔥

不草率的来分析一下,你不能让所有课都在课表上,因为有一些课程是由冲突的

你希望在这间教室上尽可能多的课,很显然这不是我的最优策略 (大雾)。如何选出尽可能多且时间不冲突的课程呢?

看似是一个有一些复杂的问题,但实际上简单到出乎意料

做法是这样的:

  • 选出结束最早的课,作为选中的第一节课
  • 接下来,在第一节课结束后开始的课中,选出结束最早的课,就是要选的第二节课。
  • 重复这个操作即可

我们来手玩一下这个过程

我们发现“ADO社🔥1”是这之中结束时间最早的,所以说第一个选择就是ADO社🔥1,然后剩余的课必须在10AM之后,于是你就愉快的不用去上Computer Science的课啦

课程开始时间结束时间是否选择
ADO社🔥19AM10AM是
Computer Science9:30AM10:30AM否
ADO社🔥210AM11AM
Sailing Lesson10:30AM11:30
ADO社🔥311AM12 PM

接下来,重复这个操作,根据贪心算法以及你好学生的优秀品质,你再次 很遗憾的失去了1h的划水时间(懂的都懂),前去ADO社🔥2好好学习[Fighting]

课程开始时间结束时间是否选择
ADO社🔥19AM10AM是
Computer Science9:30AM10:30AM否
ADO社🔥210AM11AM是
Sailing Lesson10:30AM11:30否
ADO社🔥311AM12 PM

最终你发现你的第三节课将继续留在ADO教室~

于是,你又将生命中的一个上午奉献 在了ADO。

好的,手玩完毕,相信很多人想问,这么草率的吗??!

在这里插入图片描述

其实这个题,确实只能说证明显然

实在要证明正确性的话:
从贪心算法得到的结果集进行倒推,去掉第一个活动,在剩下的活动中结束时间最早的活动B的结束时间一定不小于A,那么A活动一定合理的在最优解之中,同理可判断剩下的所有活动。

代码有需要的随时找我交流啦~ 之后一些比较重要的题会放上代码供参考的!

好的编了很久的故事讲完了,我们来看下一个题

2. 均分纸牌为题

这是一个非常经典的问题

Description:

有NNN堆纸牌,编号分别为1,2,…,n1,2,…,n1,2,…,n。每堆上有若干张, 但纸牌总数必为nnn的倍数.可以在任一堆上取若干张纸牌,然后移动。移牌的规则为:在编号为111上取的纸牌,只能移到编号为222的堆上;在编号为nnn的堆上取的纸牌,只能移到编号为n−1n-1n−1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。
例如:n=4,4n=4,4n=4,4堆纸牌分别为:①9②8③17④6① 9 ② 8 ③ 17 ④ 6①9②8③17④6
移动三次可以达到目的:
从③取4张牌放到④ 再从③取3张放到②然后从②取1张放到①。
给定纸牌堆数NNN以及每一堆纸牌的数量a1...na_1...na1​...n, 求即所有堆均达到相等时的最少移动次数
#输入1:
4
9 8 17 6
#输出1:
3

我们拿到这个题,注意到题中的一句话

纸牌总数必为N的倍数
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。

那么也就是说, 每一堆纸牌还需要的纸牌的数量或者需要移出纸牌堆的数量就是用每堆的纸牌数减去平均数
我们注意到

在编号为111上取的纸牌,只能移到编号为222的堆上;在编号为nnn的堆上取的纸牌,只能移到编号为n−1n-1n−1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。

那么,显而易见的思路就是
用贪心算法,按照从左到右的顺序移动纸牌。如第iii堆的纸牌数不等于平均值,则移动一次,分两种情况移动:
1.若a[i]>avga[i]>avga[i]>avg,则将a[i]−avga[i]-avga[i]−avg张从第iii堆移动到第i+1i+1i+1堆
2.若a[i]<avga[i]<avga[i]<avg,则将avg−a[i]avg-a[i]avg−a[i]张从第i+1i+1i+1堆移动到第iii堆

在这里a[i]a[i]a[i]表示每一堆纸牌的数量,avgavgavg表示纸牌的平均数,也就是期望移成的样子.

我们再次来手玩一下样例

4
9 8 17 6

我们发现平均数是(9+8+17+6)/4=10(9+8+17+6)/4=10(9+8+17+6)/4=10
于是显而易见的,888需要移一张给999,这样就变成了 10717610 7 17 6107176,移动纸牌数为111
接下来,第三堆移动3张牌给第二堆,变成 101014610 10 14 61010146,移动纸牌次数为222
最后显而易见,第三堆移到第四堆,总共移动次数为333

我们来证明一下这个算法的正确性虽然也有点显然

我们假设纸牌数量可以是负数,然后对于最左边的纸牌,为了使它的纸牌数达到平均,只要还没有达到平均无论其余子情况如何移动,一定有一步是把自己多余的纸牌移动到右边,或者是从右边移动进来自己差了多少张纸牌。
于是我们可以知道第一堆牌只有和右边进行交互是合法的,所以第一堆纸牌往旁边的一堆纸牌移动或移入纸牌是必须的
处理好第一堆后,其余操作一定不涉及第一堆,否则答案更劣(经过前一堆是没有意义的)于是我们可以无视第一堆,于是现在又是就又回到了之前的情况,所以说最优的算法肯定是按照从左到右的顺序移动纸牌。
对于处理纸牌堆中纸牌个数不能为负的问题,调整纸牌移动顺序即可

其实这个问题还有一个环形的版本,但是环形均分纸牌问题是可以证明可链化,具体过程较复杂,有兴趣的大佬来找我讨论!

3. 摆动序列问题

Description:

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。
例如, [1,7,4,9,2,5][1,7,4,9,2,5][1,7,4,9,2,5] 是一个摆动序列,因为差值(6,−3,5,−7,3)(6,-3,5,-7,3)(6,−3,5,−7,3) 是正负交替出现的。相反,[1,4,7,2,5][1,4,7,2,5][1,4,7,2,5]和[1,7,4,5,5][1,7,4,5,5][1,7,4,5,5]不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。
给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)元素来获得子序列,剩下的元素保持其原始顺序。

样例:

输入: [1,7,4,9,2,5][1,7,4,9,2,5][1,7,4,9,2,5]
输出: 6
显然,这整个数列都是摆动序列

题目分析

我们来分析一下这个题目,题目需要我们求的是这个序列的摇摆序列长度。并且可以删除一些部分。那么现在的问题的关键就是使用什么方法判断这个序列是不是摇摆序列,如果不是的话我们该如何删除,删除哪些元素才能是当前子序列是摇摆子序列。我们看一下下面这张图,这是个折线图,但是在这线图中有一些连续上升或者连续下降的节点,我们需要把这些节点删除之后才能摇摆序列 在这里插入图片描述

于是我们现在思考的问题就变成了删除这些持续上升或者下降节点只保留其中的一个,具体保留哪一个。
这个保留的这个节点需要有最大的概率使得下一个节点也是摇摆序列中的节点这样最后求出来的才能是最长摇摆子序列。于是乎这个问题就完美的解决了。

4. 国王游戏

最后分享一个稍稍有一点点难度的题目,可以跳过

Description:

恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。
首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。
然后,让这 n 位大臣排成一排,国王站在队伍的最前面。
排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:
排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。
国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。
注意,国王的位置始终在队伍的最前面。
输入格式
第一行包含一个整数 n,表示大臣的人数。
第二行包含两个整数 a 和 b,之间用一个空格隔开,分别表示国王左手和右手上的整数。
接下来 n 行,每行包含两个整数 a 和 b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。
输出格式
输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。
数据范围
1≤n≤10001≤n≤10001≤n≤1000
0<a,b<100000<a,b<100000<a,b<10000

我们还是着重关注这题的做法
我们其实会显然发现我们总是希望队列中前面的的元素左手的元素尽可能的小,队列中后面的元素右手的元素尽可能的大

于是我们得到一个贪心做法,使得左右手数字乘积更小的排在前面

我们来证明一下它的正确性:
利用反证法

如果不是按照这种这种贪心做法(乘积从小到大),那么必定有一个元素使得Ai∗Bi>(Ai+1)∗(Bi+1)A_i*B_i > (A_i+1)*(B_i+1)Ai​∗Bi​>(Ai​+1)∗(Bi​+1)(不然的话就是按照乘积从小到大排序了)
于是在iii和i+1i+1i+1位置上能获得的奖励就是
iii位置: A1∗...∗Ai−1/BiA_1*...*A_{i-1}/B_iA1​∗...∗Ai−1​/Bi​
i+1i+1i+1位置: A1∗...∗Ai−1∗Ai/Bi+1A_1*...*A_{i-1}*A_i/B_{i+1}A1​∗...∗Ai−1​∗Ai​/Bi+1​
我们把iii和i+1i+1i+1两个位置交换一下,那么
iii位置:A1∗...∗Ai−1/Bi+1A_1*...*A_{i-1}/B_{i+1}A1​∗...∗Ai−1​/Bi+1​
i+1i+1i+1位置 A1∗...∗Ai−1∗Ai+1/BiA_1*...*A_{i-1}*A_{i+1}/B_iA1​∗...∗Ai−1​∗Ai+1​/Bi​

我们让交换前后都 除以 A1∗...∗Ai−1A1*...*A_{i-1}A1∗...∗Ai−1​ 乘以 Bi∗Bi+1B_i*B_{i+1}Bi​∗Bi+1​

交换前 iii: Bi+1B_{i+1}Bi+1​ jjj:Ai∗BiA_i*B_iAi​∗Bi​

交换后 i: BiB_iBi​ jjj:Ai+1∗Bi+1A_{i+1}*B_{i+1}Ai+1​∗Bi+1​

那么 max(Bi+1,Ai∗Bi)>max(Bi,Ai+1∗Bi+1)max(B_{i+1}, A_i*B_i) > max(B_i, A_{i+1}*B_{i+1})max(Bi+1​,Ai​∗Bi​)>max(Bi​,Ai+1​∗Bi+1​)
所以交换后能使得结果更优,于是我们就得到了这个题的证明

完结撒花~

IGBT基础知识 IGBT 阅读详情

相关推荐

Intel Realsense windows安装与入门

realsense400系列介绍: https://www.intelrealsense.com/stereo-depth/?utm_source=intelcom_website&utm_medium=button&utm_campaign=day-to-day&utm_content=D400_learn-more_button realsense 435i介绍: ...

hanshuning的专栏 1万+

贪心算法的数学证明 (更新中)

贪心算法的数学证明

kyle的博客 4378

孤读paper——《GhostNet:More Features from Cheap Operations》

《GhostNet:More Features from Cheap Operations》   发现一个点并解决就是一篇CVPR,该文章主要发现了优秀的网络的特点是feature map提取过程中的冗余性,这种冗余性体现在很多成对的feature map间很像,就好像彼此的“ghost”,而这种特征冗余性对于理解图像来说还是必要的,所以文章把feature map分为两种,一种是本质特征,一...

雄关漫道真如铁 而今迈步从头越 5150

贪心算法及证明

贪心算法及证明

qq_44611153的博客 1655

HFSS新手避坑指南:从零搭建T形波导功分器(含参数扫描与优化实战)

本文为HFSS新手提供T形波导功分器设计的详细指南,涵盖基础设置、建模技巧、参数扫描与优化实战。重点解析内场分析中的常见陷阱,如单位设置、波端口定义和布尔运算错误,并分享优化设计的关键步骤,帮助工程师快速掌握HFSS在微波器件设计中的应用。

weixin_27442001的博客 138

InfiniBand(IB)实战指南:从硬件配置到性能优化

本文是一份详尽的InfiniBand实战指南,涵盖从硬件选型、部署到驱动配置、性能优化的全流程。重点解析了InfiniBand作为AI训练与高性能计算(HPC)核心网络的优势,特别是其支持的RDMA技术如何实现微秒级低延迟。文章提供了硬件匹配、NCCL压测、内核参数调优及在PyTorch分布式训练中启用IB的实操步骤,旨在帮助工程师构建和优化高性能计算集群。

mqtt6iot的博客 580

贪心算法(GREEDY ALGORITHM)证明实践

基础概念 贪心算法 Formal的解释这里就不介绍了,有兴趣的直接去wikipedia上理解。简单地来说,贪心算法就是在某种规律下不断选取局部最优解,从而达到全局最优。《挑战程序设计竞赛》中有一个很直观的解释:一直向前! 证明方法 既然贪心算法是利用规律选取局部最优解,那么我们选取规律所得出的全局解就不一定是全局最优解。因此,我们需要证明,我们所选这个规律是可以得出一个全局

GrazyThinking的专栏 7324

ACS运动控制器编程 怎么学习

本文介绍了ACS运动控制器编程的完整学习路线,从零基础到实战应用。ACS是以色列高端多轴运动控制平台,适用于自动化设备、精密平台等项目。学习路径包括:1)安装官方软件SPiiPlusControlSuite;2)掌握轴、运动模式和指令三个核心概念;3)学习10个基础指令;4)编写首个运动程序;5)结合C#进行联合编程。进阶内容包括多轴同步、电子凸轮等工业应用,并推荐官方手册作为主要学习资源。通过7天的系统学习,即可掌握单轴运动控制,结合C#实现工业级设备开发。

StevenChen的博客 1312

算法自学笔记:贪心算法(1)

算法设计需要时刻注意一点,没有可以套用到所有问题的模板算法,每一个问题都要思考其特定的解决方法。 贪心算法定义(非专业):迭代执行每一次“最佳”策略,每一步最佳决策可能可以带来整体的最优解。 举例:寻找图最短路径的狄克斯特拉算法(Dijkstra Algorithm) 贪心算法和分而治之方法的区别 1 贪心算法一般更容易想出,毕竟只需要找到每一步最优解,而分治法要找出基线条件,递归条件,状态转移方程,较难设计。 2 贪心算法易于分析。贪心算法由于一般可以一次性得到结果,易于预测其时间复杂度。而分治法由于一般

Raine_Yang的博客 555

SIMULINK开发项目实例 1000 例专栏之第802例--基于电机驱动系统的场景实例:永磁同步电机(PMSM)在电动汽车中的矢量控制仿真

随着全球对环境保护的关注增加,电动汽车(Electric Vehicle, EV)因其环保特性而受到广泛关注。永磁同步电机(Permanent Magnet Synchronous Motor, PMSM)由于其高效率、高功率密度和良好的动态响应性能,在电动汽车驱动系统中得到了广泛应用。矢量控制(Field-Oriented Control, FOC)是实现PMSM高性能控制的关键技术之一,它能够实现对电机转矩和磁场的独立控制,从而达到类似直流电机的控制效果。本文将详细介绍如何使用来构建一个。

xiaoheshang_123的博客 269

Qt入门教程【基础控件篇】QLineEdit输入框

QLineEdit输入框

小鱼酱的博客 3262

【贪心算法】贪心算法

【贪心算法】贪心算法

fight_p的博客 1万+

100天精通Python(基础篇)——第20天:pip命令大全

pip升级命令:python -m pip install --upgrade pip pip install name //这里的name是要安装的第三方库名 pip install name -i http://mirrors.aliyun.com/pypi/simple/ 国内镜像源 阿里云:http://mirrors.aliyun.com/pypi/simple/ (推荐使用) 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple 豆瓣:http:/

努力让自己发光,对的人才能迎着光而来 18万+

关于贪心算法的研究

关于贪心算法的研究[摘要] 本文对贪心算法进行较详细的研究。第一部分明确其基本概念,第二部分介绍常见的贪心模型,第三部分给出常用的贪心证明方式,第四部分介绍贪心的经典算法,第五部分与其他算法进行比较,最后总结贪心算法的优劣性、竞赛应用及前景。 [关键词] 贪心算法、Prim、kruskal、Dijkstra、Huffman、拟阵、证明贪心算法是在信息学竞赛中一个常用的重要算法。在许多的经典算法中

It's Maverick. 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

贪心算法介绍及应用(贪心算法)

贪心算法(Greedy Algorithm)是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,它不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优解。贪心算法采用自顶向下、以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将问题简化为一个规模更小的子问题,通过每一步的局部最优选择,期望最终得到全局最优解。贪心算法是一种重要的算法设计策略,在解决许多实际问题中具有广泛的应用。它的核心在于选择合适的贪心策略,通过局部最优选择来逐步逼近全局最优解。

ZHANGKB_的博客 3227

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

贪心算法总结

一 基本思想     贪心算法总是作出在当前看来最好的选择。即贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择,不一定达到全局最优。     当一个问题动具有最优子结构性质时,可用动态规划算法求解,但有时贪心算法会更简单有效。如下图所示例题,贪心所得的局部最优就是全局最优。     贪心算法解题简单、有效,利用了问题本身的特性。但它有时并不能从局部的最优得到整体的最优。如下图所示例题,贪心所得的局部最优并非全局最优。     虽然贪心算法不是对所有问题都能从局部得到整体的最优解,但它

Summer_night_star的博客 5351

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

贪心算法综述

贪心算法综述引言贪心算法的基本概念贪心算法的定义贪心算法的选择性质贪心算法的流程贪心算法的实现过程贪心算法与动态规划贪心算法模型背包问题单源最短路径问题贪心算法的问题贪心算法的优缺点经典贪心算法普里姆算法普里姆算法概览算法简单描述Kruskal算法Kruskal算法概览算法简单描述Dijkstra算法Dijkstra算法思想Dijkstra算法步骤 引言 近年来的信息学竞赛中,经常需要求一个问题的可行解和最优解,这就是所谓的最优化 问题。贪心法是求解这类问题的一种常用算法。在众多的算法中,贪心法可以算的上是

bigplipli的博客 8297

贪心算法详解

​ 有人说贪心算法是最简单的算法,原因很简单:你我其实都很贪,根本不用学就知道怎么贪。有人说贪心算法是最复杂的算法,原因也很简单:这世上会贪的人太多了,那轮到你我的份? 贪心算法思想: 顾名思义,贪心算法总是作出在当前看来最好的选择。...

m0_54615144的博客 4269

贪心算法适用条件_贪心算法问题

贪心算法的适用的问题贪心算法适用的问题必须满足两个属性:(1) 贪心性质:整体的最优解可通过一系列局部最优解达到,并且每次的选择可以依赖以前做出的选择,但不能依赖于以后的选择。(2) 最优子结构:问题的整体最优解包含着它的子问题的最优解。贪心算法的基本步骤(1) 分解:将原问题分解为若干相互独立的阶段。(2) 解决:对于每一个阶段求局部的最优解。(3) 合并:将各个阶段的解合并...

weixin_39907316的博客 4990

聊聊贪心算法

贪心算法是一种在每一步选择中都采取当前状态下最优(或最有利)的选择,以期望得到全局最优解的算法策略。它的核心思想是在每一步都做出局部最优的选择,从而希望这些局部最优选择的累积能够导致全局最优解。直观性:贪心算法的选择过程直观,易于理解和实现。简单性:算法结构简单,通常只需要线性或多项式时间复杂度。快速性:能够快速得到解决方案,适合于需要快速响应的场景。不保证全局最优:由于每一步只考虑局部最优,不保证最终解是全局最优的。

无远弗届 1092

贪心算法简介

1.贪心算法简介 1.1 基本定义 在贪婪算法(greedy method)中,我们要逐步构造一个最优解。每一步,我们都在一定的标准下,做出一个最优决策。做出决策所依据的标准称为贪心准则(greedy criterion)。 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。 也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法每一步必须满足以下条件:   1、可行的:即它必须满足问题的约束。   2、局部最优:他是当前步骤中所有可行选择中最佳的局部.

他山之石 可以攻玉 1615
上一篇: poj1167 The Buses
下一篇: USACO Bronze and Gold
Modestr-E·X·L
博客等级 码龄7年 5粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值