如何计算算法复杂度(如何计算算法复杂度的方法)
大家好!今天让创意岭的小编来大家介绍下关于如何计算算法复杂度的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。
开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等
只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端
创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008
本文目录:
一、时间复杂度怎么计算?
1. 一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n))x0dx0a 分析:随着模块n的增大,算法执行的时间的增长率和f(n)的增长率成正比,所以f(n)越小,算法的时间复杂度越低,算法的效率越高。x0dx0a 2. 在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出T(n)的同数量级(它的同数量级有以下:1,Log2n ,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n)=该数量级,若T(n)/f(n)求极限可得到一常数c,则时间复杂度T(n)=O(f(n))x0dx0a 例:算法:x0dx0a for(i=1;i<=n;++i)x0dx0a {x0dx0a for(j=1;j<=n;++j)x0dx0a {x0dx0a c[ i ][ j ]=0; //该步骤属于基本操作 执行次数:n的平方 次x0dx0a for(k=1;k<=n;++k)x0dx0a c[ i ][ j ]+=a[ i ][ k ]*b[ k ][ j ]; //该步骤属于基本操作 执行次数:n的三次方 次x0dx0a }x0dx0a }x0dx0a 则有 T(n)= n的平方+n的三次方,根据上面括号里的同数量级,我们可以确定 n的三次方 为T(n)的同数量级x0dx0a 则有f(n)= n的三次方,然后根据T(n)/f(n)求极限可得到常数cx0dx0a 则该算法的 时间复杂度:T(n)=O(n的三次方)
二、快速计算冒泡算法时间复杂度
冒泡排序程序简单,基本大家都会,今天讲下如何计算其时间复杂度。算法比较简单,简单讲下大家应该就明白了。
最坏的情况就是所有的元素都要对换,比如希望排出从小到大的顺序,而数组却是从大到小排列:5,4,3,2,1。那么时间复杂度就达到了最大值。
具体计算方法是这样的:一共有5个数字的话,那么冒出的第一个泡需要对换5-1次后放到最后,由于已经找到了最大值放到了最后,冒出的第二个泡就只需要对换5-2次放到倒数第二位了,由于已经找到了最大的两个放到了后面,冒出的第三个泡就只需要对换5-3次了。以此类推,一共需要对换:(5-1) + (5-2) + (5-3) + (5-4)次,相当于一个等差数列求和:1+...+(5-1) ,这里的5可以替换为n,所以最坏情况需要排序(n-1)** n/2,这个就相当于n n,也就是n方了。
简单的想就是冒第i个泡,需要n-i次比较,之所以n-i是因为第一个需要比较n-1次,剩下的不需要和已经冒出的泡比较,所以是n-1-(i-1),也就是n-i了。所有比较次数相加就是时间复杂度了。
排序前:5,4,3,2,1
排序第一次找到最大值:4,3,2,1,5
排序第二次找到次大值:3,2,1,4,5
排序第三次找到第3大值:2,1,3,4,5
排序第四次找到第4大值:1,2,3,4,5
三、在一个具体的程序中,程序的复杂度是如何计算的?
算法的复杂性
算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。
计算机的资源,最重要的是时间和空间(即存储器)资源。因而,算法的复杂性有时间复杂性和空间复杂性之分。
不言而喻,对于任意给定的问题,设计出复杂性尽可能低的算法是我们在设计算法时追求的一个重要目标;另一方面,当给定的问题已有多种算法时,选择其中复杂性最低者,是我们在选用算法适应遵循的一个重要准则。因此,算法的复杂性分析对算法的设计或选用有着重要的指导意义和实用价值。
简言之,在算法学习过程中,我们必须首先学会对算法的分析,以确定或判断算法的优劣。
1.时间复杂性:
例1:设一程序段如下(为讨论方便,每行前加一行号)
(1) for i:=1 to n do
(2) for j:=1 to n do
(3) x:=x+1
......
试问在程序运行中各步执行的次数各为多少?
解答:
行号 次数(频度)
(1) n+1
(2) n*(n+1)
(3) n*n
可见,这段程序总的执行次数是:f(n)=2n2+2n+1。在这里,n可以表示问题的规模,当n趋向无穷大时,如果 f(n)的值很小,则算法优。作为初学者,我们可以用f(n)的数量级O来粗略地判断算法的时间复杂性,如上例中的时间复杂性可粗略地表示为T(n)=O(n2)。
2.空间复杂性:
例2:将一一维数组的数据(n个)逆序存放到原数组中,下面是实现该问题的两种算法:
算法1:for i:=1 to n do
b[i]:=a[n-i+1];
for i:=1 to n do
a[i]:=b[i];
算法2:for i:=1 to n div 2 do
begin
t:=a[i];a[i]:=a[n-i-1];a[n-i-1]:=t
end;
算法1的时间复杂度为2n,空间复杂度为2n
算法2的时间复杂度为3*n/2,空间复杂度为n+1
显然算法2比算法1优,这两种算法的空间复杂度可粗略地表示为S(n)=O(n)
信息学比赛中,经常是:只要不超过内存,尽可能用空间换时间。
四、计算算法时间复杂度
算法的时间复杂度主要通过循环来看……
第一个for循环每做1次,第2个就要做m次,所以时间复杂度是:m*m = m2
以上就是关于如何计算算法复杂度相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。
推荐阅读: