关于时间复杂度的简单理解

概念

时间复杂度就是算法执行时消耗的时间

表示方法

我们通常使用O表示法,T(n) = O(fn())
fn表示每行代码执行的次数之和,O表示的是正比例关系
因此我们也可以称其为算法的渐进时间复杂度

常见时间复杂度

  • O(1)
  • O(logN)
  • O(n)
  • O(nlogN)
  • O(n^2)
  • O(n^3)
  • O(n^k)
  • O(2^n)
    从上到下时间复杂度依次提升

计算方法

1、O(1)
不论代码执行了多少行,只要没有循环等复杂结构,都是O(1)

int i = 1;
int j = 2;
++i;
j++;
int m = i + j;

2、O(n)
代码进行了一次循环,循环体内的代码会执行n次,因此是O(n)

for(i=1; i<=n; ++i){
   j = i;
   j++;
}

3、O(logN)
循环体内每次乘2,假设循环x次,循环结束,那么2^x=n,那么x = log2 ^n次,所以是对数时间

int i = 1;
while(i<n){
    i = i * 2;
}

4、O(nlogN)
这个很好理解,只要把上面的线性与对数结合就可以了

for(m=1; m<n; m++){
    i = 1;
    while(i<n){
        i = i * 2;
    }
}

5、O(n^2)
一层循环执行n次,两层则为n^2次,所以双层循环就可以得到了

for(x=1; i<=n; x++){
   for(i=1; i<=n; i++){
       j = i;
       j++;
    }
}

6、O(n ^3) O(n ^k)
参考5去理解就可以了

7、O(2^n)
解释:显然运行次数,T(0) = T(1) = 1,同时 T(n) = T(n - 1) + T(n - 2) + 1,这里的 1 是其中的加法算一次执行。
显然 T(n) = T(n - 1) + T(n - 2) 是一个斐波那契数列,通过归纳证明法可以证明,当 n >= 1 时 T(n) < (5/3)^n,同时当 n > 4 时 T(n) >= (3/2)^n。
所以该方法的时间复杂度可以表示为 O((5/3)^n),简化后为 O(2^n)。

long aFunc(int n) {    
    if (n <= 1) {        
        return 1;
    } else {        
        return aFunc(n - 1) + aFunc(n - 2);
    }
}

指数阶还需要深入理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值