时间复杂度计算

2017-03-08  本文已影响129人  婷楼沐熙

算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度。
计算步骤可以分解为:

  1. 找到执行次数最多的语句
  2. 计算语句执行次数的数量级
  3. 用大O来表示结果

一、O(n)

function getSum (n) {
  let sum = 0;
  for(let i = 0; i <= n; i++) {
    sum += i;
   }
return sum;
}

只有可运行的语句才会增加时间复杂度,因此,上面方法里的内容除了循环之外,其余的可运行语句的复杂度都是O(1)。
时间复杂度 = for的O(n)+O(1) = 忽略常量 = O(n)。

二、O(log2n)

function makeDouble(n) {
  let i= 1;
  while(i<n){
    i = i*2;
  }
  return i;
}

设while循环里面的频度为t,2^t(2的t次方)<=n; 两边去对数t<=log2n,考虑最坏情况,取最大值t=log2n。
T(n) = O(log2n)。
排序算法的复杂度可以参见排序算法

上一篇 下一篇

猜你喜欢

热点阅读