大 O 表示法

大 O 表示法是一種特殊的表示法,指出了算法的速度有多快。

在我們的日常工作中,基本都是使用其他人編寫好的算法,基本不太在乎算法的速度到底有多快。
但是,人要往高處走嘛~最重要的是,面試的時候,面試官肯能會問...
那么我們今天來簡單的了解一下 大 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個格子在五種算法中分別消耗的時間。(這個例子是一個簡化比較版本,實際情況可能個那個復雜)

繪制網(wǎng)格時間

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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容