网站大量收购独家精品文档,联系QQ:2885784924

chapter 4 算法的度量.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法算法的度量及分析经典算法算法度量及分析衡量算法的有效性一个是时间效率即算法处理数据时所花费的时间用时间复杂度来表示一个是空间效率即算法所需求的存储量的大小用空间复杂度来表示时间复杂度分析事后统计法编制一个程序实现这个算法然后输入不同的数据运行这个程序测定该程序运行的时间事前分析法不上机运行依算法编制的程序而是分析影响算法执行时间的各种因素从而估算出算法执行的时间一般用算法中语句被执行的次数来表示算法的时间效率算法的时间复杂度例求的算法分析算法的时间复杂度解语句被执行了次语句被执行了次语句被执

算法 算法的度量及分析 经典算法 * 算法度量及分析 衡量算法的有效性: 一个是时间效率,即算法处理数据时所花费的时间,用时间复杂度来表示; 一个是空间效率,即算法所需求的存储量的大小,用空间复杂度来表示。 1.时间复杂度分析 事后统计法:编制一个程序实现这个算法,然后输入不同的数据运行这个程序,测定该程序运行的时间。 事前分析法:不上机运行依算法编制的程序,而是分析影响算法执行时间的各种因素,从而估算出算法执行的时间。 * 一般用算法中语句被执行的次数来表示算法的时间效率(算法的时间复杂度)。 【例】求1+2+3+…+n的算法,分析算法的时间复杂度 int Sum(int n){ (1) int i,sum=0; (2) for(i=0;in;i++) (3) sum=sum+i; (4) return sum; } 解:语句1被执行了1次,语句2被执行了2n+2次,语句3被执行了n次,语句4被执行了1次。因此,该算法执行的时间复杂度为: T(n)=3n+4,且T(n)是n数量级的。 * 【例】求1+2+3+…+n的另一个算法,试分析算法的时间复杂度。 int Sum2(int n){ (1) int sum=0; (2) sum=(1+n)*n/2; (3) return sum;} 解: 语句1被执行了1次,语句2被执行了1次,语句3被执行了1次。因此,该算法执行的时间复杂度为: T(n)=3 且T(n)是常量级的。 * 渐进时间复杂度:忽略一些次要语句的执行次数,只对那些重要的语句(有人称为原操作)和执行最频繁的语句进行计数,同时对计算结果中的次要项也予以忽略,只保留主要项,给出数量级。 渐近时间复杂度通常用“O”表示法来表示。 其中“O”表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,或者说,用“O”符号表示数量级的概念。 如果一个算法没有循环语句,则算法中基本操作的执行频度与问题规模n无关,记作O(1),也称为常数阶。 如果算法只有一个一重循环,则算法的基本操作的执行频度与问题规模n呈线性增大关系,记作O(n),也叫线性阶。常用的还有平方阶O(n2)、立方阶O(n3)、对数阶O(log2n)等。 * 在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同,但时间复杂度相同,都为O(n2)。 按数量级递增排列,常见的时间复杂度有: 常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3),...,k次方阶O(nk),指数阶O(2n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。 * * 常见的时间复杂度 (1)常量阶 算法的时间复杂度为常量,它不随问题规模n的大小而改变。记为T(n)=O(1)。 【例】求以下算法的时间复杂度。 void print() { int x=30; x++; printf(%d,x); } (1)线性阶 【例】 分析以下程序的时间复杂度。 x=n; /*n1*/ y=0; while(y x) { y=y+1; ① } 解:这是一重循环的程序,while循环的循环次数为n,所以,该程序段中语句①的频度是n,则程序段的时间复杂度是T(n)=O(n)。 (3)平方阶 【例】 分析以下程序的时间复杂度。 for(i=1;in;++i) { for(j=0;jn;++j) { A[i][j]=i*j; ① } } 解:这是二重循环的程序,外层for循环的循环次数是n,内层for循环的循环次数为n,所以,该程序段中语句①的频度为n*n,则程序段的时间复杂度为T(n)=O(n2)。 (4)对数阶 【例】 分析以下程序的时间复杂度。 x=n; /*n1*/ y=1; while(yx) { y=y*2; ① } 解:这是一重循环的程序,while循环的循环次数为log2n ,所以,该程序段中语句①的频度是log2n ,则程序段的时间复杂度是T(n)=O(log2n)。 (5)立方阶 【例】 分析以下程序的时间复杂度。 for(i=0;in;i++) { for(j=0;jn;j++) { for(k=0;kn;k++) { c[i][j]=c[i][j]+a[i][k]*b[k][

您可能关注的文档

文档评论(0)

wangsux + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档