110 年 國立成功大學資訊工程系碩士班《程式設計》
第 1 題10 分
Please show the level of the binary search tree constructed from the given preorder traversal: .
In a tree, each step from top to bottom is called a level. The level count starts at 1 and increments by 1 at each level or step.
登入後即可作答並保存紀錄。
核心觀念
二元搜尋樹(BST)中,每個節點的左子樹鍵值小於該節點,右子樹鍵值大於該節點。依序將前序走訪序列中的鍵值插入 BST,即可重建題目所指的樹。
根節點所在層級為第 1 層;每往下一條邊,層級增加 1。因此,樹的層數等於根節點到最深葉節點的邊數加 1。
解題方法
依序插入各鍵值:
- 為根節點。
- ,放在 左側; 且 ,放在 左側。
- ,放在 左側;,放在 左側。
- 但 ,放在 右側。
- ,放在 右側;,放在 左側;,放在 左側。
- ,放在 右側;,放在 右側。
建出的樹如下:
50 第 1 層
/ \
15 84 第 2 層
/ \ / \
11 22 80 90 第 3 層
/ / \
3 77 95 第 4 層
/
2 第 5 層
最深的節點是 。從根節點 到 經過 條邊,所以其層級為 。其他葉節點 、 都在第 4 層。
關鍵程式碼與複雜度
以下程式依序插入鍵值,並以遞迴計算樹的最大層數:
第 2 題10 分
Let the input be an array of unique characters along with their frequencies of occurrences, as shown in the following table. Please show the total bits of the constructed Huffman code.
| Character | A | L | G | O | R | I | T | H | M |
|---|---|---|---|---|---|---|---|---|---|
| Frequency | 12 | 3 | 13 | 23 | 1 | 5 | 16 | 21 | 6 |
登入後即可作答並保存紀錄。
核心觀念
霍夫曼編碼(Huffman coding)是一種依字元出現頻率建立的最佳前綴碼。每次取出頻率最小的兩個節點,合併成頻率為兩者總和的新節點,直到只剩一個根節點。
若字元 的頻率為 ,其霍夫曼碼長度為 ,總位元數為:
也可以直接將每次合併產生的新節點頻率加總,得到相同的總位元數。每次合併都會讓合併內兩個子樹中的每個字元多增加一個碼元,因此合併頻率正好是這次增加的位元數。
解題方法
將所有頻率放入最小堆積,每次取出最小的兩個頻率並合併:
| 合併步驟 | 取出的頻率 | 新頻率 |
|---|---|---|
| 1 | ||
| 2 | ||
| 3 | ||
| 4 | ||
| 5 | ||
| 6 | ||
| 7 | ||
| 8 |
因此,總位元數等於所有新頻率的總和:
可用碼長度加權和驗算。依照上述合併順序,各字元的碼長度如下:
Assume that you have to store the four strings “abcdef”, “bcdefa”, “cdefab”, and “defabc” in the hash table by using the hashing technique.
The ASCII values of a, b, c, d, e, and f are 97, 98, 99, 100, 101, and 102, respectively.
第 3-(1) 題5 分
Consider the hash function: the index for a specific string is equal to the sum of the ASCII values of its characters modulo 11. Please determine how many collisions occur if we use this hash function.
登入後即可作答並保存紀錄。
核心觀念
雜湊函數會把鍵值映射到雜湊表索引。本題的雜湊函數為
當不同字串映射到相同索引時,就發生碰撞。
解題方法
四個字串都是 abcdef 的字元輪替,因此每個字串都包含 a 到 f 各一次,ASCII 值總和相同:
計算雜湊索引:
第 3-(2) 題5 分
Consider the hash function: the index for a specific string is equal to the sum of the ASCII values of its characters multiplied by their respective order in the string, after which the sum is modulo 11. Please determine how many collisions occur if we use this hash function.
登入後即可作答並保存紀錄。
核心觀念
雜湊函數會把字串映射到雜湊表的索引。若兩個不同字串得到相同索引,就發生一次碰撞。本題的雜湊函數為
其中 是字元在字串中的位置,從 開始計算。要計算碰撞數,只需找出四個字串各自的索引,再檢查是否有重複索引。
解題方法
依照各字串中每個字元的位置,將 ASCII 值乘上位置權重後加總,再取模 。
「abcdef」
「bcdefa」
「cdefab」
Consider the following algorithm:
for (; ; )
;
for (; ; )
;
cout ;
第 4-(1) 題5 分
What is the output when ?
登入後即可作答並保存紀錄。
核心觀念
這題考的是 for 迴圈的執行範圍,以及等差級數求和。每次迴圈都會把目前的 加到 sum 中;題目片段沒有寫出 sum 的宣告,依題意它是用來累加的變數,初始值為 (若初值為 ,輸出就是 )。
解題方法
當 時,第一個迴圈從 執行到 ,累加 至 :
第二個迴圈從 倒數至 ,累加 至 :
因此輸出為:
關鍵程式碼與複雜度
第 4-(2) 題5 分
What is the time complexity ?
登入後即可作答並保存紀錄。
核心觀念
本題考查迴圈的執行次數與漸進時間複雜度。若每次迴圈執行的工作量為常數,執行 次的迴圈需要 時間;依序執行的程式,其總時間是各部分時間的總和。
解題方法
第一個迴圈的索引從 遞增至 ,因此執行 次:
第二個迴圈的索引從 遞減至 ,因此執行 次:
兩個迴圈依序執行,再加上最後輸出的常數時間,總時間為:
🖼️【此處有附圖,請對照原卷】
第 5 題10 分
Please show the cost of the minimum cost spanning tree for the given graph.
圖看不清楚?展開原卷第 2、3 頁核對
登入後即可作答並保存紀錄。
核心觀念
最小成本生成樹(MST)要在連通圖中選出連接所有頂點、且不含環的邊,使總權重最小。含 個頂點的生成樹恰有 條邊;Kruskal 演算法依邊權重由小到大檢查,只有在加入後不會形成環時才選取。
解題方法
圖中有六個頂點 至 ,邊與權重為:、、、、、、、、。依 Kruskal 演算法由小到大選邊:
| 權重 | 邊 | 處理結果 |
|---|---|---|
| 2 | 選取 | |
| 2 | 選取 |
Use the master method to give tight asymptotic bounds for the following recurrences. If the master method does not apply, point this out and explain.
第 6-(1) 題3 分
登入後即可作答並保存紀錄。
核心觀念
主定理用來分析形如
的遞迴式。先比較非遞迴項 與臨界項 :
- 若 與 同階,主定理第二種情況給出 。
- 此處假設 ,且 足夠大。
解題方法
本題中 、,而 。計算臨界項:
第 6-(2) 題3 分
登入後即可作答並保存紀錄。
核心觀念
主定理(Master Theorem)適用於形式為
的遞迴式,其中 、 為常數。本題的遞迴呼叫是 ,問題規模每次減少 ,不符合主定理的分治形式,因此不能直接套用主定理。
解題方法
假設基底條件為 。逐層展開遞迴式:
因此,只需估計總和 。
先給上界。對所有 ,都有 ;總共至多 項,所以
第 6-(3) 題3 分
登入後即可作答並保存紀錄。
核心觀念
本題考察主定理(Master Theorem)。對遞迴式
先比較 與 。本題中 、,且 。
解題方法
先計算遞迴子問題所對應的基準項:
因為 ,可取 。因此:
接著檢查主定理第三種情況所需的正則條件:
第 6-(4) 題3 分
登入後即可作答並保存紀錄。
核心觀念
這題考查主定理(Master Theorem),特別是遞迴式中非遞迴成本與臨界項同階、且多出對數因子的情況。
對遞迴式
先比較 與臨界項 。若
則主定理的延伸形式給出
解題方法
本題中 、,因此臨界項為
非遞迴成本是
它與臨界項同階,並多出一個 因子,符合上述主定理延伸形式,取 ,得到
第 6-(5) 題3 分
登入後即可作答並保存紀錄。
核心觀念
主定理(Master Theorem)適用於
先比較非遞迴成本 與臨界函數 。本題中 、、,因此臨界函數為
解題方法
因為 ,所以 ,進而有
Answer True or False for each of the following statements and justify your reasons.
第 7-(1) 題3 分
If an NP-complete problem can be reduced to a problem in polynomial time, then is NP-complete.
登入後即可作答並保存紀錄。
核心觀念
問題考查多項式時間多對一歸約與 NP 完全的定義。
若問題 可在多項式時間歸約到問題 ,記作 ,表示存在一個多項式時間可計算的轉換 ,使得對每個輸入 :
若 是 NP 完全問題,且 ,便能推出 至少和所有 NP 問題一樣難,因此 是 NP-hard。但要稱 為 NP-complete,還必須證明 。
解題方法與敘述判斷
題目只給出「某個 NP 完全問題可多項式時間歸約到 」,沒有提供 的條件。因此,只能確定 是 NP-hard,不能直接確定 是 NP 完全。
反例可取停機問題 。可將任一布林公式 在多項式時間內轉換成一台機器:它依序檢查變數的指派,若找到滿足 的指派就停機。於是:
第 7-(2) 題3 分
If a problem can be reduced to a problem and , then .
登入後即可作答並保存紀錄。
核心觀念
採用標準的多項式時間 many-one 歸約: 表示存在一個可在多項式時間內計算的函數 ,使得對每個輸入 ,
這表示只要能在多項式時間內判定 ,就能先計算 ,再判定 是否屬於 ,進而在多項式時間內判定 。因此,歸約能推出的方向是:
解題方法
題目給的是 ,但要推出的是 。這和歸約的推論方向相反,不能由 可有效判定,就斷定 也可有效判定。
可用反例直接否定此敘述:令 ,即不包含任何字串的問題。因為每個輸入都不屬於 ,判定 只需固定回答「否」,所以 。
第 7-(3) 題3 分
If a problem , then .
登入後即可作答並保存紀錄。
核心觀念
是可由確定型演算法在多項式時間內判定的問題類別; 是可由非確定型演算法在多項式時間內判定的問題類別。等價地,若答案為「是」, 中的問題能在多項式時間內驗證一份多項式長度的證明。
解題方法
若 ,就存在一個確定型多項式時間演算法 ,能判定任意輸入 是否屬於 。要證明 ,可以直接讓非確定型演算法執行 ;因為確定型演算法也是非確定型演算法的一種特例,執行時間仍是多項式時間。
第 7-(4) 題3 分
If , there exists a 2-approximation algorithm for the general traveling-salesman problem.
登入後即可作答並保存紀錄。
核心觀念
近似演算法通常要求在多項式時間內,輸出一個可行解,且解的成本不超過最佳解的固定倍數。對最小化問題而言,-近似演算法必須滿足:
「一般旅行推銷員問題」不要求邊權重滿足三角不等式。這點很重要:不具三角不等式時,任意兩點間的成本可能遠高於繞路成本,不能直接套用度量旅行推銷員問題的近似保證。
解題方法
從哈密頓迴圈問題歸約。給定一張有 個頂點的無向圖 ,建立一個含相同 個頂點的完全圖:
- 若兩頂點在 中有邊,令其旅行成本為 。
- 若兩頂點在 中沒有邊,令其旅行成本為 。
若 有哈密頓迴圈,該迴圈在新圖中的成本是 ,所以最佳旅行成本為 。假設存在 -近似演算法,它輸出的旅行成本至多為 。
第 7-(5) 題3 分
The maximum number of elements in a heap of height is .
登入後即可作答並保存紀錄。
核心觀念
二元堆積(binary heap)是一棵完全二元樹:除最後一層外,各層皆滿;最後一層由左至右排列。樹的「高度」通常定義為根到最深節點所經過的邊數,因此根的高度為 。
解題方法
高度為 時,最深的一層是第 層。若每層都填滿,各層節點數依序為 ,所以最大節點數為:
Given three strings , , and , we say that is a shuffle of and if it contains all characters of and , and the left-to-right ordering of the characters from and the characters from is preserved. For example, “NcCKsiUe” is a shuffle of “NCKU” and “csie”.
The dynamic programming algorithm uses a table to check , , and , where is true if and only if the first characters of are a shuffle of the first characters of together with the first characters of .
第 8 題10 分
Complete the following pseudocode for checking whether is a shuffle of and by filling in (1), (2), and (3). Please use C-style expressions.
isShuffle()
Let be a new table.
if
return false
for to
____ (1) (3%)
for to
____ (2) (3%)
for to
for to
____ (3) (4%)
return
登入後即可作答並保存紀錄。
核心觀念
這題考「交錯字串」的動態規劃。 是 與 的 shuffle,表示 、 的所有字元都要出現在 中,而且各自原有的先後順序必須保留。
題目定義:
當且僅當 的前 個字元,能由 的前 個字元與 的前 個字元交錯組成。
若 成立,最後一個字元 必須來自 或 :
- 若來自 ,必須有 ,且前面的部分符合 。
- 若來自 ,必須有 ,且前面的部分符合 。
解題方法
先檢查長度是否相符。交錯後的字串長度必須滿足 ;長度不同即可直接回傳 false。
初始化邊界時:
- 只使用 的字元,因此必須從 延續,並確認 與 相同。
- 只使用 的字元,因此必須從 延續,並確認 與 相同。
Consider the given directed graph.
🖼️【此處有附圖,請對照原卷】
The Floyd-Warshall algorithm can solve the all-pairs shortest-paths problem on a directed graph . Let be the weight of a shortest path from vertex to vertex for which all intermediate vertices are in the set , and let be an matrix. The Floyd-Warshall algorithm computes from as follows.
第 9-(1) 題2 分
What is the time complexity of the Floyd-Warshall algorithm?
圖看不清楚?展開原卷第 4 頁核對
登入後即可作答並保存紀錄。
核心觀念
Floyd–Warshall 是計算所有頂點配對最短路徑的動態規劃演算法。它逐一把頂點 納入可作為中繼點的集合,更新每一對頂點 的最短距離:
解題方法
圖中是頂點 至 的有向加權圖;本小題問演算法的時間複雜度,與圖上實際的邊權值無關。演算法有三層迴圈:依序選擇中繼點 ,再枚舉起點 與終點 。
第 9-(2) 題3 分
Complete the following formula:
圖看不清楚?展開原卷第 4 頁核對
登入後即可作答並保存紀錄。
核心觀念
本題考 Floyd–Warshall 演算法的動態規劃遞迴式。 表示從頂點 到頂點 ,且所有中間頂點都只能取自 時的最短路徑長度。
解題方法
原圖是頂點 至 的有向加權圖。本小題要求的是通用遞迴式,圖上的邊權不需代入計算。
考慮最短路徑是否經過頂點 作為中間頂點:
- 若不經過 ,路徑中間頂點只在 ,長度為 。
- 若經過 ,路徑可拆成 到 、再由 到 兩段;
第 9-(3) 題5 分
Let be the length of the shortest path from node to node . What is ?
圖看不清楚?展開原卷第 4 頁核對
登入後即可作答並保存紀錄。
核心觀念
本題考有向圖的最短路徑。Floyd–Warshall 允許邊權為負時,仍可求所有點對的最短距離;前提是圖中沒有負權重環。其遞迴式為
時間複雜度為 ,空間複雜度為 。
解題方法
圖中與計算相關的有向邊為: 權重 、 權重 、 權重 、 權重 、 權重 、 權重 、 權重 、 權重 、 權重 、 權重 。
從終點 5 反向計算各點到 5 的最短距離。由圖可得: