2022年贪心算法 .pdf
《2022年贪心算法 .pdf》由会员分享,可在线阅读,更多相关《2022年贪心算法 .pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、贪心算法学习收藏一、贪心策略的定义【定义 1】贪心策略是指从问题的初始状态出发,通过若干次的贪心选择而得出最优值(或较优解)的一种解题方法。其实,从贪心策略 一词我们便可以看出,贪心策略总是做出在当前看来是最优的选择,也就是说贪心策略并不是从整体上加以考虑,它所做出的选择只是在某种意义上的局部最优解,而许多问题自身的特性决定了该题运用贪心策略可以得到最优解或较优解。二、贪心算法的特点通过上文的介绍,可能有人会问:贪心算法有什么样的特点呢?我认为,适用于贪心算法解决的问题应具有以下2 个特点:1、贪心选择性质:所谓贪心选择性质是指应用同一规则f,将原问题变为一个相似的、但规模更小的子问题、而后的
2、每一步都是当前看似最佳的选择。这种选择依赖于已做出的选择,但不依赖于未做出的选择。从全局来看,运用贪心策略解决的问题在程序的运行过程中无回溯过程。关于贪心选择性质,读者可在后文给出的贪心策略状态空间图中得到深刻地体会。2、局部最优解:我们通过特点2 向大家介绍了贪心策略的数学描述。由于运用贪心策略解题在每一次都取得了最优解,但能够保证局部最优解得不一定是贪心算法。如大家所熟悉得动态规划算法就可以满足局部最优解,在广度优先搜索(BFS)中的解题过程亦可以满足局部最优解。在遇到具体问题时,往往分不清哪些题该用贪心策略求解,哪些题该用动态规划法求解。在此,我们对两种解题策略进行比较。名师资料总结-精
3、品资料欢迎下载-名师精心整理-第 1 页,共 14 页 -三、贪心策略的理论基础-矩阵胚名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 14 页 -正如前文所说的那样,贪心策略是最接近人类认知思维的一种解题策略。但是,越是显而易见的方法往往越难以证明。下面我们就来介绍贪心策略的理论-矩阵胚。矩阵胚 理论是一种能够确定贪心策略何时能够产生最优解的理论,虽然这套理论还很不完善,但在求解最优化问题时发挥着越来越重要的作用。【定义 3】矩阵胚是一个序对M=S,I,其中 S 是一个有序非空集合,I 是 S的一个非空子集,成为S的一个独立子集。如果 M 是一个 N M 的矩阵的话,即:若 M
4、是无向图G的矩阵胚的话,则S为图的边集,I 是所有构成森林的一组边的子集。如果对 S的每一个元素X(XS)赋予一个正的权值W(X),则称矩阵胚M=(S,I)为一个加权矩阵胚。适宜于用贪心策略来求解的许多问题都可以归结为在加权矩阵胚中找一个具有最大权值的独立子集的问题,即给定一个加权矩阵胚,M=(S,I),若能找出一个独立且具有最大可能权值的子集A,且 A 不被 M中比它更大的独立子集所包含,那么A为最优子集,也是一个最大的独立子集。矩阵胚理论对于我们判断贪心策略是否适用于某一复杂问题是十分有效的。四、几种典型的贪心算法贪心策略在图论中有着极其重要的应用。诸如 Kruskal、Prim、Dijk
5、stra 等体现“贪心”思想的图形算法更是广泛地应用于树与图的处理。下面就分别来介绍Kruskal 算法、Prim 算法和Dijkstra 算法。.、库鲁斯卡尔(Kruskal)算法【定义 4】设图 G=(V,E)是一简单连通图,V=n,E=m,每条边 ei 都给以权 W,W 假定是边 e 的长度(其他的也可以),i=1,2,3,.,m。求图 G的总长度最短的树,这就是最短树问题。kruskal 算法的基本思想是:首先将赋权图G 的边按权的升序排列,不失一般性为:e,e,.,e。其中 W W,然后在不构成回路的条件下择优取进权最小的边。其流程如下:名师资料总结-精品资料欢迎下载-名师精心整理-
6、第 3 页,共 14 页 -(1)对属于 E 的边进行排序得e e.e。(2)初始化操作w0,T,k0,t0;(3)若 t=n-1,则转(6),否则转(4)(4)若 Te 构成一回路,则作【kk+1,转(4)】(5)TT e,w w+w,tt+1,k k+1,转(3)(6)输出 T,w,停止。下面我们对这个算法的合理性进行证明。设在最短树中,有边v,v,连接两顶点v,v,边 v,v 的权为wp,若 v,v 加入到树中不能保证树的总长度最短,那么一定有另一条边v,v 或另两条边 v,v、v,v,且 wwp 或 w+wvk,vjwp,因为 v,v、v,v 不在最短树中,可知当 v,v、v,v 加入
7、到树中时已构成回路,此时程序终止。因为 v,v T,v,v T 且 wvI,vk+wvk,vjw p,与程序流程矛盾。下面给出C语言描述的kruskal算法:#define MAXE typedef struct int u;/边的起始顶点 int v;/边的终止顶点 int w;/边的权值 Edge;void kruskal(Edge E,int n,int e)/边的权值从小到大排列 int i,j,m1,m2,sn1,sn2,k;int vsetMAXV;for(i=0;in;i+)vseti=i;k=1;j=0;while(kn)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页
8、,共 14 页 -m1=Ej.u;m2=Ej.v;sn1=vsetm1;sn2=vsetm2;if(sn1!=sn2)/两顶点属于不同的集合,是最小生成树的一条边 输出这条边;k+;for(i=0;in;i+)if(vseti=sn2)vseti=sn1;j+;kruskal算法对边的稀疏图比较合适,时间复杂度为o(elog2e),e是边数,与顶点无关.、普林(Prim)算法:Kruskal 算法采取在不构成回路的条件下,优先选择长度最短的边作为最短树的边,而Prim 则是采取了另一种贪心策略。已知图 G=(V,E),V=v,v,v,.,v,D=(d)是图 G的矩阵,若v,v E,则令 dij
9、=,并假定dij=Prim 算法的基本思想是:从某一顶点(设为v)开始,令 Sv,求 VS 中点与 S 中点 v 距离最短的点,即从矩阵D 的第一行元素中找到最小的元素,设为d,则令 SS v ,继续求VS 中点与 S 的距离最短的点,设为v,则令 SS v ,继续以上的步骤,直到 n 个顶点用n-1 条边连接起来为止。流程如下:(1)初始化操作:,(1)-1,从到作【()1,()】,1(2)若 n,则作【输出T,结束】否则作【min,从到作名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 14 页 -【若 q(i)min 则作【minq(i)hj】(3),p(h),q(h)-1(
10、4)从到作【若 d q(j)则作【q(j)d,p(j)h】(5),转(2)算法中数组p(i)是用以记录和v 点最接近的属于S 的点,q(i)则是记录了v 点和 S中点的最短距离,q(i)=-1 用以表示v 点已进入集合S。算法中第四步:v 点进入 S 后,对不属于 S 中的点 vj 的 p(j)和 q(j)进行适当调整,使之分别记录了所有属于S 且和 S 距离最短的点和最短的距离,点v,v,v 分别用 1,2,,n 表示。下面给出C 语言描述的prim 算法:void prim(int costMAXV,int n,int v)/v是起始顶点 int lowcostMAXV,min;int c
11、losestMAXV,i,j,k;/*closesti表示 U 中的一个顶点,该顶点和V-U 中的一个顶点构成的边(i,closesei)具有最小的权 */lowcosti表示边(i,closeti)的权值 for(i=0;in;i+)lowcosti=costvi;closesti=v;for(i=1;in;i+)min=INF;for(j=0;jn;j+)/在(V-U)中找出离U最近的顶点K.if(lowcostj!=0&lowcostjk;lowcostk=0;/标记 k 已经加入U;for(j=0;jn;j+)/修改数组lowcost和 closest if(costkj!=0&cos
12、tkjdistu+aux,则distx=distu+aux,prevx=u,转 S2对于具有n 个顶点和e 条边的带权有向图,如果用带权邻接矩阵表示这个图,那么Dijkstra算法的主循环体需要O(n)时间。这个循环需要执行n-1 次,所以完成循环需要O(n2)时间。算法的其余部分所需要时间不超过O(n2)。五、贪心策略在P类问题求解中的应用在现实世界中,我们可以将问题分为两大类。其中一类被称为P 类问题,它存在有效算法,可求得最优解;另一类问题被称为NPC 类问题,这类问题到目前为止人们尚未找到名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 14 页 -求得最优解的有效算法,这
13、就需要每一位程序设计人员根据自己对题目的理解设计出求较优解的方法。下面我们着重分析贪心策略在求解P 类问题中的应用。在现实生活中,P 类问题是十分有限的,而NPC 类问题则是普遍的、广泛的。例 1删数问题试题描述键盘输入一个高精度的正整数N(不超过 240 位),去掉其中任意S 个数字后剩下的数字按左右次序组成一个新的正整数。对给定的N 和 S,寻找一种删数规则使得剩下得数字组成的新数最小。试题背景此题出自 NOI94试题分析这是一道运用贪心策略求解的典型问题。此题所需处理的数据从表面上看是一个整数。其实,大家通过对此题得深入分析便知:本题所给出的高精度正整数在具体做题时将它看作由若干个数字所
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年贪心算法 2022 贪心 算法
限制150内