前言
同樣一個問題可以用不同的演算法解答,那我們要如何去區分當中的好與壞呢?
對於這樣的疑問有人提出了一種解答 - Big O.
Big O 表示法
分析演算法的優劣,通常是使用資源來評量,ex: CPU 佔用量、Memory 佔用量、磁碟、網路等等。
當說到 big o 時,一般考慮的就是 CPU (時間)佔用。在分析時很常會看到以下的函數:
符號 | 名稱 |
---|---|
O(1) | 常數型 |
O(log(n)) | 對數型 |
O(log(n)c) | 對數多項式型 |
O(n) | 線性型 |
O(n^2) | 二次型 |
O(n^c) | 多項式型 |
O(c^n) | 指數型 |
Big O 是用來描述演算法在輸入 n 個數時,總時間與 n 的關係。
常見排序: 1(常數) < log n < n < n log n < n^2 < 2^n < n!