什么是大O表示法
大O表示法可以告訴我們算法的快慢。
大O比較的是操作數,它指出了算法運行時間的增速。
O(n) 括號里的是操作數。
舉例
畫一個16個格子的網格,下面分別列舉幾種不同的畫法,並用大O表示法表示
1. 一次畫一個格子。O(n)
2. 折疊紙張,折疊四次就能出現16個格子。O(log n)
大O表示法所表示的是一個算法在最糟糕情況下的運行時間。
一些常見的大O運行時間
-
O(log n),也叫對數時間,二分查找。
-
O(n),也叫線性時間,簡單查找。
-
O(n * log n),快速排序——一種速度較快的排序算法。
-
O(n²),選擇排序——一種速度較慢的排序算法。
-
O(n!),旅行商問題的解決方案——一種非常慢的算法。
主要啟示
-
算法的速度指的是操作數的增速,而非時間。
-
談論算法速度說的是隨着輸入的增加,其運行時間將以什么樣的速度增加。
-
用大O表示法表示算法的運行時間。
-
隨着元素的增加,快算法比慢算法增加的速度是指數級的。比如,O(log n)和O(n)
旅行商問題
旅行商問題用大O表示法就是O(n!),沒錯,就是有這么慢的算法。這個問題是說的一個銷售員,要去5個城市,他想規划一下最短距離,然后選出最短的距離。5個城市一共有120種規划方案(5!)。n個城市就有n!種規划方案。旅行商問題在計算機科學領域是無解的。