常見算法複雜度

  • 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

對數圖像

相關文章
相關標籤/搜索