详解时间复杂度计算公式(附例题细致讲解过程)_时间复杂度怎么算-CSDN博客
上面这篇文章对时间复杂度的推算做了很详细的讲解,下面自己根据实际情况用到的示例进行计算进行简单描述;
一、基础定义
1.1、时间复杂度
定义:时间复杂度是用来描述算法运行所需的时间随输入规模变化的增长情况。它表示的是算法执行步骤的数量与输入数据规模之间的关系。
常见的时间复杂度有:O(1)、O(logn)、O(n)、O(nlogn)、O(n^2)、O(2^n)、O(N!);
1.2、空间复杂度
定义:空间复杂度是用来描述算法在执行过程中所需的内存空间随输入数据规模变化的增长情况。它表示的是算法运行时所需的额外内存空间与输入数据规模之间的关系。
常见的空间复杂度有:O(1)、O(n)、O(n^2);
如下图所示的,是复杂度的比较:
二、时间复杂度和空间复杂度的计算
下面的计算法则即适用于时间复杂度的计算,也适用于空间复杂度的计算。
举例如下所示计算时间复杂度:
如下所示是时间复杂度的计算:
根据上面第一条,时间复杂度计算的到“3n+2”="3n+1";
根据上面第二条,时间复杂度计算得到"3n+1"="3n"(最高阶指的是n的阶次)。
根据上面第三条,时间复杂度计算得到"3n"="n".
所以上面代码的时间复杂度为“O(n)”。
如下所示是空间复杂度的计算:
同样根据上面的规则可以计算空间复杂度为“O(1)”.
三、典型时间的计算举例
这里对时间复杂度进行计算方式,同样适用于对空间复杂度的计算。
3.1、O(1)时间复杂度
下面代码是使用高斯求解法求解,初始值为a1,间距为d的多项式的和。(例如1,2,3,4.....)
经过运算之后可以知道时间复杂度为O(1),因为不论多项式有多少项(n为任意值),最终都是进行6次运算。
总共定义了4个变量,没有循环,所以空间复杂度为“O(4)”="O(1)"。
3.2、O(n)时间复杂度
(1)例子1
下面也是计算初始值为a1,间距为d的多项式的和,是通过每项循环相加的方式。
这个前面已经介绍过,时间复杂度为O(n)。
(2)例子2
根据上面规则,社区常数,保留n次幂最高项,去掉次幂最高项系数,得到时间复杂度为“O(n)”。
但是实际算法应用中还是会考虑一下次幂最高项的系数的,毕竟“n/10000”和“n/2”差别还是很大的。
3.3、O(n^2)时间复杂度
O(n^2)时间复杂度一般都是嵌套循环,如下面例子所示:
根据上面的规则可以得到时间复杂度为“O(n^2)”。
3.4、O(logn)时间复杂度
logn时间复杂度一般循环中,循环的次数都是2倍的减少的,如下面代码所示:
根据上面的法则可以得到时间复杂度为“logn”。log的底数为多大是无所谓的,经过运算整理,底数也就是系数,还是会去掉的。
此外还有一些不常用的时间复杂度,这里先不列出。