大 O 表示法是一種特殊的表示法,指出了算法的速度有多快。
在我們的日常工作中,基本都是使用其他人編寫好的算法,基本不太在乎算法的速度到底有多快。
但是,人要往高處走嘛~最重要的是,面試的時候,面試官肯能會問...
那么我們今天來簡單的了解一下 大 O 表示法 。
- 大O表示法 是什么樣子?

指出了算法需要執(zhí)行的操作數(shù)。之所以叫大O表示法就是因為操作數(shù)前有一個大O,就是這么隨意...
舉個栗子
假設有一個數(shù)組,包含了n個元素。簡單查找,也就是從數(shù)組的第0項(索引項)找到某個元素,需要從頭檢查到尾,因此需要執(zhí)行 n 次操作。使用大O表示法,這個運行時間為 O(n)。單位呢?沒有--大O表示法指的并非以秒為單位的速度。大O表示法讓你能夠比較操作數(shù),它指出了算法運行時間的增速。
再比如,為了檢查長度為 n 的數(shù)組,二分查找法需要執(zhí)行l(wèi)ogn次操作。使用大O表示法就是 O(logn) 。大O表示法指出了最糟糕情況下的運行時間
假設有一個數(shù)組[1,2,3,4,5],如果使用簡單查找要查找“1”的話,一次就能找到,但是即使這樣,算法的運行時間依舊是O(n)而不是O(1)。-
常見的大O運行時間
- O(log n) 也叫對數(shù)時間,這樣是算法包括二分查找法
- O(n) 也叫線性時間,這樣的算法包括簡單查找
- O(n*log n) 這樣是算法包括快速排序--一種比較快的排序算法
- O(n2) 這樣的算法包括選擇排序--一種比較慢的排序算法
- O(n!) 這樣的算法包括旅行商問題的解決方案--一種非常慢的算法
畫個圖
假設要畫一個包含16格的網(wǎng)格(4*4),且有以上5種不同的算法可供選擇,使用第一種算法的時候操作數(shù)為4(log6=4),假設每秒可執(zhí)行10次操作,那么需要0.4秒即可。那么如果要畫1024個格子呢?這需要執(zhí)行10次(log1024=10),也就是一秒就可以畫完了。
下圖分別畫出了繪制16個格子、繪制256個格子和繪制1024個格子在五種算法中分別消耗的時間。(這個例子是一個簡化比較版本,實際情況可能個那個復雜)

大O表示法可以幫助我們快速分析算法的性能優(yōu)劣,也可以幫助我們分析一個算法的實用性。