- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)
1亿VIP精品文档
相关文档
最近下载
- 2024届高三九省联考化学:安徽省联考2024届高三新高考适应性测试化学试卷(含答案).doc VIP
- 《第1课 身边的算法》课件.pptx VIP
- 最新方案-一等奖-西南公司-岷江特大桥主墩深基坑咬合桩围堰专项施工方案.docx
- 腐蚀与防护教学PPT课件.ppt
- 人教部编版六年级数学下册《第6单元整理和复习5.综合与实践【全套】》精品PPT优质课件.pptx
- 集团经营管理问题和不规范行为处理实施细则.doc
- 《浮华与苍凉》川岛芳子胞弟披露家族史.doc
- 人际交往中,隐忍VS坦率更能消除矛盾辩论赛 正方辩词一辩、二辩、三辩、四辩发言稿.docx
- 智力与创造力.ppt
- 2023年贵州中山大学附属第一医院贵州医院招考聘用42人考试历年常考点(融合难、易错点)含答案详解.docx
文档评论(0)