常见算法复杂度

  • 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) 这个对数为什么没有底数?

其实这个事,不用关注。直接的理解可以回想一下高中学的对数的图像,不管底数是几,差距并不明显。当然也可以通过数学证明来说明。这里就不说了。

对数图像

猜你喜欢

转载自www.cnblogs.com/Mr-O-O/p/11681603.html