--- title: 2020FMath203 Week5 tags: 2020F, Math203 --- ---- ## 5: 演算法複雜度 (2020/10/04~2020/10/10) 週五國慶日補假 --- ### 這週要做的事 #### 影片(每週二上課前完成) - [video 5](https://www.youtube.com/watch?v=RQ06EzCPk_I): Big Oh and Little Oh - reading assignment: [4.3 The Big "Oh" and Little "Oh" Notations](https://rellek.net/book/s_basics_big-oh.html) - [questions 5](https://docs.google.com/forms/d/e/1FAIpQLSdPgQwLVPttpzQsZoJc8oB5Oix7s6tTZNyWDqBS9huCBemKPA/viewform?usp=sf_link) ``` AL 分數 += Question 分數 * 0.01 ``` [//]: # ( scalar doesn't mater, time doesn't mater O and o scale ) #### HW5(下週二 5:00 pm 前交給助教) 請註明姓名學號以及第幾次作業 1. 證明對任意 $\epsilon > 0$ 而言, $\ln(n) = o(n^\epsilon)$ 都成立。證明對任意 $K > 0$ 而言, $n^K = o(e^n)$ 都成立。 2. 證明 $$\binom{2n}{n} = \binom{n}{0}^2 + \binom{n}{1}^2 + \cdots + \binom{n}{n}^2$$ --- ### Big Oh and Little Oh - Kahoot: [Big Oh and Little Oh](https://create.kahoot.it/share/76167c4f-908a-498b-96e4-4132c0e257a0) 若 $f:\mathbb{N}\rightarrow\mathbb{R}_{\geq 0}$ 和 $g:\mathbb{N}\rightarrow\mathbb{R}_{\geq 0}$ 為兩函數。 如果存在 $c>0$ 及 $n_0>0$ 使得 $f(n) \leq cg(n)$ whenever $n\geq n_0$,則我們說 $f = O(g)$(讀作 $f$ 是 "Big Oh of" $g$) 如果 $$\lim_{n\rightarrow\infty}\frac{f(n)}{g(n)}=0$$ ,則我們說 $f = o(g)$(讀作 $f$ 是 "Little oh of" $g$) [//]: # (10 T or F questions) --- ### 用 Python 畫圖 [Example](https://sagecell.sagemath.org/?z=eJxFzMsKwyAQheG9TzE7L4ho93kYQ4ZUGC8YQ83bV5tCdsP5PybEkmuDdMZygT8gFRbuKfpWKDcKqynXvGYu1BjrsAxnfPVpR-G0s04yNpKZTFhjHSjoSr008Iob10B-RVr4L83A5eP7UCud-LDO__8Id0ybuPHxzh8hv-ujNsA=&lang=sage&interacts=eJyLjgUAARUAuQ==) on SageCell ```python import numpy as np import matplotlib.pyplot as plt x = np.arange(1,101) plt.plot(0.01 * x**2, 'red', label='0.01 x**2') plt.plot(x, 'blue', label='x') plt.legend() plt.show() ``` --- ### 估計 令 $\pi(n)$ 為 $n$ 以下質數的個數。 比如說 $10$ 以下的質數有 $2,3,5,7$,所以 $\pi(10) = 4$ 而 $\pi(11) = 5$。 - 計算一下 $\pi(100)$ 及 $\pi(200)$。 ```python n = 100 count = 0 for i in range(1, n+1): if is_prime(i): count += 1 #print(i) print(count, N(n/log(n))) ``` $\pi(n)$ 沒有確切的公式,但是有人證明 $\pi(n)$ 大概跟 $\frac{n}{\ln n}$ 差不多。 ##### Theorem (Prime Number Theorem) 令 $\pi(n)$ 為 $n$ 以下質數的個數。則 $$\lim_{n\rightarrow\infty}\frac{\pi(n)\ln(n)}{n} = 1.$$ --- ### P = NP? 考慮一個計算問題,它的計算時間跟輸入大小 $n$ 有關。 如果這個問題有演算法可以在 $O(n^c)$ 的時間內回答出來,則我們說這是一個 **P 問題**。這樣的演算法我們稱為 **polynomial time algorithm**。比如說: > 判斷一個長度為 $n$ 的數列是否為嚴格遞增。 有一些問題,看起來很難,像是 > 分堆問題:輸入 $n$ 個整數,判斷這些整數是否可以分成總和一樣的兩堆。 乍看之下這個問題要 $2^{n-1}$ 的時間才能回答。然而如果天上突然掉下來一張紙,上面寫著分堆的方法(certificate),則只要在 $O(n^c)$ 的時間內就可以回答答案為**是**。 所以看起來好像只是人類太蠢,還沒找到好的演算法來回答這個問題,而不是這個問題太難。如果一個問題存在多項式時間可以驗證的 certificate,來驗證答案為是,則這樣的問題稱作 **NP 問題**。 顯然任何 P 問題都存在這樣的 certificate,所以任何 P 問題都是 NP 問題。 ##### Conjecture P $!=$ NP? 判斷以下的問題屬於哪一類? P、NP、都不是? - 判斷一個長度是 $n$ 的字串中是否有至少三個 $0$。 - 判斷 $n$ 個整數中是否有三個整數總和為 $100$。 - 判斷一個長度為 $n$ 的數列是否存在長度為 $3$ 的遞增子數列。 - 判斷 $1,\ldots,10000$ 中質數的個數是否大於 $500$ 個。 - 判斷一個 $n$ 位正整數是否可以被 $m$ 位正整數整除 ($n\geq m$)。 - 判斷一個 $n$ 位正整數是否為質數。 - 判斷 $n$ 個數字中是否有一個子集其總合為 $0$。 --- ### Summary: 證明組合等式 回顧一下這些等式的證明。 組合證明: $$\sum_{k=1}^n 2k-1 = n^2$$ double counting: $$\binom{n}{0}2^n + \binom{n}{1}2^{n-1} + \cdots + \binom{n}{n}2^0 = 3^n $$ 數學歸納法: $$\sum_{k=1}^n k^2 = \frac{n(n+1)(2n+1)}{6}$$ --- ### Summary: 除法原理 證明對於任意奇數 $n$,$n$ 和 $2n + 4$ 一定互質。 找出一對整數 $a,b$ 使得 $7a + 11b = 5$。 --- ### Summary: 鴿籠原理 證明從 $\{1,\ldots,100\}$ 中任取 $51$ 個數字,一定有其中兩個數字互質。 證明從 $\{1,\ldots,100\}$ 中任取 $51$ 個數字,一定有兩個數字總和為 $101$。 證明從 $\{1,\ldots,100\}$ 中任取 $51$ 個數字,一定有一個數字整除另一個。 六個人之中,有的互相認識有的互相不認識,證明一定有兩個人認識的人數是一樣的。 --- ### Summary: 演算法 記得 $O(g)$ 和 $o(g)$ 的意思嗎? 有可能 $f=O(g)$ 同時 $g=O(f)$ 嗎? 有可能 $f=o(g)$ 同時 $g=o(f)$ 嗎? 如果 $f=O(2^n)$,$nf$ 也是 $O(2^n)$ 嗎?證明或給反例。 如果 $f=o(1)$,$nf$ 也是 $o(1)$ 嗎?證明或給反例。 考慮一個問題"判斷一個 $n$ 位數是否為完全平方數"。給一個多項式時間可以驗證的 certificate 來回答是。給一個多項式時間可以驗證的 certificate 來回答否。