计算机设计与分析复习.pdf
《计算机设计与分析复习.pdf》由会员分享,可在线阅读,更多相关《计算机设计与分析复习.pdf(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学术菌 QQ363961023 1 计算机计算机算法算法设计与分析设计与分析复习复习 算法:由若干条指令指令组成的有穷序列有穷序列 性质:性质:输入(零个或多个输入)、输出(至少有一个输出)、确定性(语义清晰无歧义)、有限性(每条指令的执行次数是有限的)程序:算法用程序设计语言的具体实现 算法的复杂性:算法复杂性的高低体现在运行该算法所需要的计算机资源的多少上 选用算法时遵循的重要准则:复杂性最低者 算法的复杂性:(1)有上界时,f(N)=O(g(N)(2)有下界时,f(N)=(g(N)(3)同阶时,f(N)=(g(N)递归算法:直接或间接调用自身的算法 分治方法的设计思想:将一个难以直接解决
2、的大问题,分割成一些较小规模的问题,以便各个击破,分而治之。阶乘:Int jiecheng(int n)if(n=0)return 1;Return n*jiecheng(n-1);Fibonacci 数列:Int Fibonacci(int n)if(n=1)return 1;Return Fibonacci(n-1)+Fibonacci(n-2);整数划分:Int q(int n,int m)if(n1)|(m1)return 0;If(n=1)|(m=1)return 1;If(n0)hanoi(n-1,a,c,b);Move(a,b);Hanoi(n-1,c,b,a);QQ374289
3、236学术菌 QQ363961023 2 二分搜索算法分析:将 n 个元素分成大致相同的两半,将 an/2与 x 比较,若大于则在左半部分继续搜索,若小于则在右半部分搜索,若相等就结束。算法设计:Int binarySearch(int n,int x,int a)int left=0,right=n-1;Middle=(left+right)/2;While(leftamiddle)left=middle+1;Else right=middle-1;Retrun-1;棋盘覆盖:合并排序算法分析:将待排序的元素分成大致相等的两个集合,分别对两个子集合进行排序,最后将排好序的子集合合并成所要求的
4、排好序的集合。算法设计:Void mergeSort(int a,int left,int right)if(leftright)Int middle=(left+right)/2;mergeSort(a,left,middle);mergeSort(a,middle+1,right);merge(a,b,left,middle,right);copy(a,b,left,right);Merge(int a,int b,int l,int m,int r)int i=l,j=m+1,k=l;While(i=m)&(j=r)If(cim)For(int q=j,q=r;q+)dk+=cq;els
5、e for(int q=i;q=m;q+)dk+=cq;动态规划算法的基本要素:1.最优子结构性质:原问题的最优解包含着子问题的最优解的性质 2.重叠子问题性质 设计动态规划算法的步骤:(1)找出最优解的性质,并分析其结构(2)递归定义最优值 QQ374289236学术菌 QQ363961023 3 (3)自底向上计算最优值(4)根据最优值的信息构造最优解 设计思想:将待求解的问题分解成若干个子问题,先求子问题,再通过这些子问题的解得到原问题的解。动态规划与分治的不同:适合于用前者求解的问题,经过分解得到的子问题往往不是相互独立的。矩阵连乘问题:(1)分析最优解的结构 计算 A1:n的最优计算
6、次序,设在矩阵 Ak 和 A k+1 之间断开(1kn),则其完全加括号方式为(A1Ak)(Ak+1An)),依此次序计算。(2)建立递归:Mij=0 i=j minmik+mk+1j+pi-1pkpj ikj(3)计算最优解 Void matrixChain(int*p,int n,int*m,int*s)for(int i=1;i=n,i+)mii=0;For(int r=2;r=n;r+)For(int i=1;i=n-r+1;i+)int j=i+r-1;Mij=mi+1j+pi-1*pi*pj;Sij=i;For(int k=i+1;kj;k+)int t=mik+mk+1j+pi-
7、1pkpj;If(tmij)mij=t;sij=k;(4)构造最优解 Void traceback(int i,int j,int*s)if(i=j)return;Traceback(i,sij,s);Traceback(sij+1,j,s);Cout Aisij;Cout Asij+1j;最长公共子序列:(1)分析最长公共子序列的结构 (1)若 Xm=Yn,,则 Zk=Xm=Yn,且 Zk-1 是 Xm-1 和 Yn-1 的最长公共子序列 (2)若 XmYn,且 ZkXm,则 Z 是 Xm-1 和 Y 的最长公共子序列 (3)若 XmYn,且 ZkYn,则 Z 是 Xm 和 Yn-1 的最长
8、公共子序列 QQ374289236学术菌 QQ363961023 4 (2)递归结构 (3)计算最优值 Void LCSLength(int m,int n,int*b,charX,char Y,int*c)int i,j;For(i=1;i=m;i+)ci0=0;For(j=1;j=n;j+)c0j=0;For(i=1;i=m;i+)For(j=1;j=cij-1)cij=ci-1j;bij=2;Else cij=cij-1;bij=3;(4)构造最优解 Void LCS(int i,int j,int*b)if(i=0|j=0)return;If(bij=1)LCS(i-1,j-1,b);
9、print(xi);Else If(bij=2)LCS(i-1;j;b);Else LCS(I,j-1,b);最大字段和 (1)简单算法:QQ374289236学术菌 QQ363961023 5 (看不清书上有)(2)分治算法:(3)动态规划算法:Int Maxsun(int m,int*a)int i,sum=0,b=0;QQ374289236学术菌 QQ363961023 6 For(i=1;i0)b+=ai;Else b=ai;If(bsum)sum=b;Return sum;最优三角剖分:与矩阵连乘类似(略)算法如下:Void Knapsack(type v,int w,int c,i
10、nt n,type*m)int jMax=minwn-1,c;For(j=0;j=jMax;j+)mnj=0;For(j=wn;j1;i-)jmax=minwi-1,c;For(int j=0;j=jMax;j+)mij=mi+1j;For(int j=wi;j=w1)m1c=max(m1c,m2c-w1+v1);Void tracback(type*m,int n,int x,int w,int c)for(int i=1;in,i+)If(mic=mi+1c)xi=0;Else Xi=1;c-=wi;Xn=(mnc)?1:0;书上 80 页还有一个改进的算法 贪心算法:总是作出在当前情况下
11、最好的选择 QQ374289236学术菌 QQ363961023 7 基本要素:(1)最优子结构性质(2)贪心选择性质(整体最优解可以通过贪心选择来达成)活动安排问题:使尽可能多的活动能兼容使用公共资源 Void greedySelector(int n,int s,int f,bool A)int j=1;A1=true;for(int i=2;i=fj)Ai=true;k=i;else Ai=false;(算法的前提是输入的活动是按结束时间非递减序排列的)贪心算法与动态规划的差异:0-1 背包问题(见上面)背包问题(在选择物品装入是可以选择物品的一部分,而不一定要全部装入)Void Kna
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 设计 分析 复习
限制150内