O(1) 常数复杂度 不管代码有多少行,只执行一遍。但是没有O(2)或者O(3)。常数复杂度都用O(1)表示
O(n) 线性时间复杂度 例:一层循环
- O(n^2) 平方 例:二层循环
O(n^3) 立方 例:三层循环
O(2^n) 指数 例:
int fib(int n) {
if (n <= 2) return n;
return fib(n - 1) + fib(n - 2);
}
- O(log n) 对数复杂度 例:
for (int i = 1; i < n; i = i * 2) {
System.out.println("Hey - I'm busy looking at: " + i);
}
这个O是什么意思?
渐进符号,O 代表渐近上界。另还有 渐近下界,渐近同阶,渐近低阶。之所以我们用O,也就是渐近上界。即我们一般都说一个算法的时间复杂度的上界。
O(log n) 这个对数为什么没有底数?
其实这个事,不用关注。直接的理解可以回想一下高中学的对数的图像,不管底数是几,差距并不明显。当然也可以通过数学证明来说明。这里就不说了。