# 台大 109 軟體
###### tags: `NTU` `109` `軟體`
1. 345
2. 12
:::info
應該是 min(n, m)?不過沒這個答案...
:::
3. 245
:::info
因為是小 o,所以 o(nlgn) 不能選,沒錯吧?
:::
5. 124
:::info
3.也有可能在最大值的父節點上。
5.第三小的值不一定在第一層
:::
5. 125
:::info
不知道是我太鑽牛角尖還是...這題目我有點看不太懂它在講什麼。所以直接預設它說的就是楓葉本上的演算法
:::
6. 345
:::info
2. 假設 n 是偶數。則期望值為:
$\frac{n}{2}\{(n-1)+(n-2)+...+(\frac{n}{2}+1)\}=\frac{3}{4}n$
45. 楓葉本裡有。簡單來講,如果選中 [j, i] 區間以外的數字,則不會有任何影響。如果選中 [j, i] 區間內的數字,假如選到 i 或 j,則兩個就會互相比較,反之,就不會。因此機率為 $\frac{2}{i-j+1}$。4 跟 5 看似有點不同,但題目設定 K 是 [1, n] 的排序,所以是一樣的。
:::
7. 13
:::info
2.free 得太早了。
45.這兩種做法看不出到底為何能改善 push/pop 的效率
:::
8. 1245
:::info
3.如果 n 是第一個送進去的話,就不會
4.對於任意 i, j 且 j < i,i 要跳過 j 的機率為 $\frac{1}{2}$,因此 i 要跳過的數量期望值為 $\frac{i-1}{2}$
5.$\sum_{i=1}^{n} \frac{i-1}{2}=\frac{1}{2}(n)(n-1)$
:::
9. 145
:::info
23.O(n) 比較恰當...?
45.反正就是找右子樹的最小值,或是左子樹的最大值來替換。
:::
10. 45
:::info
1.這個我不是很確定,但楓葉本裡,紅黑樹的高度為 O(lgn) 的證明沒有用到 1,所以我不選。
2.100000 個點不為完全二元樹,如果全黑的話,2就不成立了
34.違反 3 才對
:::
11.
(a) 將陣列分成兩半,假設是 B 和 C。先取 B[0] 和 C[0] 比較,確立當前的最大值和最小值。然後依序往下比較 B[i] 和 C[i],將比較小的跟當前最小值比較,比較大的跟當前最大值比較。
(b) 第一次的比較次數為 1,接下來每次都有三次比較,總共為 $3(\frac{n}{2}-1)+1=\frac{3}{2}n-2\lt 1.67n$
12.
(a) $f(n)=max\{f(n-1), f(i)+r_n\}$, i is the largest s.t. $l_n-l_i\gt T$, $f(0)=0, l_0=-\infty$
對於車站 n,如果不選擇在那裡開店,問題就變成「在前 n - 1 個車站開店的最大利潤是多少」,為 f(n-1);如果要開店,那上一間店就必須距離超過 T,利潤為 $f(i)+r_n$
最差的情況下,每次都得遍歷一遍找尋最大的 i,所以時間複雜度為 $O(n^2)$
(b) $f(n)=max\{f(n-1), f(n-T-1)+r_n\},f(i)=r_i\ \forall i\le T$
因為距離都一樣,所以就不需要遍歷了,因此可以在 O(n) 內算出。
13.
(a) 對於所有邊 (u, v),先用 FIND(u)==FIND(v) 判斷兩點是否連通。如果是,則必有環,此圖不為樹。如果不連通,那就執行 UNION(u, v),然後繼續下一條邊。時間複雜度為 O(nlgm)
(b) 原本的比較好。子樹的節點比較少,不代表它的高度比較矮,樹有可能因此失衡。
14.
(a) 下圖為兩個 center 和三個 diameter 的樹
```
O
|
O <--center
|
O <--center
/|\
O O O <--- 三個 diameter 的端點
```
(b) 不存在
如果樹存在兩個以上 center,則彼此會位於對方的最長路徑上。畫個圖就可以明白,假設 v 和 u 都是 center,v 到 O 的路徑為 v 的最長路徑,距離為 k:
```
v~~~~~~~~O
|
u
```
則 u 的最長路徑的長度一定超過 k,不可能為 center。
所以可以知道,若一個樹存在兩個 center,那一定是這種形式:
```
A~~~~~~~v~~u~~~~~~~~B
\______k___/
\____k_____/
```
v 最長到 B,u 最長到 A,假設距離為 k。如果有第三個 center,那一定位於 u 和 v 中間 (因為 center 要在彼此的最長路徑上):
```
A~~~~~~~v~~(((゚Д゚;)))~~u~~~~~~~~~B
```
如果那個中間的點是 center,那 u 跟 v 就不可能是 center。用簡單的數學就可以算出。假設兩點距離為 l,且 l 大於 1(不大於 1 中間就不會有點了)
```
/-l-\
A~~~~~~~v~~~u~~~~~~~~B
\______k___/
\____k_____/
```
假設那個點剛好在 v 旁邊好了,則它到 A 和 B 的距離分別為 $k-l+1$ & $k-1$,因為 $l\gt 1$,兩個數字都會小於 k,所以 u 和 v 都不會是 center,矛盾。
所以 center 最多只會有兩個
\(c\)
假設不在 diameter 上:
```
O---------------v------------------------O
|
|
|
(((゚д゚))) <--- center
|
|
...
```
則它跟 diameter 的匯集點 v 的 eccentricity 會比 center 來得小,矛盾。
15. 廢話很多,就只是 set cover problem。
(a) U={1,2,3,4,5,6} F={{1,2,3}, {1,4}, {2,5}, {3,6}}。用 greedy 會全部都選到,但其實只要選後三個就好了。
(b)
要證明它是 NP,不難,不贅述。證明它是 NP-hard,可用 vertex cover reduce。
給定一個圖 G=(V,E), let n = |V|, m = |E|
令 $U=\{u_1,u_2,u_3,...,u_m\}$, $F=\{f_1,f_2,f_3,...,f_n\}$
$\forall u_i\in U, \forall F_j\in F$, $u_i\in F_j$ if and only if $v_j$ is incident to $e_i$
則在 (U, F) 找一個 size 為 k 的 set cover 相當於在 G 中找 size 為 k 的 vertex cover。