# 時間複雜度 (Time Complexity) ### Big-O #### 定義:某演算法時間函數的上限,最糟也不會超過的意思! #### $f(n)=O(g(n))$ iff存在兩正數$C, n_0$使得$f(n)\le C \times g(n)$, for all $n>=n_0$ 只要n大到某個程度(no),就保證時間函數f(n)最多就長到g(n) (n是執行次數) ![](https://i.imgur.com/EHvE6vH.png) #### 例題1: $f(n)=3n+2$, 證明$f(n)=O(n)$ 1. 先把$f(n)$最高次項的係數值+1設為C --> C=3+1=4 2. $3n+2\le 4n$ --> $n\ge2$ $n_0=2$ 3. 結論: $f(n)=O(n)$ iff $C=4, n_0=2$, 使得$f(n)\le 4\times g(n)$, for all $n>=2$ #### 例題2: $f(n)=5n^2+3n+2$, 證明$f(n)=O(n^2)$ 1. 先把$f(n)$最高次項的係數值+1設為C --> C=5+1=6 2. $5n^2+3n+2\le 6n^2$ --> $n^2\ge3n+2$ $n_0=4$ (代數字試) 3. 結論: $f(n)=O(n^2)$ iff $C=6, n_0=4$, 使得$f(n)\le 6\times g(n)$, for all $n>=4$ 以例題1的$f(n)=3n+2$來說,它的Big-O是$O(n)$,但這只是一個最爛值,所以$O(n^2), O(n^3)$..etc都可以是它的Big-O。 因此為了使Big-O有意義,$f(n)=O(g(n))$的$g(n)$要越小越好。 ### Omega #### 定義:某演算法時間函數的下限,最好也不會低於此下限! #### $f(n)=\Omega(g(n))$ iff存在兩正數$C, n_0$使得$f(n)\ge C \times g(n)$, for all $n>=n_0$ 只要n大到某個程度(no),就保證時間函數f(n)最好就長到g(n),不會再低於g(n) (n是執行次數) ![](https://i.imgur.com/mLnZGOG.png) #### 例題1: $f(n)=3n+2$, 證明$f(n)=\Omega(n)$ 1. 先把$f(n)$最高次項的係數值設為C --> C=3 2. $3n+2\ge 3n$ --> $2\ge0$, 恆真所以$n_0$可以任選 $n_0=1$ 3. 結論: $f(n)=\Omega(n)$ iff $C=3, n_0=1$, 使得$f(n)\ge 3\times g(n)$, for all $n>=1$ #### 例題2: $f(n)=5n^2+3n-6$, 證明$f(n)=\Omega(n^2)$ 1. 先把$f(n)$最高次項的係數值設為C --> C=5 2. $5n^2+3n-6\ge 5n^2$ --> $3n-6\ge0$ $n_0=2$ 3. 結論: $f(n)=\Omega(n^2)$ iff $C=5, n_0=2$, 使得$f(n)\ge 5\times g(n)$, for all $n>=2$ 再次以$f(n)=3n+2$來說,它的Omega是$\Omega(n)$,但$\Omega (1)$也可以是它的Omega。 因此為了使Omega有意義,$f(n)=\Omega(g(n))$的$g(n)$要越大越好。 ## Theta #### 定義:就是Big-O跟Omega的夾擊~ #### $f(n)=\theta(g(n))$ iff存在三正數$C_1, C_2$和$n_0$, #### 使得$C_1\times g(n) \le f(n)\le C_2 \times g(n)$, for all $n>=n_0$ ![](https://i.imgur.com/xhlQKNH.png) #### 例題1: $f(n)=3n+2$, 證明$f(n)=\theta(n)$ $C_1\times g(n) \le \underline{f(n)\le C_2 \times g(n)}$ 1. 先處理右半邊,把$f(n)$最高次項的係數值+1設為C2 --> C=3+1=4 2. $3n+2\le 4n$ --> $n\ge2$, $n_0$=2 $\underline{C_1\times g(n) \le f(n)}\le C_2 \times g(n)$ 3. 再處理左半邊,把$f(n)$最高次項的係數值設為C1 --> C=3 4. $3n+2\ge 3n$, --> $2\ge0$恆真, 所以$n_0任取$ 5. 結論: $f(n)=\theta(n)$ iff $C_1=3, C_2=4, n_0=2$, 使得$3\times g(n) \le f(n)\le 4\times g(n)$, for all $n>=2$ ![](https://i.imgur.com/s6t7snC.png)