如何選擇演算法來解決問題
同一個問題可以用不同的演算法來解決問題,但是選擇哪一個最好?有兩個指標可以評估一個算法的好壞:
- 時間複雜度 (花的時間)
- 空間複雜度 (花的記憶體)
所以花費的時間越少、花費的記憶體越少,通常就是越好的演算法,但是演算法的時間複雜度分析又可以細分為以下三種:
- 最佳情況:考慮演算法所需要執行得
最少
執行步數。 - 最差情況:考慮演算法所需要執行得
最多
執行步數。 - 平均情況:考慮演算法所需要執行的
平均
執行步數。
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 Notation 只能拿來當作衡量代碼的效率手段,並且盡可能減少不必要的步數。
Resources:
歡迎到我的 Facebook Alan 的筆記本 留言,順手給我個讚吧!你的讚將成為我持續更新的動力,感謝你的閱讀,讓我們一起學習成為更好的自己。