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