【数据结构与算法】时间复杂度和空间复杂度

同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。

时间复杂度

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),存在一个正常数c使得fn*c>=T(n)恒成立。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

推导大O阶

推导攻略:

  • 用常数1取代运行时间中的所有加法常数
  • 在修改后的运行次数函数中,只保留最高阶项
  • 如果最高阶项存在且不是1,则去除与这个项相乘的常数
常数阶

常数阶用O(1)表示

线性阶

线性阶用O(n)表示
示例:如下代码的时间复杂度即为O(n)

int I ,n = 100, sum = 0;
for(I = 0 ; I < n; I++){
   sum = sum + I;
}
平方阶

平方阶用O(n²)表示
示例:如下代码的时间复杂度即为O(n²)

int I , j , n = 100;
for (I = 0; I < n; I++){
   for(j = 0; j < n; j ++ ){
   printf("666")
   }
}
对数阶

对数阶用O(logn)表示
示例:如下代码的时间复杂度即为O(logn)

int I = 1, n = 100;
while(I < n){
 I = I * 2
}
//由于2^x = n ,所以x = log(2)n
常见时间复杂度
时间复杂度术语例子
O(1)常数阶123
O(n)线性阶2n+3
O(n²)平方3n²+4n+5
O(logn)对数阶3log(2)n + 5
O(nlogn)nlogn阶2n + 3nlog(2)n + 10
O(n³)立方阶n³+3n²+4n+5
O(2^n)指数阶2^n

常见时间复杂度耗费时间从小到大依次是: O(1)<O(logn)<(O(n))<O(nlogn)<O(n²)<O(n³)<O(2^n)

空间复杂度

与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。记作:

S(n)=O(f(n))

    原文作者:大基本功
    原文地址: https://www.jianshu.com/p/7b0232b23da4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞