Big O Notation - Big O 符號

Posted by Alan Zhan on Tuesday, July 6, 2021

如何選擇演算法來解決問題

同一個問題可以用不同的演算法來解決問題,但是選擇哪一個最好?有兩個指標可以評估一個算法的好壞:

  • 時間複雜度 (花的時間)
  • 空間複雜度 (花的記憶體)

所以花費的時間越少、花費的記憶體越少,通常就是越好的演算法,但是演算法的時間複雜度分析又可以細分為以下三種:

  • 最佳情況:考慮演算法所需要執行得最少執行步數。
  • 最差情況:考慮演算法所需要執行得最多執行步數。
  • 平均情況:考慮演算法所需要執行的平均執行步數。

Big O Notation 當作衡量標準

但是通常我們只會專注找出最差情況,而且也通常會使用 Big O notation (大 O 符號) ,他是一種評估演算法效益的方法,通常是用來表示演算法的執行速度,通常也會代表是最差的執行時間。

那麼我們要怎樣表示呢?

  • O(n):假設 n 為元素的數量,每個元素都被訪問過一次,則我們會記為 O(n)。
  • O(n^2):若是雙迴圈把每個元素都訪問過一次,則為 O(n ^ 2)。
  • O(log n):像是二分搜尋法,我們訪問元素的次數只需 log2(n) ,所以會寫成 O(log n)。

補充:log 代表 logarithmic 的意思。

Big O 複雜度

以上圖為例,通常好的演算法並不會隨著元素的增加,而非呈現指數成長,作為開發者的我們,Big O Notation 只能拿來當作衡量代碼的效率手段,並且盡可能減少不必要的步數。

Resources:

歡迎到我的 Facebook Alan 的筆記本 留言,順手給我個讚吧!你的讚將成為我持續更新的動力,感謝你的閱讀,讓我們一起學習成為更好的自己。