算法基本工具和优化技巧精品文稿.ppt
《算法基本工具和优化技巧精品文稿.ppt》由会员分享,可在线阅读,更多相关《算法基本工具和优化技巧精品文稿.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法基本工具和优化技巧第1页,本讲稿共88页31循环与递归循环与递归32算法与数据结构算法与数据结构33算法优化基本技巧算法优化基本技巧34优化算法的数学模型优化算法的数学模型第2页,本讲稿共88页1.1.循环设计要点循环设计要点2.2.递归设计要点递归设计要点3.3.递归与循环的比较递归与循环的比较3.1循环与递归循环与递归第3页,本讲稿共88页 1设计中要注意算法的效率 2“自顶向下”的设计方法 3由具体到抽象设计循环结构 一、循环设计要点一、循环设计要点第4页,本讲稿共88页 循环体的特点是:循环体的特点是:“以不变应万变以不变应万变”。所谓所谓“不变不变”是指循环体内运算的表现形是指循
2、环体内运算的表现形式是不变的,而每次具体的执行内容却是不尽式是不变的,而每次具体的执行内容却是不尽相同的。在循环体内用不变的运算表现形式去相同的。在循环体内用不变的运算表现形式去描述各种相似的重复运算。描述各种相似的重复运算。1 1循环循环设计设计中要注意算法的效率中要注意算法的效率第5页,本讲稿共88页【例例】求求数学模型数学模型1 1:第6页,本讲稿共88页main()main()int i,n,j,sign=1;int i,n,j,sign=1;float s,t=1;float s,t=1;input(n);input(n);s=1 s=1;for(i=2;i=n;i=i+1)for(
3、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;/求(求(-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(“Sum=Sum=”,s);,s);算法的时间复杂度:算法的时间复杂度:O(n2)效率较低!效率较低!(2n-1)!=(2(n-1)-1)!*(2n-2)*(2n
4、-1)第7页,本讲稿共88页数学模型数学模型2 2:main()main()int i,n,sign;int i,n,sign;float s,t=1;float s,t=1;input(n);input(n);s=1 s=1;sign=1;sign=1;for(i=2;i=n;i=i+1)for(i=2;i=n;i=i+1)sign=-sign;t=t*(2*i-2)*(2*i-1);t=t*(2*i-2)*(2*i-1);s=s+sign/t;s=s+sign/t;print(print(“Sum=Sum=”,s);,s);算法的时间复杂度:算法的时间复杂度:O(n)第8页,本讲稿共88页
5、2 2“自自顶顶向下向下”的的设计设计方法方法 自自顶顶向下的方法是从全局走向局部、从向下的方法是从全局走向局部、从概略概略走向走向详详尽的尽的设设计计方法。自上而下是系方法。自上而下是系统统分解和分解和细细化的化的过过程。程。【例例】一一个个数数如如果果恰恰好好等等于于它它的的因因子子之之和和(包包括括1 1,但但不不包包括括这这个个数数本本身身),这这个个数数称称为为“完完数数”。编编算算法法找找出出10001000以内所有完数。以内所有完数。例例如如,2828的的因因子子为为1 1、2 2、4 4、7 7,1414(每每个个因因数数只只记记一一次次),而而28=1+2+4+7+1428=
6、1+2+4+7+14。因因此此2828是是“完完数数”。输输出出格格式式如下:如下:28 it28 its factors are 1s factors are 1,2 2,4 4,7 7,1414。第9页,本讲稿共88页1)顶层算法 for(i=2;i=1000;i=i+1)判断i是否为“完数”;是“完数”则按格式输出;2)判断i是否为“完数”for(j=2;ji;j=j+1)找i的因子,并累加如果累加值为i,则是“完数”第10页,本讲稿共88页3)进一步细化判断i是否“完数”算法s=1;for(j=2;ji;j=j+1)if(i mod j=0)s=s+j;if(s=i)i是“完数”;第1
7、1页,本讲稿共88页4 4)考虑输出格式)考虑输出格式判断判断i i是否是否“完数完数”算法算法 考考虑虑到到要要按按格格式式输输出出结结果果,应应该该开开辟辟数数组组存存储储数数据据i i的的所所有有因子,并记录其因子的个数,因此算法细化如下:因子,并记录其因子的个数,因此算法细化如下:定义数组a,s=1;k=0;for(j=2;ji;j=j+1)if(i mod j=0)(j是i的因素)s=s+j;ak=j;k=k+1;if(s=i)按格式输出结果 第12页,本讲稿共88页算法如下:算法如下:main()inti,k,j,s,a20;for(i=1;i=1000;i+)s=1;k=0;fo
8、r(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);第13页,本讲稿共88页 对于不太熟悉的问题,其数学模型或“机械化操作步骤”的不易抽象,下面看一个由具体到抽象设计循环细节的例题。【例】编写算法:打印具有下面规律的图形。1 5 2 8 6 3 10 9 7 4 3 3由具体到抽象设计循环结构由具体到抽象设计循环结构第14页,本讲稿共88页main()int i,j,a100100,n,k;input(n);k=1;for(i=0;i=n-1;i=
9、i+1)for(j=0;j=n-i;j=j+1)ai-1+jjai-1+jj=k;k=k+1;for(i=0;i=n-1;i=i+1)print(“换行符”);for(j=0;j=10)while(n=10)ai=n mod 10;ai=n mod 10;i=i+1;i=i+1;n=n10;n=n10;ai=n;ai=n;for(j=i;j=0;j=j-1)for(j=i;j=0;j=j-1)print(n);print(n);循环算法如下:循环算法如下:第21页,本讲稿共88页f4(n)f4(n)if(n10)if(n=n;i-)for(i=1;i=n;i-)for(j=1;j=n;j-)f
10、or(j=1;j=n;j-)for(k=1;k=n;k-)for(k=1;k=n;k-)if(ij)and(jk)if(ij)and(jk)t=t+1;t=t+1;print(total=,t);print(total=,t);时间复杂度时间复杂度O(nO(n3 3)第25页,本讲稿共88页循环算法循环算法2:constitute2()int n=5,r=3,i,j,k,t;t=0;for(i=1;i=n-r+1;i=i+1)for(j=i+1;j=n-r+2;j=j+1)for(k=j+1;k=r-1;i-)s=s+comb(i,r-1);returns;r r层递归,每个算法递层递归,每个
11、算法递归归n-r+1n-r+1次。因此时间复次。因此时间复杂度为杂度为O(n*r)O(n*r)第28页,本讲稿共88页算法分析算法分析n递归的层次是可以控制的,而循环嵌套的递归的层次是可以控制的,而循环嵌套的层次只能是固定的层次只能是固定的第29页,本讲稿共88页递归递归非递归非递归程序可读性程序可读性易易难难代码量大小代码量大小小小大大时间时间长长短短占用空间占用空间大大小小适用范围适用范围广广窄窄设计难度设计难度易易难难递归与非递归的比较:递归与非递归的比较:第30页,本讲稿共88页3.2算法与数据结构算法与数据结构第31页,本讲稿共88页数据的逻辑结构常分为四大类:数据的逻辑结构常分为四
12、大类:(1 1)集合结构)集合结构 (2 2)线性结构)线性结构 (3 3)树形结构)树形结构(4 4)图结构(网结构)图结构(网结构)存储结构可以分为:连续存储和链式存储。连存储结构可以分为:连续存储和链式存储。连续存储又可以分为:静态存储和动态存储续存储又可以分为:静态存储和动态存储 1 1、常用的几种数据结构、常用的几种数据结构第32页,本讲稿共88页顺序存储的优点:顺序存储的优点:(1)方法简单,各种高级语言中都提供数组结构,容易方法简单,各种高级语言中都提供数组结构,容易实现。实现。(2)不用为表示结点间的逻辑关系而增加额外的存不用为表示结点间的逻辑关系而增加额外的存储开销。储开销。
13、(3)顺序表具有按元素序号随机访问的特点。顺序表具有按元素序号随机访问的特点。2 2、连续存储和链式存储比较、连续存储和链式存储比较第33页,本讲稿共88页顺序存储的缺点:顺序存储的缺点:(1)在顺序表中做插入删除操作时,平均移动大在顺序表中做插入删除操作时,平均移动大约表中一半的元素,因此对约表中一半的元素,因此对n较大的顺序表效率低。较大的顺序表效率低。(2)需要预先分配足够大的存储空间,估计过大,需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置;预先分配过小,可能会导致顺序表后部大量闲置;预先分配过小,又会造成溢出。又会造成溢出。温馨提示:温馨提示:链表的优缺点恰好与
14、顺序表相反。链表的优缺点恰好与顺序表相反。第34页,本讲稿共88页3 3、在选取存储结构时权衡因素有:、在选取存储结构时权衡因素有:)基于存储的考虑)基于存储的考虑 顺序表的存储空间是静态分配的,在程顺序表的存储空间是静态分配的,在程序执行之前必须明确规定它的存储规模,也就序执行之前必须明确规定它的存储规模,也就是说事先对是说事先对“MAXSIZEMAXSIZE”要有合适的设定,过要有合适的设定,过大造成浪费,过小造成溢出。可见对线性表的大造成浪费,过小造成溢出。可见对线性表的长度或长度或存储规模存储规模难以估计时,不宜采用顺序表;难以估计时,不宜采用顺序表;链表不用事先估计存储规模,但链表的
15、链表不用事先估计存储规模,但链表的存储密存储密度度较低。较低。第35页,本讲稿共88页)基于运算的考虑)基于运算的考虑 在顺序表中按序号访问在顺序表中按序号访问a ai i的时间性能时的时间性能时O(1)O(1),而,而链表中按序号访问的时间性能链表中按序号访问的时间性能O(n)O(n),所以如果经常做,所以如果经常做的运算是按序号的运算是按序号访问数据元素访问数据元素,显然顺序表优于链表;,显然顺序表优于链表;但对于但对于插入插入、删除删除操作,则后者优于前者。操作,则后者优于前者。)基于环境的考虑)基于环境的考虑 顺序表容易实现,任何高级语言中都有数组类型,顺序表容易实现,任何高级语言中都
16、有数组类型,链表的操作是基于指针的,操作简单。链表的操作是基于指针的,操作简单。第36页,本讲稿共88页一、原始信息与处理结果对应存储一、原始信息与处理结果对应存储 每每一一个个问问题题中中的的信信息息往往往往是是多多方方面面的的,在在算算法法中中一一般般有有输输入入信信息息、输输出出信信息息和和信信息息加加工工处处理理过过程程中中的的中中间间信信息息。那那么么哪哪些些信信息息需需要要用用数数组组进进行行存存储储,数数组组元元素素下下标标与与信信息息怎怎么么样样对对应应等等问问题题的的确确定定,在在很很大大程程度度上上影影响着算法的编写效率和运行效率。响着算法的编写效率和运行效率。第37页,本
17、讲稿共88页【例例】某校决定由全校学生选举学生会主席。有某校决定由全校学生选举学生会主席。有5 5个候选人,个候选人,编号分别为编号分别为1 1,2 2,3 3,4 4,5 5,选举其中一人为学生会主席,每个,选举其中一人为学生会主席,每个学生一张选票,只能填写一人。请编程完成统计选票的工作。学生一张选票,只能填写一人。请编程完成统计选票的工作。第38页,本讲稿共88页算法如下:算法如下:vote()vote()int i,xp,a5=0 int i,xp,a5=0,0 0,0 0,0 0,0;0;input(xp);input(xp);while(xp!=-1)while(xp!=-1)if
18、(xp=1 and xp=1 and xp=5)axp=axp+1;axp=axp+1;else else print(xp,input error!);print(xp,input error!);input(xp);input(xp);for(i=1;i=5;i+)for(i=1;i=5;i+)print(i,number get,ai,votes);print(i,number get,ai,votes);第39页,本讲稿共88页【例例】编程统计身高(单位为厘米)。统计分编程统计身高(单位为厘米)。统计分150150154154;155155159159;160160164164;165
19、165169169;170170174174;175175179179及及低于是低于是150150、高于是、高于是179179共八档次进行。共八档次进行。算法设计:算法设计:第40页,本讲稿共88页算法如下:算法如下:main()main()int i,xp,a8;int i,xp,a8;input(sg);input(sg);while(sg-1)while(sg-1)if(sg179)a7=a7+1 if(sg179)a7=a7+1;else if(sg150)a0=a0+1else if(sg150)a0=a0+1;else aelse asg/5-29sg/5-29=a=asg/5-2
20、9sg/5-29+1+1;input(sg);input(sg);for(i=0;i=7;i=i+1)for(i=0;i=7;i=i+1)print(i+1,“field the number of peopleprint(i+1,“field the number of people:”,ai);,ai);第41页,本讲稿共88页二、数组使信息有序化二、数组使信息有序化 当当题题目目中中的的数数据据缺缺乏乏规规律律时时,很很难难把把重重复复的的工工作作抽抽象象成成循循环环不不变变式式来来完完成成,但但先先用用数数组组结结构构存存储储这这些些地地信信息后,问题就迎刃而解了,息后,问题就迎刃而解
21、了,第42页,本讲稿共88页【例例】编程将编号编程将编号“翻译翻译”成英文。例成英文。例3570635706“翻译翻译”成成three-five-three-five-seven-zero-sixseven-zero-six。main()main()int i,a10,ind;long num1,num2;int i,a10,ind;long num1,num2;char eng106=char eng106=“zero”,”one”,”two”,”three”,”four”,”five”,”six”,”seven”,“eight”,”nine”;input(num1);num2=num1;i
22、nd=0;input(num1);num2=num1;ind=0;while(num20)while(num20)aind=num2 mod 10;aind=num2 mod 10;ind=ind+1;ind=ind+1;num2=num2/10;num2=num2/10;for(i=ind-2;i=0;i=i-1)for(i=ind-2;i=0;i=i-1)print(print(“-”,engai);engai);第43页,本讲稿共88页三、数组记录状态信息三、数组记录状态信息问题提出:问题提出:有有的的问问题题会会限限定定在在现现有有数数据据中中,每每个个数数据据只只能能被被使使用用一一
23、次次,怎怎么么样样表表示示一一个个数数据据“使使用过用过”还是没有还是没有“使用过使用过”?一一个个朴朴素素的的想想法法是是:用用数数组组存存储储已已使使用用过过的的数数据据,然然后后每每处处理理一一个个新新数数据据就就与与前前面面的的数数据据逐逐一一比比较较看看是是否否重重复复。这这样样做做,当当数数据量大时,判断工作的效率就会越来越低。据量大时,判断工作的效率就会越来越低。第44页,本讲稿共88页【例例】求求X X,使,使X X2 2为一个各位数字互不相同的九位数。为一个各位数字互不相同的九位数。总总体体分分析析:只只能能用用枚枚举举法法尝尝试试完完成成此此题题。由由X X2 2为为一一个
24、个九九位位数数,估估算算X X应在应在10000100003200032000之间。之间。第45页,本讲稿共88页main()longlong x,y1,y2;int p10,i,t,k,num=0;for(x=10000;x32000;x=x+1)for(i=0;i=9;i=i+1)pi=1;y1=x*x;y2=y1;k=0;for(i=1;i=9;i=i+1)t=y2 mod 10;y2=y2/10;if(pt=1)k=k+1;pt=0;else break;if(k=9)num=num+1;print(“No.”,num,“:n=”,x,“n2=”,y1);第46页,本讲稿共88页四、大
25、整数的存储及运算四、大整数的存储及运算 计算机存储数据是按类型分配空间的。在微型机上为整计算机存储数据是按类型分配空间的。在微型机上为整型提供型提供2 2个字节个字节1616位的存储空间,则整型数据的范围为位的存储空间,则整型数据的范围为-32768327683276732767;为长整型提供;为长整型提供4 4个字节个字节3232位的存储空间,位的存储空间,则长整型数据的范围为则长整型数据的范围为-2147483648-214748364821474836472147483647;为;为实型也是提供实型也是提供4 4个字节个字节3232位的存储空间,但不是精确存位的存储空间,但不是精确存储数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 基本 工具 优化 技巧 精品 文稿
限制150内