一.什么是时间复杂度?
时间复杂度就是计算程序运算多少次,是对算法执行时间的度量,我们常常用符号大写字母O
来表示。
二.如何分析时间复杂度?
接下来是计算时间复杂度需要遵守的规则:
1.用常数1取代运算时间中所有加法常数(因为计算机效率高,100,1000都可以轻松计算)
2.在修改后的运行次数函数中,只保留最高阶项
3.如果最高阶项存在且不是1,则去除与这个项相乘的常数
三.举例计算时间复杂度
1.常数阶
a=a+1;
a=a+2;
a=a+3;
这是没有循环的语句,程序运行三次,但由于规则1,因此时间复杂度为O(1)而不是O(3);
2.线性阶
for(int i=0;i<m;i++)
由于我们不知道n为多少,所以时间复杂度为O(m);
for(int i=0;i<m;i++)
{
......;
}
for(int i=0;i<m;i++)
{
......;
}
两个for循环为O(2n),由于规则3,因此时间复杂度为O(n);
3.对数阶
p=1;
while(p<n)
{
p=p*2;
}
我们求的是2的多少次方大于等于n,也等同于求以2为底n的对数Log2n,由于规则1,所以时间复杂度为logn;
4.平方阶
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
......
}
}
时间复杂度为O(n*m)。