前言
这里会主要给大家介绍时间复杂度的计算方法
一、时间复杂度
提到时间复杂度,第一时间想到的是算法,简单说,算法就是你解决问题的方法,而你用这个方法解决这个问题所执行的语句次数,称为语句频度或者时间频度,记为T(n)。
1. 分析方法
1.用常数一取代运行时间中的所有加法函数。
2.在修改后的运行次数函数中,只保留最高项阶。
3.如果最高项存在且不是1,则去除与这个项相乘的常数。
4.得到的最后结果就是大O阶。
2.实例分析
想必大家在学C语言的时候都知道高斯的故事吧,我们就用这个简单的例子练练手吧:计算1+2+3+4+…+100;
如果我们还没有学等差数列的时候我们会这样写:
int num = 0,i = 0,n = 100;\\1次
for(i = 1;i <= n;i++) \\100次
{
num += i; \\100次
}
n是问题的规模,经过上面的分析,我们可以算出这个算法执行的次数是2n+1,再根据我们的分析方法很容易可以计算出这个算法的时间复杂度是O(n)。
高斯这位小神童就在大家手都快算破的时候,高斯一下子就说出了答案,大家都知道他只算了一次,也就是:
int n = 100,num;
num = (n + 1)*n/2;
这个算法就很简单了,因为他只执行了一次,所以它的时间复杂度就是O(1)
3.常用时间复杂度所耗费时间从小到大:
O(1)<O(logn)<O(n)<O(n*logn)<O(n^2)
<O(n^3)
<O(2^n)
<O(n!)
<O(n^n)
(不知道为啥老出问题就只能这样打)
二、空间复杂度
算法的空间复杂度通过计算算法所需要的存储空间实现。S(n) = O(f(n))n为为题的规模,f(n)为语句关于n所占存储空间的函数。
总结
我们一般主流实现的是空间换取时间的算法,所以空间复杂度在这里就不多给大家介绍了。