计算机操作系统第三章精选文档.ppt





《计算机操作系统第三章精选文档.ppt》由会员分享,可在线阅读,更多相关《计算机操作系统第三章精选文档.ppt(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机操作系统第三章本讲稿第一页,共五十四页第三章第三章算法算法基本工具和优化技巧基本工具和优化技巧利用算法的利用算法的基本机制基本机制循环和递归设计循环和递归设计算法算法利用算法的利用算法的基本操作基本操作提高算法效率的技巧提高算法效率的技巧利用数组提高算法质量利用数组提高算法质量建立高效的数学模型建立高效的数学模型31循环与递归循环与递归33算法优化基本技巧算法优化基本技巧32算法与数据结构算法与数据结构34优化算法的数学模型优化算法的数学模型本讲稿第二页,共五十四页311循环设计要点循环设计要点312 递归设计要点递归设计要点313递归与循环的比较递归与循环的比较31 循环与循环与递归递
2、归本讲稿第三页,共五十四页311 循环设计要点循环设计要点 1 1设计设计中要注意算法的效率中要注意算法的效率 2 2“自自顶顶向下向下”的的设计设计方法方法 3 3由具体到抽象设计循环结构由具体到抽象设计循环结构 本讲稿第四页,共五十四页 循环体的特点是:循环体的特点是:“以不变应万变以不变应万变”。所谓所谓“不变不变”是指循环体内运算的表现形式是指循环体内运算的表现形式是不变的,而每次具体的执行内容却是不尽相同是不变的,而每次具体的执行内容却是不尽相同的。在循环体内用不变的运算表现形式去描述各的。在循环体内用不变的运算表现形式去描述各种相似的重复运算。种相似的重复运算。1 1循环循环设计设
3、计中要注意算法的效率中要注意算法的效率本讲稿第五页,共五十四页【例例1 1】求求1/1!-1/3!+1/5!-1/7!+1/1!-1/3!+1/5!-1/7!+(-1-1)n+1/(2n-n+1/(2n-1)!1)!分析:此问题中既有累加又有累乘,准确地说累加的对象分析:此问题中既有累加又有累乘,准确地说累加的对象是累乘的结果。是累乘的结果。数学模型数学模型1 1:Sn=Sn-1+Sn=Sn-1+(-1-1)n+1n+1/(2n-1)!/(2n-1)!算法设计算法设计1 1:多数初学者会直接利用题目中累加项通式,:多数初学者会直接利用题目中累加项通式,构造出循环体不变式为:构造出循环体不变式为
4、:S=S+S=S+(-1-1)n+1/(2n-1)!n+1/(2n-1)!需要用二重循环来完成算法,算法需要用二重循环来完成算法,算法1 1如下:如下:本讲稿第六页,共五十四页算法如下:算法如下:求(求(-1-1)n+1 for(j=1;j=i+1;j=j+1)for(j=1;j=i+1;j=j+1)sign=sign*(-1);sign=sign*(-1);s=s+sign/t;s=s+sign/t;print(print(“Snm=Snm=”,s);,s);main()main()int i,n,j,sign=1;int i,n,j,sign=1;float s,t=1;float s,t
5、=1;input(n);input(n);s=1s=1;for(i=2;i=n;i=i+1)for(i=2;i=n;i=i+1)t=1;t=1;求求阶阶乘乘 for(j=1;j=2*i-1;j=j+1)for(j=1;j=2*i-1;j=j+1)t=t*j;t=t*j;sign=1;sign=1;本讲稿第七页,共五十四页算法分析算法分析:以上算法是以上算法是二重循环二重循环来完成来完成 ,但算法,但算法的效率却太低是的效率却太低是O(n2)。其其原原因因是是,当当前前一一次次循循环环已已求求出出7 7!,当当这这次次要要想想求求9 9!时时,没没必必要要再再从从1 1去去累累乘乘到到9 9,只
6、只需需要要充充分分利利用用前前一一次次的的结结果果,用用7 7!*8*98*9即即可可得得到到9 9!,模模型型为为A An n=A=An-1n-1*1/(2*n-*1/(2*n-2)*(2*n-1)2)*(2*n-1)。另另外外运运算算sign sign=sign sign*(-1);*(-1);总总共共也也要要进进行行n*(n-1)/2n*(n-1)/2次次乘乘法法,这这也也是是没没有有必必要要的的。下下面面我我们们就就进进行改进。行改进。本讲稿第八页,共五十四页数学模型数学模型2 2:S Sn n=S=Sn-1n-1+(-1-1)n+1n+1A An n;A An n=A=An-1 n-
7、1*1/(2*n-2)*(2*n-1)*1/(2*n-2)*(2*n-1)main()main()int i,n,sign;int i,n,sign;float s,t=1;float s,t=1;input(n);input(n);s=1s=1;sign=1;sign=1;for(i=2;i=n;i=i+1)for(i=2;i=n;i=i+1)或或 for(i=1;i=n-1;i=i+1)for(i=1;i=n-1;i=i+1)sign=-sign;sign=-sign;t=t*(2*i-2)*(2*i-1);t=t*2*i*(2*i+1);t=t*(2*i-2)*(2*i-1);t=t*2
8、*i*(2*i+1);s=s+sign/t;s=s+sign/t;s=s+sign/t;s=s+sign/t;print(print(“Sum=Sum=”,s);,s);本讲稿第九页,共五十四页算法说明算法说明2 2:构造循构造循环环不不变变式式时时,一定要注意循,一定要注意循环变环变量的意量的意义义,如当,如当i i不是不是项项数序号数序号时时(右(右边边的循的循环环中)有关中)有关t t的的累乘累乘式与式与i i是是项项数序号数序号时时就就不能相同。不能相同。算法分析:算法分析:按照数学模型按照数学模型2 2,只需,只需一重循环一重循环就能解决问题就能解决问题算法的算法的时间时间复复杂杂性
9、性为为O O(n n)。本讲稿第十页,共五十四页2 2“自自顶顶向下向下”的的设计设计方法方法 自自顶顶向下的方法是从全局走向局部、从向下的方法是从全局走向局部、从概略概略走向走向详详尽的尽的设设计计方法。自上而下是系方法。自上而下是系统统分解和分解和细细化的化的过过程。程。【例例2 2】编算法找出编算法找出10001000以内所有完数以内所有完数例例如如,2828的的因因子子为为1 1、2 2、4 4、7 7,1414,而而28=1+2+4+7+1428=1+2+4+7+14。因因此此2828是是“完完数数”。编编算算法法找找出出10001000之之内内的的所所有有完完数数,并并按按下下面面
10、格格式式输输出出其其因因子子:28 28 itits s factors factors are are 1 1,2 2,4 4,7 7,1414。本讲稿第十一页,共五十四页1 1)这这里里不不是是要要质质因因数数,所所以以找找到到因因数数后后也也无无需需将将其其从从数数据据中中“除掉除掉”。2 2)每每个个因因数数只只记记一一次次,如如8 8的的因因数数为为1 1,2 2,4 4而而不不是是1 1,2 2,2 2,2 2,4 4。(注:本题限定因数不包括这个数本身)(注:本题限定因数不包括这个数本身)本讲稿第十二页,共五十四页1)顶层算法 for(i=0;in;i=i+1)找第i行上最小的元
11、素t及所在列minj;检验t是否第minj 列的最大值,是则输出这个鞍点;2)找第i行上最小的元素t及所在列minj t=ai0;minj=1;for(j=1;jn;j=j+1)if(aijt)t=aij;minj=j;本讲稿第十三页,共五十四页3)进一步细化判断i是否“完数”算法s=1for(j=2;ji;j=j+1)if(i mod j=0)(j是i的因素)s=s+j;if (s=i)i是“完数”;本讲稿第十四页,共五十四页4 4)考虑输出格式)考虑输出格式判断判断i i是否是否“完数完数”算法算法 考考虑虑到到要要按按格格式式输输出出结结果果,应应该该开开辟辟数数组组存存储储数数据据i
12、i的的所有因子,并记录其因子的个数,因此算法细化如下:所有因子,并记录其因子的个数,因此算法细化如下:定义数组定义数组a,s=1;k=0;for(j=2;ji;j=j+1)j=2;ji;j=j+1)if(i mod j=0)(j if(i mod j=0)(j是是i i的因素的因素)s=s+j;ak=j;k=k+1;s=s+j;ak=j;k=k+1;if if (s=is=i)按格式输出结果按格式输出结果 本讲稿第十五页,共五十四页算法如下:算法如下:main()inti,k,j,s,a20;for(i=1;i=1000;i+)s=1;/*两个赋初值语句两个赋初值语句s=1,k=0k=0;一定
13、要位于外部循环的内部一定要位于外部循环的内部*/for(j=2;ji;j+)if(imodj)=0)s=s+j;ak=j;k+;if(i=s)print(s,“itsfactorsare:”,1);for(j=0;ik;j+)print(“,”,ak);本讲稿第十六页,共五十四页【例例3 3】求一个矩阵的鞍点求一个矩阵的鞍点 (即在行上最小而在列上最大的点即在行上最小而在列上最大的点)。算法设计算法设计:1 1)在第一行找最小值,并记录其列号。在第一行找最小值,并记录其列号。2 2)然后验证其是否为所在列的最大值,如果是,则找然后验证其是否为所在列的最大值,如果是,则找到问题的解;否则,则继续
14、在下一行找最小值到问题的解;否则,则继续在下一行找最小值 。本讲稿第十七页,共五十四页for(i=0;in;i=i+1)找第i行上最小的元素t及所在列minj;检验t是否第minj 列的最大值,是则输出这个鞍点;t=ai0;minj=1;for(j=1;jn;j=j+1)if(aijt)t=aij;minj=j;1)顶层算法 2)找第i行上最小的元素t及所在列minj 本讲稿第十八页,共五十四页3)检验t是否第minj 列的最大值,是,则输出这个鞍点;for(k=0;kt)break;if(kn)continue;print(“the result is a“,i,“”,minj,“=”,t)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 操作系统 第三 精选 文档

限制150内