(时间管理)算法的时间复杂度.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(时间管理)算法的时间复 杂度 时间复杂度:如果壹个问题的规模是 n ,解这壹问题的某壹算法所需要的时间为T(n) ,它是 n 的某壹函数,T(n)称为这壹算法的“时间复杂度”。 渐近时间复杂度:当输入量n 逐渐加大时,时间复杂性的极限情形 为算法的 “渐近时间复杂度”。 当我们评价壹个算法的时间性能时,主要标准就是算法的渐近时间复 杂度,因此,于算法分析时,往往对俩者不予区分,经常是将渐近时 间复杂度T(n)=O(f(n))简称为时间复杂度,其中的f(n)壹般是算法 中频度最大的语句频度。 此外,算法中语句的频度不仅和问题规模有关,仍和输入实例中各元 素的取值关联。可是我们总是考虑于最坏的情况下的时间复杂度。以 保证算法的运行时间不会比它更长。 常见的时间复杂度,按数量级递增排列依次为:常数阶O(1) 、对数阶 O(log2n) 、线性阶O(n) 、线性对数阶O(nlog2n) 、平方阶O(n^2) 、立 方阶 O(n^3) 、k 次方阶 O(n^k) 、指数阶O(2^n) 。 下面我们通过例子加以说明,让大家碰到问题时知道如何去解决。 1 、 设 三 个 函 数 f,g,h 分 别 为 f(n)=100n^3+n^2+1000,g(n)=25n^3+5000n^2,h(n)=n^1.5+5000nlgn 请判断下列关系是否成立: (1)f(n)=O(g(n)) (2)g(n)=O(f(n)) (3)h(n)=O(n^1.5) (4)h(n)=O(nlgn) 这里我们复习壹下渐近时间复杂度的表示法 T(n)=O(f(n)) ,这里的 "O"是数学符号,它的严格定义是"若 T(n)和 f(n)是定义于正整数集 合上的俩个函数,则 T(n)=O(f(n))表示存于正的常数 C 和 n0,使得当 n ≥n0 时均满足 0 ≤T(n) ≤C?f(n) 。"用容易理解的话说就是这俩个函 数当整型自变量 n 趋向于无穷大时,俩者的比值是壹个不等于 0 的常 数。这么壹来,就好计算了吧。 ◆(1)成立。题中由于俩个函数的最高次项均是 n^3,因此当n→∞时, 俩个函数的比值是壹个常数,所以这个关系式是成立的。 ◆(2)成立。和上同理。 ◆(3)成立。和上同理。 ◆(4)不成立。由于当n→∞时 n^1.5 比nlgn 递增的快,所以 h(n) 和 nlgn 的比值不是常数,故不成立。 2 、设n 为正整数,利用大"O"记号,将下列程序段的执行时间表示为 n 的函数。 (1)i=1;k=0 while(i<n) {k=k+10*i;i++; } 解答:T(n)=n-1 ,T(n)=O(n) ,这个函数是按线性阶递增的。 (2)x=n;//n>1 while(x>=(y+1)*(y+1)) y++; 解答:T(n)=n1/2 ,T(n)=O(n1/2) ,最坏的情况是y=0 ,那么循环的次 数是 n1/2 次,这是壹个按平方根阶递增的函数。 (3)x=91;y=100; while(y>0) if(x>100) {x=x-10;y--;} elsex++; 解答:T(n)=O(1) ,这个程序见起来有点吓人,总共循环运行了1000 次,可是我们见到 n 没有?没。这段程序的运行是和n 无关的,就算 它再循环壹万年,我们也不管他,只是壹个常数阶的函数。 O(1) Temp=i;i=j;j=temp; 之上三条单个语句的频度均为 1 ,该程序段的执行时间是壹个和问题 规模 n 无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1) 。 如果算法的执行时间不随着问题规模 n 的增加而增长,即使算法中有 上千条语句,其执行时间也不过是壹个较大的常数。此类算法的时间 复杂度是O(1) 。 O(n^2) 2.1.交换 i 和 j 的内容 sum=0 ;(壹次) for(i=1;i<=n;i++) (n 次) for(j=1;j<=n;j++) (n^2 次) sum++ ;(n^2 次) 解:T(n)=2n^2+n+1=O(n^2) 2.2. for(i=1;i<n;i++) { y=y+1;① for(j=0;j<=(2*n);j++) x++;② } 解:语句 1 的频度是n-1 语句 2 的频度是(n-1)*(2n+1)=2n^2-n-1 f(n)=2n^2-n-1+(n-1)=2n^2-2 该程序的时间复杂度 T(n)

文档评论(0)

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

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

1亿VIP精品文档

相关文档