- 1、本文档共42页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
算法设计例子:选择排序问题:递增排序解决方案:逐个选择最小数据算法框架:
for(inti=0;in-1;i++){//n-1趟 从a[i]检查到a[n-1];
若最小整数在a[k],交换a[i]与a[k];}细化:SelectSort第30页,共42页,星期六,2024年,5月voidselectSort(inta[],intn){//对n个整数a[0],a[1],…,a[n-1]按递增顺序排序for(inti=0;in-1;i++){ intk=i;for(intj=i+1;jn;j++) if(a[j]a[k])k=j;//从a[i]查到a[n-1],找最小整数,在a[k] inttemp=a[i];a[i]=a[k];a[k]=temp;}} 第31页,共42页,星期六,2024年,5月性能分析与度量算法的性能标准正确性可读性健壮性效率(时间、空间)第32页,共42页,星期六,2024年,5月算法的事后统计(后期测试)在算法中的某些部位插装时间函数time(), 测定算法完成某一功能所花费时间doublestart,stop;time(start); intk=seqsearch(a,n,x);time(stop); doublerunTime=stop-start;printf(”%d%d\n,n,runTime);第33页,共42页,星期六,2024年,5月intseqsearch(inta[],intn,intx){//在a[0],…,a[n-1]中搜索xinti=0;while(ina[i]!=x)i++;if(i==n)return-1;returni;} 第34页,共42页,星期六,2024年,5月算法的事前估计时间复杂度度量运行时间=算法中每条语句执行时间之和。每条语句执行时间=该语句的执行次数(频度)*语句执行一次所需时间。语句执行一次所需时间取决于机器的指令性能和速度和编译所产生的代码质量,很难确定。设每条语句执行一次所需时间为单位时间,则一个算法的运行时间就是该算法中所有语句的频度之和。第35页,共42页,星期六,2024年,5月举例1矩阵相乘算法for(i=1;i=n;++i)//n+1for(j=1;j=n;++j){//n(n+1)c[i][j]=0;//n2for(k=1;k=n;++k)//n2(n+1)c[i][j]+=a[i][k]*b[k][j];//n3}则算法执行时间T(n)为所有语句的频度之和。T(n)=n+1+n(n+1)+…+n3=2n3+3n2+2n+1第36页,共42页,星期六,2024年,5月渐进时间复杂度引入“O”记号,以体现随问题规模n的增长率。T(n)=n+1+n(n+1)+…+n3=2n3+3n2+2n+1=O(n3),其中n3为增长最快的项。最坏时间复杂度vs.平均时间复杂度有时算法基本操作重复执行次数还随问题的输入数据集不同而不同(如一些排序算法)。这时可分析最坏时间复杂度(最坏情况下的时间复杂度)和平均时间复杂度(平均情况下的时间复杂度)第37页,共42页,星期六,2024年,5月估计算法时间的通常做法:根据问题(或算法类型),从算法中选取一种原操作(指固有数据类型的操作)作为基本操作。其重复执行次数应与算法执行时间成正比;一般为最深层循环内的语句中的原操作;用该基本操作重复执行的次数作为算法的时间度量。即统计包含该操作的所有语句的频度之和。如:上例中选取乘法为基本操作;算法
文档评论(0)