常见算法复杂度

  • O(1) 常数复杂度 无论代码有多少行,只执行一遍。可是没有O(2)或者O(3)。常数复杂度都用O(1)表示java

  • O(n) 线性时间复杂度 例:一层循环算法

  • O(n^2) 平方 例:二层循环
  • O(n^3) 立方 例:三层循环code

  • 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是什么意思?class

渐进符号,O 表明渐近上界。另还有 渐近下界,渐近同阶,渐近低阶。之因此咱们用O,也就是渐近上界。即咱们通常都说一个算法的时间复杂度的上界。循环

O(log n) 这个对数为何没有底数?im

其实这个事,不用关注。直接的理解能够回想一下高中学的对数的图像,无论底数是几,差距并不明显。固然也能够经过数学证实来讲明。这里就不说了。img

对数图像

相关文章
相关标签/搜索