算法分析与设计复习提纲课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《算法分析与设计复习提纲课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 复习 提纲 课件
- 资源描述:
-
1、算法分析与设计算法分析与设计常熟理工学院计算机学院刘在德第第1章章 绪论绪论l掌握三种渐近符号(O、)的含义;l会用三种渐近符号表示算法的时间复杂度;l会用扩展递归技术分析算法时间的复杂性;对于表示算法时间的简单递推式,能够用扩展递归技术求出最终结果。lP15:例1.6lP18:实验1lP22:习题1.7三种渐近符号的含义三种渐近符号的含义l大大O符号符号:若存在两个正的常数c和n0,对于任意nn0,都有T(n)cf(n),则称T(n)=O(f(n)l大大符号符号:若存在两个正的常数c和n0,对于任意nn0,都有T(n)cg(n),则称T(n)=(g(n)l符号符号:若存在三个正的常数c1、c
2、2和n0,对于任意nn0都有c1f(n)T(n)c2f(n),则称T(n)=(f(n)渐近符号表示算法时间复杂度渐近符号表示算法时间复杂度l定理定理1.1 若T(n)=amnm+am-1nm-1+a1n+a0(am0),则有T(n)=O(nm),且T(n)=(nm),从而T(n)=(nm)l例例 T(n)5n28n1当n1时,5n28n15n28nn5n29n5n29n214n2O(n2)当n1时,5n28n15n2(n2)当n1时,14n25n28n15n2则:5n28n1(n2)用扩展递归技术分析算法时间的用扩展递归技术分析算法时间的复杂性复杂性l扩展递归技术扩展递归技术:将递推关系式中右
3、边项根据递推式进行逐次替换,得到求和表达式l例例 271()2(/2)51nT nT nnn22222211 222112221002222()2(/2)52(2(/4)5(/2)52(2(2(/8)5(/4)5(/2)52(1)25(/2)2 5(/2)575/275275(2 1/2)75(22/)10310()kkkkkiikiiT nT nnT nnnT nnnnTnnnnnnnnnnnnnnnO n 第第2章章 NP完全理论完全理论 l对于简单的判定问题,会画判定树。l判定树判定树(Decision Trees)是一棵二叉树:它的每一个内部结点对应一个形如xy的比较,如果关系成立,则
4、控制转移到该结点的左子树,否则,控制转移到该结点的右子树,它的每一个叶子结点表示问题的一个结果。例例 对三个数进行排序的判定树对三个数进行排序的判定树 第第3章章 蛮力法蛮力法 l掌握改进的串匹配算法KMP算法l理解n个元素的生成排列对象l理解n个元素组成的集合的生成子集l理解0/1背包问题l理解TSP问题KMP算法算法lKMP算法思路:l如果某趟在Si和Tj匹配失败后,指针i不回溯;模式T向右滑动至某个位置k,使得tk对准si继续进行匹配。l怎么求k?l模式T=“t1t2tm”中的每一个字符tj都对应一个k,显然k与S无关。用nextj表示tj对应的k值,则t1tk-1既是t1tj-1的真前
5、缀,又是t1tj-1的真后缀的最长子串,称k是tj的前缀函数值,它等于最长子串长度加1。next数组的定义数组的定义lnext数组定义如下:1 211210 1next max|1,1 Otherkj kj kjjjkkjt ttttt t1t2t3t4t5t6a b a b a c真前缀 真后缀t1=t5,t1t2t3=t3t4t5a和aba都是ababa的真前缀和真后缀,但aba的长度最大next6=3+1=4,即当t6和si匹配失败后,将t4和si比较l一个求k的例子:next数组的求法:数组的求法:l已求出next1,nextj,咋求nextj+1?l设k是tj的前缀函数值,从而有t1
6、t2tk-1=tj-k+1tj-k+2tj-1l比较tk和tj,得2种情况:l(1)tk=tj:说明t1tk-1tk=tj-k+1tj-1tj,则nextj+1=k+1;l(2)tktj:此时要找出t1tj-1的后缀中第2大真前缀nextnextj=nextk,t1tnextk-1=tj-nextk+1tj-1,再比较tnextk和tj,又会出现2种情况:next数组的求法:数组的求法:l当tnextk=tj时,与(1)类似,nextj+1=nextk+1;当不等时,找第3大真前缀,重复(2)的过程,直至找到t1tj-1后缀中的最大真前缀,l或确定t1tj-1的后缀中没有最大真前缀,此时nex
7、tj+1=1。算法算法3.4 KMP算法中求算法中求next数组数组lvoid GetNext(char T,int next)/下标从1开始lnext1=0;j=1;k=0;lwhile(j=m)lIf(k=0)|(Tj=Tk)j+;k+;nextj=k;llelse k=nextkl算法算法3.5 KMP算法算法l1.在串S和T中分别设定比较的起始下标i和j;l2.循环直到S中所剩字符长度小于T的长度或T中所有字符均比较完毕l2.1 如Si=Tj,则继续比较S和T的下一字符;否则l2.2 将j向右滑动到nextj位置,即j=nextj;l2.3 如果j=0,则将i和j分别加1,准备下一趟比
8、较;l3.如果T中所有字符均比较完毕,则返回匹配的起始下标,否则返回0。生成排列对象生成排列对象l思路:假定已生成了1,2,n-1的所有(n-1)!个排列,可以把n插入到n-1个元素的每一种排列的n个位置中去,得到问题规模为n的所有排列。这时排列总数为n(n-1)!=n!。l时间复杂性:O(n!)l算法3.9 生成排列对象(伪代码)l1.生成初始排列1;l2.for(i=2;i=n;i+)lfor(j=1;j=1;k-)将i插入到第j个排列中的第k个位置;生成子集生成子集l思路:n个元素组成的集合A=a1,a2,an的所有2n个子集与长度为n的所有2n个比特串之间存在一一对应关系。建立这种关系
9、的方法是为每个子集指定一个比特串b1b2bn,如果ai属于该子集,则bi=1,否则bi=0(1in)。如3个元素组成的集合,比特串110表示a1a2,比特串000表示。算法算法3 3.10 10 生成子集生成子集l1.初始化一个长度为n的比特串s=000,并将对应的子集输出;l2.for(i=1;i1;l bm=m1;l bm=m1;l product=rmul(halfn,bm)+m;l l return product;llint rmul(int n,int m)/*方法方法2:非递归法非递归法*/l int result=0;l while(n!=0)l l if(n%2=0)m=m1
10、;l elsel l result=result+m;m=m1;l l return result;l第第6章章 动态规划法动态规划法l掌握动态规划法的设计思想l掌握动态规划法在TSP问题和0/1背包问题中的应用。l给出一个TSP或者0/1背包问题的实例,能够写出它的动态规划过程。lP134:实验6动态规划法的设计思想动态规划法的设计思想 动态规划法将待求解问题分解成若干个动态规划法将待求解问题分解成若干个相互重相互重叠叠的子问题,每个子问题对应决策过程的一个的子问题,每个子问题对应决策过程的一个阶段阶段,一般来说,子问题的重叠关系表现在对给定问题求一般来说,子问题的重叠关系表现在对给定问题求
11、解的解的递推关系递推关系(也就是动态规划函数)中,将子问(也就是动态规划函数)中,将子问题的解求解一次并题的解求解一次并填填入入表表中,当需要再次求解此子中,当需要再次求解此子问题时,可以通过查表获得该子问题的解而不用再问题时,可以通过查表获得该子问题的解而不用再次求解,从而避免了大量重复计算。次求解,从而避免了大量重复计算。原问题的解 原问题 填 表子问题1子问题2子问题n动态规划法的求解过程n=5时分治法计算斐波那契数的过程。F(5)F(4)F(3)F(3)F(2)F(2)F(1)F(2)F(1)F(1)F(0)F(1)F(0)F(1)F(0)例:计算斐波那契数:2)2()1(1100)(
12、nnFnFnnnF01234567890112358132134动态规划法求解斐波那契数F(9)的填表过程:注意到,计算F(n)是以计算它的两个重叠子问题 F(n-1)和F(n-2)的形式来表达的,所以,可以设计一张表填入n+1个F(n)的值。TSP问题问题 TSP问题是指旅行家要旅行问题是指旅行家要旅行n个城市,要求各个个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。所走的路程最短。各个城市间的距离可以用代价矩阵来表示。各个城市间的距离可以用代价矩阵来表示。C=3 6 7 5 2 3 6 4 2 3 7 5 带权图的代价
13、矩阵带权图的代价矩阵假设从顶点i出发,令d(i,V)表示从顶点i出发经过V中各个顶点一次且仅一次,最后回到出发点i的最短路径长度,开始时,VVi,于是,TSP问题的动态规划函数为:d(i,V)=mincik+d(k,Vk)(kV)(式6.5)d(k,)=cki(ki)(式6.6)这是最后一个阶段的决策,而:这是最后一个阶段的决策,而:d(1,2,3)=minc12+d(2,3),c13+d(3,2)d(2,1,3)=minc21+d(1,3),c23+d(3,1)d(3,1,2)=minc31+d(1,2),c32+d(2,1)这一阶段的决策又依赖于下面的计算结果:这一阶段的决策又依赖于下面的
14、计算结果:d(1,2)=c12+d(2,)d(2,3)=c23+d(3,)d(3,2)=c32+d(2,)d(1,3)=c13+d(3,)d(2,1)=c21+d(1,)d(3,1)=c31+d(1,)从城市从城市0出发经城市出发经城市1、2、3然后回到城市然后回到城市0的最短路径长度是:的最短路径长度是:d(0,1,2,3)=minc01+d(1,2,3),c02+d(2,1,3),c03+d(3,1,2)而下式可以直接获得(括号中是该决策引起的状态转移):而下式可以直接获得(括号中是该决策引起的状态转移):d(1,)=c10=5(10)d(2,)=c20=6(20)d(3,)=c30=3(
15、30)再向前倒推,有:再向前倒推,有:d(1,2)=c12+d(2,)=2+6=8(12)d(1,3)=c13+d(3,)=3+3=6(13)d(2,3)=c23+d(3,)=2+3=5(23)d(2,1)=c21+d(1,)=4+5=9(21)d(3,1)=c31+d(1,)=7+5=12(31)d(3,2)=c32+d(2,)=5+6=11(32)再向前倒退,有:再向前倒退,有:d(1,2,3)=minc12+d(2,3),c13+d(3,2)=min2+5,3+11=7(12)d(2,1,3)=minc21+d(1,3),c23+d(3,1)=min4+6,2+12=10(21)d(3,
16、1,2)=minc31+d(1,2),c32+d(2,1)=min7+8,5+9=14(32)最后有:最后有:d(0,1,2,3)=minc01+d(1,2,3),c02+d(2,1,3),c03+d(3,1,2)=min3+7,6+10,7+14=10(01)所以,从顶点所以,从顶点0出发的出发的TSP问题的最短路径长度为问题的最短路径长度为10,路径是,路径是01230。算法6.1TSP问题 1for(i=1;in;i+)/初始化第0列 di0=ci0;2for(j=1;j2n-1-1;j+)for(i=1;iV(n-1,C),表明第n个物品被装入背包,前n-1个物品被装入容量为C-wn的
17、背包中;否则,第n个物品没有被装入背包,前n-1个物品被装入容量为C的背包中。依此类推,直到确定第1个物品是否被装入背包中为止。由此,得到如下函数:),1(),(,1),1(),(0jiVjiVwjjjiVjiVxii(式6.13)设n个物品的重量存储在数组wn中,价值存储在数组vn中,背包容量为C,数组Vn+1C+1存放迭代结果,其中Vij表示前i个物品装入容量为j的背包中获得的最大价值,数组xn存储装入背包的物品,动态规划法求解0/1背包问题的算法如下:算法6.30/1背包问题 int KnapSack(int n,int w,int v)for(i=0;i=n;i+)/初始化第0列 Vi
18、0=0;for(j=0;j=C;j+)/初始化第0行 V0j=0;for(i=1;i=n;i+)/计算第i行,进行第i次迭代 for(j=1;j=C;j+)if(j0;i-)if(VijVi-1j)xi=1;j=j-wi;else xi=0;return VnC;/返回背包取得的最大价值第第7章章 贪心法贪心法l掌握贪心法的设计思想l掌握贪心法在TSP问题中的应用l掌握贪心法在背包问题中的应用lP155:实验7贪心法的求解过程贪心法的求解过程 用贪心法求解问题应该考虑如下几个方面:(1)候选集合C:为了构造问题的解决方案,有一个候选集合C作为问题的可能解,即问题的最终解均取自于候选集合C。例如
19、,在付款问题中,各种面值的货币构成候选集合。(2)解集合S:随着贪心选择的进行,解集合S不断扩展,直到构成一个满足问题的完整解。例如,在付款问题中,已付出的货币构成解集合。(3)解决函数solution:检查解集合S是否构成问题的完整解。例如,在付款问题中,解决函数是已付出的货币金额恰好等于应付款。(4)选择函数select:即贪心策略,这是贪心法的关键,它指出哪个候选对象最有希望构成问题的解,选择函数通常和目标函数有关。例如,在付款问题中,贪心策略就是在候选集合中选择面值最大的货币。(5)可行函数feasible:检查解集合中加入一个候选对象是否可行,即解集合扩展后是否满足约束条件。例如,在
20、付款问题中,可行函数是每一步选择的货币和已付出的货币相加不超过应付款。贪心法的一般过程Greedy(C)/C是问题的输入集合即候选集合 S=;/初始解集合为空集 while(not solution(S)/集合S没有构成问题的一个解 x=select(C);/在候选集合C中做贪心选择 if feasible(S,x)/判断集合S中加入x后的解是否可行 S=S+x;C=C-x;return S;TSP问题问题 最近邻点最近邻点策略:从任意城市出发,每次在没策略:从任意城市出发,每次在没有到过的城市中选择最近的一个,直到经过有到过的城市中选择最近的一个,直到经过了所有的城市,最后回到出发城市。了所
21、有的城市,最后回到出发城市。(d)城市城市3城市城市5 (e)城市城市5城市城市2 (f)城市城市2城市城市1 最近邻点贪心策略求解最近邻点贪心策略求解TSP问题的过程问题的过程25221543225221543232522154327363215432233215432C=3 3 2 63 7 3 23 7 2 52 3 2 36 2 5 3 (a)5城市的代价矩阵城市的代价矩阵 (b)城市城市1城市城市4 (c)城市城市4城市城市3背包问题背包问题 给定给定n种物品和一个容量为种物品和一个容量为C的背包,物的背包,物品品i的重量是的重量是wi,其价值为,其价值为vi,背包问题是如何,背包问
22、题是如何选择装入背包的物品,使得装入背包中物品的选择装入背包的物品,使得装入背包中物品的总价值最大总价值最大?于是,背包问题归结为寻找一个满足约束条于是,背包问题归结为寻找一个满足约束条件式件式7.1,并使目标函数式,并使目标函数式7.2达到最大的解向量达到最大的解向量X=(x1,x2,xn)。设设xi表示物品表示物品i装入背包的情况,根据问题的要求,装入背包的情况,根据问题的要求,有如下约束条件和目标函数:有如下约束条件和目标函数:)1(101nixCxwiniii(式(式7.1)niiixv1max(式(式7.2)三种看似合理的贪心策略:(1)选择价值最大的物品,因为这可以尽可能快地增加背
23、包的总价值。但是,虽然每一步选择获得了背包价值的极大增长,但背包容量却可能消耗得太快,使得装入背包的物品个数减少,从而不能保证目标函数达到最大。(2)选择重量最轻的物品,因为这可以装入尽可能多的物品,从而增加背包的总价值。但是,虽然每一步选择使背包的容量消耗得慢了,但背包的价值却没能保证迅速增长,从而不能保证目标函数达到最大。(3)选择单位重量价值最大的物品,在背包价值增长和背包容量消耗两者之间寻找平衡。60 120 50 背包 180 190 200(a)三个物品及背包 (b)贪心策略1 (c)贪心策略2 (d)贪心策略3 50 30 10 20 20 3020/30 20 1010/20
24、30 10例如,有3个物品,其重量分别是20,30,10,价值分别为60,120,50,背包的容量为50,应用三种贪心策略装入背包的物品和获得的价值如图所示。第第8章章 回溯法回溯法l掌握回溯法的设计思想l针对某一特定实例,会写出动态搜索过程,并画出搜索空间树,从而找到最优解l0/1背包问题lTSP问题 对于任何一个问题,可能解的对于任何一个问题,可能解的表示方式表示方式和它相应的和它相应的解释解释隐隐含了解空间及其大小。含了解空间及其大小。例如,对于有例如,对于有n个物品的个物品的0/1背包问题,其可能解的表示方背包问题,其可能解的表示方式可以有以下两种:式可以有以下两种:(1)可能解由一个
25、不等长向量组成,当物品)可能解由一个不等长向量组成,当物品i(1in)装入背包装入背包时,解向量中包含分量时,解向量中包含分量i,否则,解向量中不包含分量,否则,解向量中不包含分量i,当,当n=3时,其解空间是:时,其解空间是:(),(1),(2),(3),(1,2),(1,3),(2,3),(1,2,3)(2)可能解由一个等长向量)可能解由一个等长向量x1,x2,xn组成,其中组成,其中xi=1(1in)表示物品表示物品i装入背包,装入背包,xi=0表示物品表示物品i没有装入背包,没有装入背包,当当n=3时,其解空间是:时,其解空间是:(0,0,0),(0,0,1),(0,1,0),(1,0
展开阅读全文