T(n) 为算法需要执行的运算次数。
算法的时间复杂度,用来度量算法的运行时间,记作: T(n) = O(f(n))。它表示随着 n 的增大,算法执行需要的时间的增长速度可以用 f(n) 来描述。
例1
for(int i = 0; i<4; i++) { // 需要执行4次
……;
}
这个方法需要 4 次运算,即T(n) = 4
时间复杂度体现的是增长速度,因此只需要看对整体影响最大的项,即n的最高阶项
4是常数,也可以看作4*n⌃0,由于与幂函数相乘的常数对幂函数的增速改变几乎不起作用,因此常数都被忽略,因此这个方法的时间复杂度是O(n⌃0),即O(1)。
那有没有其他情况呢?
例2
如果在上面那个for语句的里面和外面再加入for语句,如:
for(int i = 0; i
for(int j = 0; j
……;
}
}
for(int k = 0; k
……;
}
这个方法需要 n * n + n = n⌃2 + n 次运算,即T(n) = n⌃2 + n
最高次项是n⌃2,因此这个方法的时间复杂度是O(n⌃2)。
那除了幂函数还有其他形式吗?
例3
for (int i = 2; i < n; i++) {
i *= 2;
……;
}
这个方法的时间复杂度为 O(log(2)(n)),即 O(log n)。注意,log(2)写成log
当然还有其他形式增长的,所以这里按函数的增速快慢给出复杂度的比较:
O(1)