###### tags: `ADA 1.3` `Algorithm Complexity` # ADA 1.3 Algorithm Complexity # Time Complexity of an Algorithm - 演算法 A 的時間複雜度是$\Theta(f(n))$ 代表的意思是 1. 演算法 A 可以在$O(f(n))$時間跑完 2. 演算法 A 在最壞的情況下至少需要$\Omega(f(n))$的時間 - 有一個實例$I(n)$會讓演算法 A 需要跑到$\Omega(f(n))$的時間 --- ## Tightness of the Complexity - 如果我們說這個複雜度分析是 **tight** 最好的、最緊的,表示 $O(f(n))$ 這個 Upper bound 是**最低的** - 也就是說他在最壞情況下是 $\Omega(f(n))$ (**最高的** Lower bound) - = 這個演算法在最壞情況下的複雜度是$\Theta(f(n))$ - 把泡沫排序演算法帶進來看,如果我們說他的 Upper bound $O(n^2)$ 是 tight 的話 - 代表這個演算法的 Lower bound 就是 $\Omega(n^2)$ - 也就是說這個演算法的複雜度就是$\Theta(n^2)$ --- ## Algorithm Analysis - 百般無聊擂台法 ```c 1. int i; Big-Oh(1) time 2. int m = A[1]; Big-Oh(1) time 3. for (i = 2; i <= n; i++) { Big-Oh(n) iterations 4. if (A[i] > m) Big-Oh(1) time 5. m = A[i]; Big-Oh(1) time 6. if (i == n) Big-Oh(1) time 7. do i++ n times Big-Oh(n) time 8. } 9. return m; Big-Oh(1) time ``` ==非常不 tight 的分析 來分析 Upper bound== $3\cdot O(1)+O(n)\cdot(3\cdot O(1)+O(n))$ $=O(1)+O(n)\cdot O(n)$ $=O(1)+O(n^2)$ $=O(n^2)$ ==用 tight 的方式分析== 第三行的迴圈用了 $O(n)$ ,只有在最後得時候才又多做 $O(n)$ 次,所以我們不能把他算到迴圈裡面,所以第三到第八行花的時間就是: $O(n)\cdot O(1)+1\cdot O(n)=O(n)$ 一樣的分析用在 Lower bound 就是 $\Omega(n)$ :::info 💡 在最壞情況下百般無聊擂台法的複雜度就是 $\Theta(n)$. ::: --- ## Algorithm Comparison - Q: 如果以下成立,我們可以說演算法 1 比演算法 2好嗎? - 演算法 1: $O(n)$ 的時間 - 演算法 2: $O(n^2)$ 的時間 - A: 不行!因為上面的 Upper bound 並沒有說他是 tight 的,就沒辦法確定他們的 Lower bound,所以不能只憑 Upper bound 就來比較 --- ## Comparing A and B - 演算法 A 不比演算法 B 差,在某些最壞的情況下,如果存在一個 $f(n)$ - 演算法 A 用了 $O(f(n))$ 的時間(有可能 Lower bound 更好) - 演算法 B 在最壞情況下至少要用 $\Theta(f(n))$ 的時間 - 代表 $A \le B$ - 如果說演算法 A 嚴格的比 B 好的話表示 - 演算法 A 用 $O(f(n))$ 的時間(O 表示 $\le$) - 演算法 B 在最壞情況下要用 $\omega(f(n))$ 的時間($\omega$表示>) 或者 - 演算法 A 用 $o(f(n))$ 的時間(o 表示 <) - 演算法 B 在最壞情況下要用 $\Omega(f(n))$ 的時間($\Omega$ 表示 $\ge$) --- # Problem Complexity 問題的難度 --- ## Time Complexity of a Problem - 如果我們說問題 P 的難度是 $\Theta(f(n))$ 1. 問題 P 難度的 Upper bound 是 $O(f(n))$ - 代表存在一個花$O(f(n))$時間解決問題 P 的演算法 2. 問題 P 難度的 Lower bound 是 $\Omega(f(n))$ - 代表**任何**可以解決問題 P 的演算法都至少需要 $\Omega(f(n))$ 的時間 - 冠軍問題的難度是 $\Theta(n)$ 是因為 1. 冠軍問題難度的 Upper bound 是 $O(n)$ - 擂台法花 $O(n)$ 的時間解決 2. 冠軍問題難度的 Lower bound 是 $\Omega(n)$ - 代表**任何**可以解決冠軍問題的演算法都至少需要 $\Omega(n)$ 的時間 (至少都要比較 n - 1 次) --- ## Optimal Algorithm - 如果說演算法 A 是**最好的演算法**就代表 - 演算法 A 花了 $O(f(n))$ 的時間,而且 - 問題 P 的難度至少也有 $\Omega(f(n))$ 這麼難 - 代表沒有多花多餘的力氣剛好就能解決問題 P - 例如 (冠軍問題) - 擂台法 → 最好的演算法 - 他花了 $O(n)$ 的時間解決 - 任何可以解決冠軍問題的演算法都至少需要 $\Omega(n)$ 的時間 - 百般無聊擂台法 → 最好的演算法 - 他花了 $O(n)$ 的時間解決 - 任何可以解決冠軍問題的演算法都至少需要 $\Omega(n)$ 的時間 --- ## Comparing P and Q - 問題 P 不會比問題 Q 更難,如果下面的情況成立的話 - P 的難度是 $O(f(n))$ - Q 的難度是 $\Omega(f(n))$ - 問題 P 一定比 Q 簡單的話 - P 的難度是 $O(f(n))$ - Q 的難度是 $\omega(f(n))$ 或是 - P 的難度是 $o(f(n))$ - Q 的難度是 $\Omega(f(n))$ --- # 結論 - 演算法分成設計和分析兩個部分 - Algorithm Design and Analysis Process :::info 設計 - 確定問題 - 設計演算法 ::: :::warning 分析 - 證明正確性 - 分析需要多少時間/空間 ::: - 大部分的問題都可以用暴力法解決只是沒有效率 - 分析的技巧 - 反證法 - 歸納法 - 漸進分析 - 問題實例 - 演算法複雜度 - 在最壞情況下演算法的成長速率 - 問題難度 - 在最壞情況下可以解決這個問題的最好的演算法要花多少時間 最後要做 Ch.3 Growth of function 的習題,pdf 輸入頁數 73 3.1-1 Let f(n) and g(n) be asymptotically nonnegative functions. Using the basic definition of ‚$\Theta$notation, prove that $max(f(n),g(n)) = \Theta(f(n) + g(n))$ 3.1-2 Show that for any real constants a and b, where b>0, $(n+a)^b = \Theta(n^b)$ 3.1-3 Explain why the statement, “The running time of algorithm A is at least $O(n^2)$,” is meaningless. 試著回答 Upper bound 沒有說明是 tight 的話沒有意義,因為有可能 Lower bound 可以更快 3.1-4 Is $2^{n+1}=O(2^n)$? Is $2^{2n}=O(2^n)$? 3.1-5 Prove Theorem 3.1. 頁數 69 $\Omega$-notation 的下面 3.1-6 Prove that the running time of an algorithm is ‚$\Theta(f(n))$ if and only if its worst-case running time is $O(g(n))$ and its best-case running time is $\Omega(g(n))$. 3.1-7 Prove that $o(g(n)) \bigcap \omega(g(n))$ is the empty set.($\bigcap$交集的意思) 3.1-8 We can extend our notation to the case of two parameters n and m that can go to infinity independently at different rates. For a given function $g(n, m)$, we denote by $O(g(n, m))$ the set of functions $$ O(g(n, m)) = \{f(n, m):there\space exist\space positive\space constants\space c, n_0, and\space m_0\\ such\space that\space 0\le f(n, m)\le cg(n, m)\\ for\space all\space n\ge n_0, m\ge m_0 \} $$ Give corresponding definitions for $\Omega(g(n, m))$ and $\Theta(g(n, m))$