【教学课件】第二章算法设计与分析的基本方法及技巧.ppt
《【教学课件】第二章算法设计与分析的基本方法及技巧.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第二章算法设计与分析的基本方法及技巧.ppt(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-1第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋第二章算法设计与分析的基本方法及技巧2.1 程序运行时间2.2 一类递归方程的求解2.3 分治2.4 平衡2.5 贪心法2.6 动态规则2.7 回溯D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-2第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与
2、分析的基本方法与技巧国家示范性软件学院 http:/2006 秋算法(算法(Algorithm):是对特定问题求解步骤的一种描述,它是指令(规则)的有限序列,其中每一条指令表示一个或多个操作。算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。Persian Textbook(波斯教科书)的作者的名字Abu Jafar Mohammed ibn Ms al-Khowrizm(约公元前825年)从字面上看,这个名字的意思是“Jafar 的父亲,Moh
3、ammed 和 Ms 的儿子,Khowrizm 的本地人”。Khowrizm 是前苏联XBA(基发)的小城镇。Al-Khowrizm 写了著名的书Kitab al jabr wal-muqabala(复原和化简的规则);D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-3第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋资料:资料:AlgorithmAlgorithm与与LogarithmLogarithm这个词一直到1957年之前在Web
4、sters New World Dictionary(韦氏新世界词典)中还未出现,我们只能找到带有它的古代涵义的较老形式的“Algorism”(算术),指的是用阿拉伯数字进行算术运算的过程。在中世纪时,珠算家用算盘进行计算,而算术家用算术进行计算。中世纪之后,对这个词的起源已经拿不准了,早期的语言学家试图推断它的来历,认为它是从把algiros(费力的)+arithmos(数字)组合起来派生而成的,但另一些人则不同意这种说法,认为这个词是从“喀斯迪尔国王Algor”派生而来的。最后,数学史学家发现了algorism(算术)一词的真实起源:它来源于著名的Persian Textbook(波斯教科
5、书)的作者的名字Abu Jafar Mohammed ibn Ms al-Khowrizm(约公元前825年)从字面上看,这个名字的意思是“Jafar 的父亲,Mohammed 和 Ms 的儿子,Khowrizm 的本地人”。Khowrizm 是前苏联XBA(基发)的小城镇。Al-Khowrizm 写了著名的书Kitab al jabr wal-muqabala(复原和化简的规则);另一个词,“algebra”(代数),是从他的书的标题引出来的,尽管这本书实际上根本不是讲代数的。逐渐地,“algorism”的形式和意义就变得面目全非了。如牛津英语字典所说明的,这个词是由于同arithmetic
6、(算术)相混淆而形成的错拼词。由algorism又变成algorithm。一本早期的德文数学词典 Vollstandiges Mathematisches Lexicon(数学大全辞典),给出了Algorithmus(算法)一词的如下定义:“在这个名称之下,组合了四种类型的算术计算的概念,即加法、乘法、减法、除法”。拉顶短语algorithmus infinitesimalis(无限小方法),在当时就用来表示Leibnitz(莱布尼兹)所发明的以无限小量进行计算的微积分方法。1950年左右,algorithm一词经常地同欧几里德算法(Euclids algorithm)联系在一起。这个算法就是
7、在欧几里德的几何原本(Euclids Elements,第VII卷,命题i和ii)中所阐述的求两个数的最大公约数的过程(即辗转相除法)。D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-4第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋递归技术 最常用的算法设计思想,体现于许多优秀算法之中 分治法 分而制之的算法思想,体现了一分为二的哲学思想 模拟法 用计算机模拟实际场景,经常用于与概率有关的问题 贪心算法 采用贪心策略的算法设计 状态空
8、间搜索法 被称为“万能算法”的算法设计策略 随机算法 利用随机选择自适应地决定优先搜索的方向 动态规划 常用的最优化问题解决方法“好好”的算法的标准的算法的标准:正确性,算法能满足具体问题的需求 可读性,首先方便阅读与交流,其次才是机器执行 健壮性,输入错误时,能作出反应,避免异常出错 效率与低存储量要求算法的特征算法的特征:有穷性、确定性、输入、输出、能行性D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-5第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 ht
9、tp:/2006 秋对算法对算法“正确性正确性”的要求的要求:不含语法错误;对于几组输入数据能得到满足要求的结果;对精心选择苛刻并带有刁难的数据能得到满足要求的结果;对于一切合法的输入均得到满足要求的结果;算法描述算法描述:自然语言;自然语言;程序设计语言;程序设计语言;类语言类语言*;关于本书采用的类语言描述关于本书采用的类语言描述:结构类型说明结构类型说明 输入输出约定输入输出约定(cin v,cout v)new 和和 delete 引入引用类型引入引用类型 其他其他D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-6第二章第二章第二章第二章 算法设计与分析的基本方法与技
10、巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋影响算法执行的因素影响算法执行的因素:算法实现后所消耗的时间*算法实现后所占存储空间的大小*算法是否易读、易移植等等其它问题影响时间特性的四个因素影响时间特性的四个因素:程序运行时输入数据的总量 对源程序编译所需的时间 计算机执行每条指令所需的时间 程序中指令重复执行的次数*定义定义 语句频度语句频度:语句重复执行的次数n程序运行时间D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-7第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法
11、设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋渐近时间复杂度(时间复杂度)渐近时间复杂度(时间复杂度)T(n)算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记作:T(n)=O(f(n)它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。渐近空间复杂度(空间复杂度)渐近空间复杂度(空间复杂度)S(n)S(n)=O(g(n)运算法则运算法则:设:T1(n)=O(f(n),T2(n)=O(g(n)加法规则:T1(n)+T2(n)=O(max f(n),g(n)乘法规则:T
12、1(n)T2(n)=O(f(n)g(n)D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-8第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋程序运行时间比较程序运行时间比较 T(n)=O(f(n)T(n)n01000200030005101520252nn3100n5n2logn2100n T(n)D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-9第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基
13、本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋设:T(x):取变量或常量x之值所消耗时间T(.V):取变量V之地址所消耗的时间T(=):赋值所消耗时间T():执行基本运算所耗时间T(call/return):执行函数调用和返回所耗时间T(par):将参数par传给函数所消耗时间D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-10第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/20
14、06 秋(1)表达式和赋值语句表达式和赋值语句 exp:=常数|变量|F-name(e1,e2,em)|(exp exp)T(v=exp)=T(.v)+T(=)+T(exp)T(exp exp)=T(exp)+T()+T(exp)T(F-name(e1,e2,em)=T(call/return)+mT(par)+T(F-body)例:T(c=a+b)=T(.c)+T(=)+T(a)+T(+)+T(b)相应的汇编程序为:load a in R1 load b in R2 add R2 to R1 load .c in R2 store R1 in R2通常取O(1)D.S.D.S.D.S.D.S
15、.算法与数据结构 Slides.2-11第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋(2)语句序列语句序列 T(s1,s2,sk)=maxT(s1),T(s2),T(sk)(3)条件语句条件语句 T(if(B)s1 else s2)=T(B)+T(else)+maxT(s1),T(s2)通常取T(B)+T(else)=O(1)T(if(B)s)=O(1)+T(s)(4)Switch语句语句 设语句s switch(E)case E1:S1;case
16、Ek:Sk;default:Sm T(s)=T(E)+T(Ei)+maxT(s1),T(sk),T(sm)O(1)ki=1D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-12第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋(5)for语句语句 T(for(i=1;i=n;i+)s)=(T(s)+T(i=1)+T(i=n)+T(i+)+T(for)O(1)(6)while语句语句 while(B)s i=0;while(B)s;i+设RT
17、0表示某一次循环开始执行时的绝对时间 关于循环的定时不变式RT为 RT=RT0+(i+1)(T(B)+T(while)+i(T(s)+T(j)其中:T(while)代表测试循环终止条件所耗时间 T(j)代表跳回循环头所耗时间 可简化成:T(j)=T(while)T(while(B)s)=RT-RT0=(i+1)T(B)+iT(s)+(2i+1)T(while)D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-13第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 h
18、ttp:/2006 秋(7)函数调用函数调用 递归调用:被调用子函数运行时间 非递归调用:求解递归方程(8)goto语句语句 goto语句破坏了程序结构 一般对goto语句限制使用 对有条件的goto转移可忽略不计D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-14第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋Void BUBBLE(A)int An;int I,j,temp;for(i=0;i=i+1;j-)O(n-i-1)if(A
19、j-1Aj)O(n-i-1)1)O(n(n-1)/2)temp=Aj-1;O(1)O(1)=(n-i-1)=O(n2)Aj-1=Aj;O(1)O(1)Aj=temp;O(1)n-2i=0D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-15第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋举例举例:s=0;f(n)=1;T1(n)=O(f(n)=O(1)常量阶 for(i=1;i=n;+i)+x;s+=x;f(n)=3n+1;T2(n)=O
20、(f(n)=O(n)线性阶 for(i=1;i=n;+i)for(j=1;j=n;+j)+x;s+=x;f(n)=3n2+2n+1;T3(n)=O(f(n)=O(n2)平方阶 for(i=1;i=n;+i)for(j=1;j=n;+j)cij=0;for(k=1;k 1 f(n)=G1+f(n 1)f(n 1)=G2+f(n 2)f(n 2)=G3+f(n 3)f(2)=Gn-1+f(1)+f(1)=C f(n)=G1+G2+G3+Gn-1+C f(n)=n G T(n)=O(f(n)=O(n)D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-17第二章第二章第二章第二章 算法
21、设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋int sort(i,j)int i,j;if(i=j)return(xi);else m=(i+j-1)/2;return(merge(sort(i,m),sort(m+1),j);这是一个快速排序算法merge的运行时间正比于n(n是2的幂)设T(n)是sort最差情况下的运行时间,则T(n)(c1+c2)nlogn+c1 c1 n=12T(n/2)+c2n n1n一类递归方程的求解D.S.D.S.D.S.D.S.算法与数据结构 S
22、lides.2-18第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋猜解法:猜解法:首先猜出一个解f(n)的形式,令其带有待定参数;在归纳推理过程中确定待定参数,并利用方程证明T(n)f(n)。若推理过程能够完成且待定参数能够确定,则求解完毕。f(n)可以是 O(1),O(n),O(nlogn),O(n2)等等。设有:设有:T(n)c1 n=12T(n/2)+c2n n1猜测猜测1:对参数a,T(n)anlogn,带入n=1,由于anlogn=0 虽然满
23、足T(1)c1,但它与a无关,无法确定a与c1关系。此猜测失败。D.S.D.S.D.S.D.S.算法与数据结构 Slides.2-19第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋猜测猜测2:T(n)=anlogn+b,当n=1时,只要bc1即可。当n2时,设对所有的 k1 的齐次解是O(nlogc),且对特解有如下结论:(1)若ad(c),则特解是O(ak),或O(nlogc),即特解与齐次解同阶(2)若ad(c),则特解是O(d(c)k),或O(n
24、logcd(c)即特解与d同阶(3)若a=d(c),则特解是齐次解的logcn。aaD.S.D.S.D.S.D.S.算法与数据结构 Slides.2-24第二章第二章第二章第二章 算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧算法设计与分析的基本方法与技巧国家示范性软件学院 http:/2006 秋基本思想:分而治之。将一个规模为n的问题分解为k个规模较小 的子问题,这些子问题互相独立且与原问题相同。递 归地解这些子问题,然后将各子问题的解合并得到原 问题的解。设问题输入数据A0.n-1,函数dac(p,q)求子问题Ap,q的解。对函数dac的首次调
25、用是dac(0,n-1)。int dac(int p,int q)if(small(p,q)return(G(p,q);else (m1,mk)=divide(p,q);return(Combine(dac(p,m1),dac(m1+1,m2),dac(mk+1,q);分治方法与软件设计的模块化方法非常相似。为了解决一个大的问题,可以:1)把它分成两个或多个更小的问题;2)分别解决每个小问题;3)把各小问题的解组合起来,即可得到原问题的解答。小问题通常与原问题相似,可以递归使用分治策略来解决。n分治分治(Divide and ConquerDivide and Conquer)D.S.D.S.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第二 算法 设计 分析 基本 方法 技巧
限制150内