版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
时间复杂度分析算法时间复杂度的数学意义
从数学上定义,给定算法A,如果存在函数f(n),当n=k时,f(k)表示算法A在输入规模为k的情况下的运行时间,则称f(n)为算法A的时间复杂度。其中:输入规模是指算法A所接受输入的自然独立体的大小,我们总是假设算法的输入规模是用大于零的整数表示的,即n=1,2,3,……,k,……对于同一个算法,每次执行的时间不仅取决于输入规模,还取决于输入的特性和具体的硬件环境在某次执行时的状态。所以想要得到一个统一精确的F(n)是不可能的。为此,通常做法:
1.忽略硬件及环境因素,假设每次执行时硬件条件和环境条件是完全一致的。
2.对于输入特性的差异,我们将从数学上进行精确分析并带入函数解析式。
例子:x=1;
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=1;k<=j;k++)
x++;
x++运行次数:
算法的渐近时间复杂度
很多时候,我们不需要进行如此精确的分析,究其原因:
1.在较复杂的算法中,进行精确分析是非常复杂的。
2.实际上,大多数时候我们并不关心F(n)的精确度量,而只是关心其量级。算法复杂度的考察方法(1)考察一个算法的复杂度,一般考察的是当问题复杂度n的增加时,运算所需时间、空间代价f(n)的上下界。(2)进一步而言,又分为最好情况、平均情况、最坏情况三种情况。通常最坏情况往往是我们最关注的。(1)上界函数定义1如果存在两个正常数c和n0,对于所有的n≥n0,有|T(n)|≤c|f(n)|则记作T(n)=Ο(f(n))含义:如果算法用n值不变的同一类数据在某台机器上运行时,所用的时间总是小于|f(n)|的一个常数倍。所以f(n)是计算时间T(n)的一个上界函数。试图求出最小的f(n),使得T(n)=Ο(f(n))。
在分析算法的时间复杂度时,我们更关心最坏情况而不是最好情况,理由如下:(1)最坏情况给出了算法执行时间的上界,我们可以确信,无论给什么输入,算法的执行时间都不会超过这个上界,这样为比较和分析提供了便利。(2)虽然最坏情况是一种悲观估计,但是对于很多问题,平均情况和最坏情况的时间复杂度差不多,比如插入排序这个例子,平均情况和最坏情况的时间复杂度都是输入长度n的二次函数。定义1.2如果存在两个正常数c和n0,对于所有的n≥n0,有|T(n)|≥c|g(n)|则记作T(n)=Ω(g(n))含义:如果算法用n值不变的同一类数据在某台机器上运行时,所用的时间总是不小于|g(n)|的一个常数倍。所以g(n)是计算时间T(n)的一个下界函数。试图求出“最大”的g(n),使得T(n)=Ω(g(n))。(2)下界函数定义1.3如如果存在在正常数c1,c2和n0,对于所有的的n≥n0,有c1|g(n)|≤|T(n)|≤≤c2|g(n)|则记作含义:算法在最好和和最坏情况下下的计算时间间就一个常数数因子范围内内而言是相同同的。可看作作:既有T(n)=Ω(g(n)),又有T(n)=Ο(g(n))(3)“平均情况””限界函数常见算法时间间复杂度:O(1):表表示算法的的运行时间为为常量
O(n):表表示该算法是是线性算法O(㏒2n):二分分搜索算法O(n㏒2n):快速速排序算法O(n2):对数组组进行排序的的各种简单算算法,例如直直接插入排序序的算法。O(n3):做两个个n阶矩阵的的乘法运算O(2n):求具有有n个元素集集合的所有子子集的算法O(n!):求具有有N个元素的的全排列的算算法优<---------------------------<劣劣O(1)<O(㏒2n)<O(n)<O(n㏒2n):<O(n2)<O(2n)典型的计算时时间函数曲线线计算算法时间间复杂度过程程:(1)确定基基本操作(2)构造基基于基本操作作的函数解析析式(3)求解函函数解析式如果构建的是是递推关系式式,那么常用用的求解方法法有:(1)前向替替换法可以从初始条条件给出的序序列初始项开开始,使用递递推方程生成成序列的前面面若干项,寄寄希望于从中中找出一个能能够用闭合公公式表示的模模式。如果找找到了这样的的公式,我们们可以用两种种方法对它进进行验证:第第一,将它直直接代入递归归方程和初始始条件中。第第二,用数学学归纳法来证证明。例如,考虑如如下递推式::X(n)=2X(n-1)+1n>1X(1)=1x(1)=1x(2)=2x(1)+1=2*1+1=3x(3)=2x(2)+1=2*3+1=7x(4)=2x(3)+1=2*7+1=15X(n)=2^n-1n>0(2)反向替替换法例如:X(n)=x(n-1)+n使用所讨论的的递推关系,,将x(n-1)表示为为x(n-2)得函数,,然后把这个个结果代入原原始方程,来来把x(n)表示为x(n-2)的的函数。重复复这一过程。。X(n)=x(0)+1+2+3+4+5…+n=0+1+2+3=4=n(n+1)/2(3)换名上面形式的在在递推关系式式,一个规模模为n的问题题,每一次递递归调用后,,都简化为n/k规模的的问题,为了了方便求解,,我们通常设设定:n=km,则,上面的求求解过程可简简化为:f(n)=f(km-1)+b=f(km-2)+2b=…=f(k0)+mb=f(1)+blogn几种常见复杂杂度举例:O(logn)我们学过的算算法,二分搜搜索intBinSrch(TypeA[],inti,intn,Typex)//A[i..n]是非非递减排列且且1<=i<=n;{if(n==i){if(x==A[i])returni;elsereturn0;}else{intmid=(i+n)/2;if(x==A[mid])returnmid;----基本操作elseif(x<A[mid])returnBinSrh(A,i,mid-1,x);———递归调用elseif(x>A[mid])returnBinSrh(A,mid+1,n,x);———递归调用}}递归关系式::因为规模每一一次递归调用用后,缩减为为原来的1/2,所以采采用换名方法法求解,设n=2k:C(n)=C(2k)=C(2k-1)+1=C(2k-2)+2=…=C(2k-k)+k=C(1)+k=logn+139172134576984921039172157698492103172157699210691021观察递归调用用的过程以及及递推关系式式:(1)在递归归关系式中::递归调用共共有k次,我我们设n=2k,k=logn(2)递归调调用的二叉树树型结构中,,调用次数为为二叉树的深深度。2.O(n):表表示该算法法是线性算法法目目前所学学的算法中有有:线性选择择算法intSelect(intdata[],intp,intr,intk){if(p>r)return-1;//p不能大大于rif(p==r)returndata[p];//p<rints=partion(data,p,r);--------基本操作if(s==k)returndata[s];elseif(s>k){intr1=Select(data,p,s-1,k);-----递归调用returnr1;}else//s<k{intr1=Select(data,s+1,r,k-s);-----递归调用returnr1;}}如果递归调用用,每次规模模是原来的1/2:因为每一次规规模都减到原原来的1/2,所以用换换名的方法设设n=2k:T(n)=T(n/2)+(n-1)=T(2k-1)+(2k-1)=[T(2k-2)+(2k-1-1)]+(2k-1)=…=[T(2k-k)+(21-1)]+…+(2k-1-1)+(2k-1)=T(1)+[(2k+1-2)-k]=2n-logn-1算法时间复杂杂度:O(n)分析:算法的复杂度度有两部分决决定:递归和和合并,递归归的复杂度是是:logn,合并的复复杂度是n。3.O(nlogn)所学过的算法法:快速排序序、堆排序等等,分治法中中的平面中最最接近点对问问题。递推关系式::T(n)=2T(n/2)+n设设n=2k=2T(2k-1)+2k=2[2T(2k-2)+2k-1]+2k=22T(2k-2)+2*2k=…=2k-1T(2k-(k-1))+(k-1)*2k=n/2+(logn-1)*n不失一般性,,设规模为n的问题,每每一次有分解解为m个子问问题,设n=mk,则:T(n)=mT(n/m)+n=mT(mk-1)+mk=m[mT(mk-2)+mk-1]+mk=m2T(mk-2)+2*mk=…=mkT(2k-k)+k*mk=n+logn*n算法时间复杂杂度:O(nlogn)分析:算法的复杂度度有两部分决决定:递归和和合并,递归归的复杂度是是:n,合并并的复杂度是是nlogn。4.O(n2)通常的两层嵌嵌套循环,内内层的运算执执行次数,学学过的例子有有:比赛日程程T(n)=T(n/m)+(n/m)2设n=mk=T(mk-1)+m2(k-1)=[T(mk-2)+m2(k-2)]+m2(k-1)=…=[T(mk-k)+m0]+…+m2(k-2)+m2(k-1)=1+(m2k-1)/(m2-1)=(n2-1)/(m2-1)+1所以:O(n2)4.O(nk)所学过的:大大整数乘法Recursive_Miltiply(x,y){ifn=1if(X=1)and(Y=1)return(1)elsereturn(0)x1=X的左边n/2位;x0=X的右边n/2位;y1=Y的左边n/2位;y0=Y的右边n/2位;p=Recursive_Miltiply(x1+x0,y1+y0);——递归调用x1y1=Recursive_Miltiply(x1,y1);——递归调用x0y0=Recursive_Miltiply(x0,y0);——递归调用returnx1y1*2n+(p-x1y1-x0y0)*2n/2+x0y0;——基本操作}设,n=2k,用反向替替换法对它求求解:分析:在这个递推关关系式中,算算法每次递归归调用3个规规模为1/2的子问题,,那么总的规规模3/2,,大小,所以以,粗略估算算要在O(nlogn)、O(n2)之间。相关习题求下列函数的的渐进表达式式:3n2+10nn2/10+2n21+1/nlogn310log3n=O(n2)=O(2n)=O(1)=O(logn)=O(n)2.讨论O(1)和O(2)区别::定义1如如果存在两个个正常数c和和n0,对于于所有的n≥≥n0,有|f(n)|≤c|g(n)|则记作f(n)=Ο(g(n))O(1)=O(2)相差的只只是常数因子子3.算法效率率(1)假设某算法在在输入规模为为n时的计算算时间为T(n)=3*2n。在某台计算算机上实现并并完成该算法法的时间为t。现在有另另一台计算机机,其运行速速度为第一台台的64倍,,那么在这台台新机器上用用同一算法在在t秒内能解解输入规模为为多大的问题题?设新机器用统统一算法能解解输入规模为为n1的问题题,则:t=3*2n1/64=3*2n1-6所以,n1=n+6(2)若上上述的算法改改为T(n)=n2,其他条件不不变,则在新新机器上用t秒时间能解解输入规模为为多大的问题题?n12=64n2=(8n)2能解规模为8n的问题(3)若上上述的算法改改为T(n)=8,其他他条件不变,,则在新机器器上用t秒时时间能解输入入规模为多大大的问题?由于T(n)是常数,所所以可以解任任意规模的问问题。4.对于下下列各组函数数f(n)g(n),,确定f(n)=O(g(n),或或f(n)=(g(n),或f(n)=(g(n))f(n)=logn2g(n)=logn+5f(n)=logn2g(n)=f(n)=ng(n)=log2nf(n)=nlogng(n)=log(n)f(n)=10g(n)=log10f(n)=log2ng(n)=lognf(n)=2ng(n)=100n2f(n)=2ng(n)=3n5.螺钉和螺螺母问题假设我们有n个直径各不不相同的螺钉钉,以及n个个相应的螺母母。我们一次次只能比较一一对螺钉和螺螺母,来判断断螺母是大于于螺钉、小于于螺钉还是正正好合适螺钉钉。然而,我我们不能拿两两个螺母作比比较,也不能能拿两个螺钉钉作比较。我我们的问题是是要找到每一一对匹配的螺螺钉和螺母,,为该问题设设计算法,他他的平均效率率符合(nlogn)6.设n个不不同的整数排排好序后存于于t[0:n-1]中。。若存在一个个下标i,0<=i<=n-1,使使得t[i]=i,设计计一个算法找找到这个下标标,最坏的情情况下计算时时间O(logn)。7.输油管道道问题某石油公司计计划建造一条条由东向西的的主输油管道道。该管道要要穿过一个有有n口油井的的油田。从每每口油井都要要有一条输油油管道沿最短短路径(或南南或北)与主主管道相连。。如果给定n口油井的位位置,即它们们的x坐标和和y坐标,应应如何确定主主管道的最优优位置,即使使各油井到主主管道之间的的输油管道长长度总和最小小的位置?9、静夜四无邻邻,荒居旧业业贫。。12月-2212月-22Saturday,December24,202210、雨中黄叶树树,灯下白头头人。。21:11:0821:11:0821:1112/24/20229:11:08PM11、以我我独沈沈久,,愧君君相见见频。。。12月月-2221:11:0821:11Dec-2224-Dec-2212、故人人江海海别,,几度度隔山山川。。。21:11:0821:11:0821:11Saturday,December24,202213、乍见见翻疑疑梦,,相悲悲各问问年。。。12月月-2212月月-2221:11:0821:11:08December24,202214、他他乡乡生生白白发发,,旧旧国国见见青青山山。。。。24十十二二月月20229:11:08下下午午21:11:0812月月-2215、比不了了得就不不比,得得不到的的就不要要。。。十二月229:11下午午12月-2221:11December24,202216、行动出出成果,,工作出出财富。。。2022/12/2421:11:0821:11:0824December202217、做前,能够够环视四周;;做时,你只只能或者最好好沿着以脚为为起点的射线线向前。。9:11:08下午9:11下下午21:11:0812月-229、没有失败败,只有暂暂时停止成成功!。12月-2212月-22Saturday,December24,202210、很很多多事事情情努努力力了了未未必必有有结结果果,,但但是是不不努努力力却却什什么么改改变变也也没没有有。。。。21:11:0821:11:0821:1112/24/20229:11:08PM11、成功就是日日复一日那一一点点小小努努力的积累。。。12月-2221:11:0821:11Dec-2224-Dec-2212、世间成事,,不求其绝对对圆满,留一一份不足,可可得无限完美美。。21:11:0821:11:0821:11Saturday,December24,202213、不知知香积积寺,,数里里入云云峰。。。12月月-2212月月-2221:11:0821:11:08December24,202214、意志志坚强强的人人能把把世界界放在在手中中像泥泥块一一样任任意揉揉捏。。24十十二二月20229:11:08下下午21:11:0812月月-2215、楚塞三三湘接,,荆门九九派通。。。。十二月229:11下午午12月-2221:11December24,202216、少年十十五二十十时,步步行夺得得胡马骑骑。。2022/12/2421:11:0821:11:0824December202217、空山新新雨后,,天气晚晚来秋。。。9:11:08下午午9:11下午午21:11:0812月-229、杨柳散散和风,,青山澹澹吾虑。。。12月-2212月-22Saturday,December24,2022
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 期中模拟检测卷03(解析版)
- 2025年昌吉职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年新疆科信职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025科学仪器行业技术发展与市场前景分析
- 外架工劳务分包合同范本
- 股东转让出资合同书
- 2024年旅游项目规划设计合同
- 医疗仪器行业发展趋势
- 环境保护与绿色航空发展
- 营销推广服务合同模板
- 天津市五区县重点校2024-2025学年高一上学期1月期末联考试题 化学 含答案
- 吉林省吉林市普通中学2024-2025学年高三上学期二模试题 生物 含答案
- 2025年湖南省通信产业服务限公司春季校园招聘76人高频重点提升(共500题)附带答案详解
- 《电影之创战纪》课件
- 2024-2025学年人教版五年级(上)英语寒假作业(一)
- 开题报告-铸牢中华民族共同体意识的学校教育研究
- 浙江省五校镇海中学2025届高考考前模拟数学试题含解析
- 公司2025年会暨员工团队颁奖盛典携手同行共创未来模板
- 数 学2024-2025学年人教版七年级数学上册有理数混合运算100题
- 新沪科版八年级物理第三章光的世界各个章节测试试题(含答案)
- 人教版五年级上册四则混合运算300道及答案
评论
0/150
提交评论