




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、通俗地讲,算法是解决问题的方法,严格地说,算法是对特定问题求解步骤的一种描述,是指令的有限序列。算法还必须满足一下五个重要特性:输入、输出、有穷性、确定性、可行性。程序(Program)是对一个算法使用某种程序设计语言的具体实现,原则上,算法可以用任何一种程序设计语言来实现。什么是算法的计算复杂性?算法分析指的是对算法所需要的两种计算机资源一一时间和空间(时间复杂性和空间复杂性进行估算,所需要的资源越多,该算法的复杂性就越高。表示计算复杂性的O你掌握了?若存在两个正的常数c和n0,对于任意n>n0,者B有T(n)<cxf(n),则称T(n)=O(f(n)(或称算法在O(f(n)中)
2、。我们主要介绍了哪几种算法设计方法?分治法:将一个难以直接解决的大问题,分割成一些规模较小的子问题,以便各个击破,分而治之。减治法:减治法在将原问题分解为若干个子问题后,利用了规模为n的原问题的解与较小规模(通常是n/2)的子问题的解之间的关系,这种关系通常表现为:(1)原问题的解只存在于其中一个较小规模的子问题中;(2)原问题的解与其中一个较小规模的解之间存在某种对应关系。由于原问题的解与较小规模的子问题的解之间存在这种关系,所以,只需求解其中一个较小规模的子问题就可以得到原问题的解。动态规划法、贪心算法、回溯算法、概率RAM程序分治法-合并排序嘉一融石二丽访W'vxiidMcrtc
3、Suri(iinrJtiniiJ+加ntc)F(:if(s=t)rJsMs:;dsc(;m=(叶0/2:;|Mergesort(r.r(T£,m);“归并排序前半个子序列;#归并推序后半个了序列Merge(tpf,s,m,t);少含井两个已排序W子序列步算法4.4合并有序子序列voidMeigcQntf|Linirl|.mts,t)i=s;j=m+l;k=s:whilej<-t)IIif(rij<-rjj)rl(k+1:"取币和币中较小者放入rImelserlk-HF=rU+::1if(i<=ni>while由第一个于卡列没处理完,则
4、进行收索处理!rlk+寸=中+;elsewhile(j<=t)了若第二个序列没处理完,则逆行收尾处理rlk+j+;设算法4.3对n个元素排序的时间复杂性为T(n),则该二路归并排序算法存在如下递推式:F(n=1|2r(n;2)+-1rt>1二路归并排序的时间代价是O(nlog2n)。所需空间只要O(m+n+min(m,n)的空间就够了(假设两个合并串白长度分别为m和n)。分治法-快速排序1'1,BiII1IBIIB!"Ml"IMIB,IBIMl"IM!"1BMIB都算法4.6一快速排序;产一PjoidQuicksort(intr,in
5、tfirst,intend)-/;if(fint<cnd);pjv*it=Partition(r,first,end);问题分解,pivnt是轴值在序列中的位置Quicksort(r,first,pivot-1);/递归地对左侧子序列进行快速排序;Quicksort(npivot+l,end);"递归地对右侧子序列进行快速排序才算法4.5次划分/intPartitiar(intr|Tintflrqtiniend:1ii=f1niU=eml;/初始化while但I4J'vtiilt(l<j&&r|i|*-r|j|)|一-s,右侧扫摇it(i<j
6、)r|iH-*rj|:/,将较小记录交换到前面if唱JiikU<j&位r|i|=r(j|)计十;“左侧后捕If(Kj)!lib*rli|;将较大记录交换到后面IIiraumi:Ni为辅值记录的展峙位置算法复杂性tog在最好情况下在具有n个记录的序列中,一次划分需要对整个待划分序列扫描一遍,则所需时间为O(n)。时间复杂度为O(nlog2n)。在最坏情况下必须经过n-1次递归调用才能把所有记录定位,而且第i趟划分需要经过n-i次关键码的比较才能找到第i个记录的基准位置,因此,总的比较次数为:J)15ni)=鼾("-1)=(*时-);-t2时间复杂度为O(n2)分治法-最大
7、子段ir笄法4,7JR大子蛇和冏题intMmSumfinta|intLeft,intrilil);(ium=ihif(lert=ri£ht)(,血果胖列长度为I直接求解if(aIkfipt)MiB=a(kn;iel»tumr=fl!;I;icentvr=duft+rtEbty2:仃划分iiiiK*,kR-*!<nter):"对直慵柒,通白求解rht»uiii-MriSuCLiilertl,riffhl);时盛情&母,通史求解。刃:|的产业40下聘应情况.先来IMfur(l"ceuler;i-Ilefts+=»|ik1-l
8、efts;Jil=Oiriht3=04再求解k上lor|J=wnter+1;<=ri®h(;-1+)t山加肝=叩|;iT(rights>j»2|C=r悟ht与;%urei=m+谓:计茸情St的餐大子段和if*iini=kfUun>“合并.在1ium、Mfkum和riihtf»rn中取较大考kf(lunKrigBtiamihi;jreturnsvm;T'(h)递推式:算法时间复杂度:O(nlog2n)分治法-棋盘覆盖问题算法4上机盘覆蛊%由dCbMBMrdfinlti;intivldv;intde,mt*#仃和住岫耕中左上角的下标后和前昆特
9、舞方格的下标aMMHRR9T1.,:厂fr知卜Hgim=Itmfturn;"做盘只有一个方格且是特殊方格叶中门I.我骨牌号1 =sizt.ii"划分棋盘。量近左上角子横疝UtrtrfrtsA*dctc+«兴惟辟寿格在左上角子横中C'hi'x+HHrdttr,gdid%v):建启处理子软盘ei»(。用t号L星骨牌量翼右下角,再递归处理于棋盘boardl|lr+s-I|tc+a-1j=t;匚注Ehurdd(c,lHs_L忙t_1.():J力屐盖右上海子棋盘H(drttl三th>=怔+动特殊方格在方上用修盘中£网海,将加州”+工
10、曲,d£M;"递白处理于极H* 尿j。用号LtMM*襄左下胸,再遑归处理了棋盘bairdlii-+t-J|tc-b5t;Cht'N%lLi>*rdttf;tc+&tr+vLtd.小* st就左下角于棋盘iHdrAj*是4tkMk+”特殊方格在左下用予横拉中ChrfK力酎d(tr*vtLdr4dc+c):.i£扫处理丁棋改* 尻|疗用号L型骨牌盖右上角,再地归处直子横盘bbPirdltf+ij|t«*h-l|-r;Cht打Hu*rdCLktu.tr+a.lc+1Li);。瘠虚右下弟子棋此if(Jrair+埼&&ikx糖
11、+hX特殊方格在右下用于搞胡中CbeHHusudtlLArefdrdcj);遣白处理子帙母* 崛fr用r号1率骨牌国前左上角.再递归处理于横盘hcnritflr+t|lc+s|-1;ChfN-lMiirdCtr*忙*hId1匕+仁*1;耶推工分治法-循环赛日安排问题步'算法4.9-环实日程袤/v横d6111心n1,1式布1A.;nt曲:“工,iAfL、逸手交加比室,一席簟蛆T灵示日程妾排,数用下标41产的1131:0li=优2个选手比赛日程可直接求得“求解E个选手比赛日程I得到左上角元素T;.|:|IW;»|2|R>=1;forXK(<k:(+)/您代处理.依次处
12、理V”个选手比赛日程Tcmp-ntn-n*2;H填左下角元素;for(i-Uinp+l;&n;i+)for(JI:j<-iump:j+)fl|i|j|=A(Hemp|jHemp;左下角元素和左上珀元素的对应关系力将左下角元素抄到右上角fnr(i=l;i<=temp:i+)for(j=1tmp+1;j<=n;j+)叫F+CempHO+twmp:)%n|;H将左上角元素拉到右下角ftirIxinp";i<=n;L+)for(j-rtemp+1;J<-n;J+)a|i|j|=|i-t<!mp|j-tcmp|:LI2121T5)=3fXl?=3
13、163;4,=O)基本语句的执行次数是:GjAe算法的其时间复杂性为Q(4k)o顺序统计问题:算法1找出n个元素中的第k个最小元素输入:从一个有线性序的集合中抽出的n个元素的序列S及一个整数k,1<k<n。输出:S中的第k个最小元素1procedureSELECT,(KtSi;1, H|S|<50thenbcLii2, 将印N的元素排成非通战吊;王return(帛中的第k外最小元素)enddsth*in4, 舟5的元素划力为区段等丁5的Ul5II切个T中列:5, 标各于序列舞序;6, 由苏孑并列的中信元於组或序列M;7, h*-SELECTl(T|M|Z2,M,泣拉n】将后中
14、的元南划分为小于m,等于m和大于m的三个子序网S3,生和冬9, :|同呼:return(SELECT但>);10, :IIS/十|&|ak:FHurnfm):1L:dw:rvtumSELECT(k-|SJ-脂SJ)eiidcusevncl算法2procedureSELECT?Ik,S);1. if|S.10thenh-cf;ir)2. 将S中的元素排成非递减序:工rliiru|S中的笫k个最小元於)endelsebegin也从$中随机地选出一个元索3:工按白把*中的元京分成三个子靠兽尸闾meS,生旦|9浮匕$;sesjcase九二恪|:Eue(SELECT?(k.7. :|S11
15、1+|Sz|>k:return(a>乳:else:return(SELECT2gS|-|Sz|ttndcikvend算法2的期望时间是Q(n)。最坏情况Q(n2)减治插入排序(手工题)例1用插入法将以下M个元素排序,它的是'11.127.4X57九5.舞明7帕,?0B,».加,31第一灯11T27.43'574.SY60.700'708.IEM51*(127,5T4,究。.70S.20152-11,415.70Dr9,31)第二垢将酊的兀青排序.因却|例|加九忐1打£14.M0-70Bhfl$_5?47(m-J27«Mu;前a排
16、序.因为usji=z<,.用“比较”喙接排不.爵排序的为574.708.由,和5;的黑*/5丁*7。8VV1打洌109按分段逆声播入法,用前次比较<2074,工blk)先嘲加插入序列127<574<70之中;撼后将SwMS入序列心门7F#碘之中;也只芾两次比松(560-127±<64J-5743,粉朝鼻的摔序结果为lD<l7<5WH574-7IIKr.第三生:用逆序描入法牌、摘入舟中.檀需、和的元素对应关系,有2(HU7cSMI<574<708VVVVV9II5700同按分段逆序插入法,插入喷序板次是5,th7no.”,JL各战入
17、结果是;5<9<20<127<560<574<-iMiVVV114370031XXI上班I27<5MI<574<70SV7137A031?<11<21KI175Mh<S74<7<KI<70HV4331I<2(K43<127<W<K57J<71MK7ON31H9工11GM31<43<117<56(k574<7M<7<K累计总的比较次数是16次.堆的概念:n个元素的序列K1,K2;.Kn,当且仅当满足卢内K外或上1工弟丁飞亦./才琳为一2(j_
18、H'rJj+=2|_rt-r?J+2Ft+I动态规划求解TSP问题设顶点之间的代价存放在数组cnn中,动选规划法求廨TSP同黑的并法如下:!(.tor(i=l:i<n;i+)初始化第。列则网向川阴;2.for(j=1;j<2nl:j+)for(Hl;i<n;i+)”依次进行第i次迭代if(子集V|j|中不包含i)对Vj中的每个元素k,计算diU=nrin©珊申:3.对中的每一个元个元计算d|0|2Z-l=min(40川+dk12mL2);4.输出最短路短长度dQ2d1;注:用动态规划解决TSP问题,算法的时间复杂性为O(n22n)。和蛮力法相比,动态规划法求
19、解TSP问题,把原来的时间复杂性是O(n!)的排列问题,转化为组合问题,从而降低了算法的时间复杂性,但它仍需要指数时间。但遗憾的是这一动态规划算法需要O(n2n)的空间。当n较大时,空间难以满足。多段图的最短路径算法:1. For(i=1;i<=n;i+)COSTi=C®始化:数组costn初始化为最大值,数组pathn初始化为-1;2.for(i=n-2;i>=0;i-)1.1 对顶点i的每一个邻接点j,根据costi=mincij+costj(i<j<n且顶点j是顶点i的邻接点)计算costi;1.2 根据pathi=使cij+costj最小的j计算pat
20、hi;.输出最短路径长度cost0;.输出最短路径经过的顶点:i=0循环直到pathi=n-1输出pathi;i=pathi;最优二叉查找树算法:最优二叉查找树是以这n个记录构成的二叉查找树中具有最少平均比较次数的二叉查找树,即最小,其中pi是记录ri的查找概率,ci是在二叉查找树中查找ri的比较次数。设"十字皆的垂扰权率在偷在败翘“中,«如麻状*优二又*战村的林法如下:严算法6.5最优三丈查找树;dftnhlc(9pHrttALHSTimrt.rinuhlep|filiahliCJ|TiftfH|j|):Ilur(1=1:J-H-)仍$式6.17和式配18初始化RUIHl
21、-hCm/算法6上二*初三攵查找葩(西bforld=lid<n;d+)心按对角线逐条计算1fbr(i-1;H-n-dsi+);IJ=Hd;ildn=-<:ridnkf:tuiki=O;for(k=i;k<?=j;k+)JIm+p|k:if(C|Ilk-l4C|k+lJU|<Min)(min-C|i|klpCk+1|j|;回溯法-解空间树的动态搜索过程注:搜索过程中,采用两种策略避免无效搜索:.用约束条件剪去得不到可行解的子树;.用目标函数剪去得不到最优解的子树。例一:对于n=3的0/1背包问题,三个物品的重量为20,15,10,价值为20,30,25,背包容量为25,从
22、图8.2所示的解空间树的根结点开始搜索,搜索过程如下(注:树枝左侧为1,右侧为0,1代表装包,0代表不装包,从上到下每一层代表一个物体)例二:对于n=4的TSP问题,解空间树如下:代价矩阵C如下:co367122886so2<376父.目标函数初始化为00;.从结点1选择第1棵子树到结点2,表示在图中从顶点1出发;.从结点2选择第1棵子树到达结点3,表示在图中从顶点1到顶点2,依代价矩阵可知路径长度为3;.从结点3选择第1棵子树到达结点4,表示在图中从顶点2到顶点3,依代价矩阵可知路径长度为3+2=5;.从结点4选择唯一的一棵子树到结点5,表示在图中从顶点3到顶点4,路径长度为5+2=7
23、,结点5是叶子结点,找到了一个可行解,路径为-2-3一4一1,路径长度为7+3=10,目标函数值10成为新的下界,也就是目前的最优解;.从结点5回溯到结点4,再回溯到结点3,选择2点3的第2棵子树到结点6,表示在图中从顶点2到顶点4,路径长度为3+8=11,超过目标函数值10,因止匕,对以结点6为根的子树实行剪枝;搜索后的结果图:我优方或继续搜索,得到的搜索也间如图8.6所示口回溯法-图着色问题的算法用m种颜色为一个具有n个顶点的无向图着色设数组colorn表示顶点的着色情况,回溯法求解m着色问题的算法如下:算法瑞2图着色问题voidGraphColor(intn,intc|)«tn
24、tm)所有数组下标从1开始(for(i=1;i<=n;iH)蒋薮组colorn初始化为0color|i|=0:k=l;while(k>=l)color|k|=color|k|4-l;while(color|k|<=m)ifOk(k)breakelsecolor|k|=color|k|+1;搜索下一个颜色if(colork|<=jn&&k=n)求解完毕,输出解for(i=l:i<=n:i+)cout«color|i|;return;elseif(color|k|<=m&&k<n)k=k+l;处理下一个顶点COlo
25、rk|=0;皿21;回溯boolOk(intkf,画断窗电k曲着色国各爱生加突for(i=l;i<k;i+)if(ck|i|=1&&color|i|=col(>r|k|)returnfalse;returntrue:算正面舍至行区;盘山宜基)一ProcedureGraphColorl(k)globalintegermji.color|n|;booleancn.n|;integerk;whilecolork|<=mdu产生对colurk的一切合理分配NKKTVALCIE(k)*给d>l“|k俵一个合理的颜色ifcolor|k|=0thenreturn;星束本次调用ifk=nthen找到一种着色法for(i-hi<=n;i+)cout«co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于传统文化的节日主题展览策划
- 财务风险控制与企业文化建设
- 2025年中国小车顶数据监测报告
- 2025年中国家庭影院功能沙发市场调查研究报告
- 2025年中国字母刻印机市场调查研究报告
- 安全制度执行与落实情况分析
- 2025年中国多用袋数据监测报告
- 2025年中国多功能冲孔机市场调查研究报告
- 学校空间设计与环境美化的关系
- 太原夜游经济与文化活动的结合研究
- 2023年辽宁专升本统考《计算机应用基础》高频核心题库300题(含答案)
- 煤矿建设安全规范
- 2023学年完整公开课版ThelastdayofPompeii
- 压力管道试验方案、强度(含泄漏性)试验记录及报告典型示例
- (起重指挥司索工)施工现场班前(晨会)生产安全教育活动记录
- 心肺复苏讲课优秀课件
- 风险管理与保险智慧树知到答案章节测试2023年上海财经大学
- 2022年河南检察职业学院单招综合素质试题及答案解析
- 《电力系统继电保护故障信息采集及处理系统设计与实现【论文11000字】》
- 租车合同电子完整版范本(3篇)
- GB/T 2007.3-1987散装矿产品取样、制样通则评定品质波动试验方法
评论
0/150
提交评论