定義
大O表示法是一種特殊的表示法,指出了算法的速度有多快。
- 並不以秒為單位,而是指算法運行時間隨操作數的增速(隨着輸入的增加,其運行時間將以什么樣的速度增加)。
- 指出了最糟情況下的運行時間。
- O(log n)比O(n)快,當需要搜索的元素越多時,前者比后者快得越多。
- O(n × 1/2 × n)。 但大O表示法省略諸如1/2這樣的常數(有關這方面的完整討論,請參閱《算法圖解》第4章),因此簡單地寫 作O(n × n)或O(n^2 )。
常見的大 O 運行時間
下面按從快到慢的順序列出了你經常會遇到的5種大O運行時間。
- O(log n),也叫對數時間,這樣的算法包括二分查找。
- O(n),也叫線性時間,這樣的算法包括簡單查找。
- O(n * log n),這樣的算法包括 快速排序——一種速度較快的排序算法。
- O(n^2 ),這樣的算法包括 選擇排序——一種速度較慢的排序算法。
- O(n!),這樣的算法包括 旅行商問題的解決方案——一種非常慢的算法。
對數補充
對數運算是冪運算的逆運算
log_10 100相當於問“將多少個10相乘 的結果為100”。
答案是兩個:10 × 10 = 100。因此,log_10 100 = 2
示例
使用大O表示法(稍后介紹)討論運行時間時,log指的都是log2
而使用二分查找時,最多需要檢查log n個元素。
如果列表包含8個元素,你最多需要 檢查3個元素,因為log 8 = 3(2^3 = 8)。
如果列表包含1024個元素,你最多需要檢查10個元素, 因為log 1024 = 10(2^10 =1024)。