109 年 國立成功大學人工智慧科技碩士學位學程《程式設計》
第 1 題30 分
Answer True or False for the following statements. Give correct answers for False statements.
(1) In static hashing, the worst-case number of comparisons needed for a successful search is for open addressing. The number could be reduced to by using balanced search tree.
(2) Let be the degree of vertex in a graph with and , then .
(3) The path from vertex to vertex on a minimal cost spanning tree of an undirected graph is also a shortest path from to .
(4) Let be a graph with edges and vertices. If is represented by adjacency lists, DFS requires time.
(5) If an AOV network represents a feasible project, its topological order is not unique.
登入後即可作答並保存紀錄。
這題主要測試對資料結構基本概念的理解,涵蓋雜湊表、圖論、最小生成樹、圖的遍歷以及拓撲排序。
(1) 靜態雜湊(Static Hashing)中的開放定址法(Open Addressing)在最壞情況下,成功搜尋的比較次數確實可能達到 。然而,將搜尋時間降低到 通常是藉由使用平衡搜尋樹(如 AVL 樹或紅黑樹)來實現,而非靜態雜湊。因此,前半句陳述是正確的,後半句將 的時間複雜度歸因於雜湊或平衡搜尋樹的應用,但若是在指靜態雜湊本身,則不正確。若題目意指「一般情況下」,雜湊表的搜尋可以接近 ,但最壞情況確實是 。與平衡搜尋樹的 比較,若是指雜湊表無法透過靜態雜湊達到 ,則敘述可能誤導。然而,若將 "balanced search tree" 作為一種獨立的資料結構來看,其搜尋時間為 ,與雜湊表(最壞 )不同。此題的陳述「The number could be reduced to by using balanced search tree」是正確的,表示存在另一種結構(平衡搜尋樹)能達成此時間複雜度,但不表示雜湊表本身能。
判斷:True
(2) 圖論中的握手定理(Handshaking Lemma)指出,一個圖中所有頂點的度數之和等於邊數的兩倍,即 。題目中的求和上限為 ,且沒有乘以 2,因此是錯誤的。
判斷:False
修正: 在圖 中,所有頂點的度數之和等於邊數的兩倍,即 。
第 2 題10 分
A Bloom Filter consists of bits of memory and uniform and independent hash functions . Each hashes a key to an integer in the range . Initially all filter bits are zero, and the data set is empty. When key is added to the data set, bits of the filter are set to 1. When a query "Is key in the data set?" is made, bits are examined. The query answer is "maybe" if all these bits are 1. Otherwise, the answer is "no." A filter error occurs whenever the answer is "maybe" and the key is not in the data set. Assume that key is an integer in the range and updates are made. Compute the probability of filter error for an arbitrary query after the -th update.
登入後即可作答並保存紀錄。
核心觀念
本題旨在考驗資料結構中 布隆過濾器(Bloom Filter) 的運作原理及其 假陽性率(False Positive Rate,即題目所稱的 filter error probability) 之機率推導。
涉及的關鍵定義與機率原理包括:
- 獨立均勻雜湊假設(Simple Uniform Hashing Assumption):
每個雜湊函式 將任意鍵值(key)映射至長度為 的位元陣列中任一位置的機率均為 ,且各次雜湊相互獨立。 - 位元未被設為 1 的機率:
單一鍵值在單一雜湊函式作用下,未選中某特定位元的機率為 。 - 假陽性(False Positive)發生的充分必要條件:
當待查詢的鍵值 不在集合中,但其對應的 個雜湊位置 恰好全部都被先前的加入操作設為 1 時,系統會錯誤回答「maybe」,此即為布隆過濾器的錯誤(filter error)。 - 常用極限近似公式:
當 甚大時,利用重要極限 ,可將機率以指數形式表示。
解題方法
題目設定:
- 位元陣列大小為 。
- 共有 個獨立且均勻的雜湊函式。
- 經過 次更新(新增元素操作)。
- 現對一任意鍵值進行查詢,求發生過濾器錯誤(filter error)的機率。
步驟一:單一更新事件對某特定位元的影響
考慮陣列中的任意特定位元 (例如第 個位元,其中 ):
- 某一次新增操作中,一個雜湊函式選中位元 的機率為 。
- 該雜湊函式「未選中」位元 的機率為:
步驟二:經過 次更新後,某特定位元仍為 0 的機率
每次更新使用 個獨立的雜湊函式,因此 次更新共執行了 次獨立的雜湊位元選取。
該特定位元 在所有 次雜湊選取中皆未被選中的機率為:
若採用指數逼近法(當 很大時):
第 3 題10 分
Consider the following graph:
🖼️【此處有附圖,請對照原卷】
Compute minimum cost and construct minimum spanning tree.
登入後即可作答並保存紀錄。
核心觀念
本題要求建構加權無向圖的最小生成樹(Minimum Spanning Tree, MST)。最小生成樹必須:
- 包含所有頂點;
- 不形成迴圈;
- 若有 個頂點,必須恰有 條邊;
- 所有邊權重總和最小。
本圖共有 個頂點,因此最小生成樹應包含 條邊。採用 Kruskal 演算法,依邊權重由小到大選邊;若加入某邊會形成迴圈,就捨棄該邊。
圖中邊與權重
依原圖頂點標記,邊如下:
解題方法:Kruskal 演算法
依權重排序並逐邊判斷:
| 權重 | 邊 | 判斷 | 原因 |
|---|---|---|---|
| 7 | 選取 | 連接兩個不同頂點 | |
| 9 | 選取 | 不形成迴圈 | |
| 12 | 選取 | 不形成迴圈 |
第 1 題10 分
Is ? Is ?
登入後即可作答並保存紀錄。
這題主要測試對漸進符號 (大 O 符號)的定義和理解,特別是對於指數函數的判斷。
核心概念:
一個函數 被稱為 (讀作 是 of )是指存在正常數 和 ,使得對於所有 ,都有 成立。簡單來說,就是 的成長速度不超過 的常數倍。
第一小題:Is ?
我們需要判斷 的成長速度是否不超過 的常數倍。
根據 的定義,我們尋找常數 和 ,使得對於所有 ,都有 。
我們可以這樣簡化 :
現在我們將這個結果代入不等式:
為了使這個不等式成立,我們可以選擇 。
那麼,不等式變為:
這個不等式對於所有 都成立。
因此,我們找到了常數 和 (或者任何 都可以),使得對於所有 ,都有 。
結論: 是的,。
第二小題:Is ?
我們需要判斷 的成長速度是否不超過 的常數倍。
第 2 題10 分
Give asymptotic upper and lower bound for . Assume that is constant for sufficiently small . Make your bounds as tight as possible.
登入後即可作答並保存紀錄。
核心觀念
本題考遞迴式的漸近界。關鍵在於把整個 除以 ,觀察每層遞迴工作量如何累積;遞迴參數每次開平方,直到落入基底範圍。
解題方法
令 。將原式兩邊除以 :
每遞迴一次, 增加 。若連續開平方 次,參數變成 。遞迴在此參數進入固定的基底範圍時停止,因此 滿足:
取對數可得 ,所以:
第 3 題10 分
Show how the time complexity of quicksort can be made to run in time.
登入後即可作答並保存紀錄。
核心觀念
Quicksort 每次選擇一個 pivot,利用 partition 將資料分成兩部分:
- 小於 pivot 的元素
- 大於 pivot 的元素
若兩部分大小分別為 與 ,則遞迴式為
其中 是一次 partition 的成本。
Quicksort 的效率關鍵在於 pivot 是否能將資料分得平均:
- 分割接近平衡:時間複雜度為
- 每次都分成 與 :時間複雜度退化為
因此,本題要求的是設計 pivot 選擇方式,使遞迴樹高度維持在 。
解題方法:每次選取中位數作為 pivot
每次 partition 前,使用線性時間的選擇演算法找出目前子陣列的真正中位數,將它作為 pivot。
若目前有 個元素,選出的中位數會將資料分成大小約為 的兩部分,因此:
使用 Master Theorem:
因此屬於同階情況:
遞迴樹推導
在遞迴樹的每一層,所有子問題的元素總數仍為 ,所以該層 partition 的總成本為 。
由於每次都近似平分資料,遞迴樹高度為:
因此總成本為:
關鍵虛擬碼
QUICKSORT(A, low, high):
if low >= high:
return
pivotValue = LINEAR_TIME_MEDIAN(A, low, high)
p = PARTITION(A, low, high, pivotValue)
QUICKSORT(A, low, p - 1)
QUICKSORT(A, p + 1, high)
其中:
PARTITION必須在 時間內完成LINEAR_TIME_MEDIAN使用線性時間的中位數選擇演算法,例如 median-of-medians- 每次選出的 pivot 都是目前子陣列的真正中位數
第 4 題10 分
Determine an Longest Common Subsequence of and .
登入後即可作答並保存紀錄。
核心觀念
本題考的是最長共同子序列(Longest Common Subsequence, LCS)。
子序列可以刪除原序列中的部分元素,但不能改變剩餘元素的相對順序;它不要求元素連續。
令
定義 為 的前 個元素與 的前 個元素之 LCS 長度。
其遞迴公式為:
邊界條件為:
解題方法:動態規劃
將兩個序列逐項比較,建立以下 DP 表:
| 0 | 1:0 | 2:1 | 3:0 | 4:1 | 5:1 | 6:0 | 7:1 | 8:1 | 9:0 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1:1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 2:0 | 0 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| 3:0 | 0 | 1 | 1 | 2 | 2 | 2 | 3 | 3 | 3 | 3 |
| 4:1 | 0 | 1 | 2 | 2 | 3 | 3 | 3 | 4 | 4 | 4 |
| 5:0 | 0 | 1 | 2 | 3 | 3 | 3 | 4 | 4 | 4 | 5 |
| 6:1 | 0 | 1 | 2 | 3 | 4 | 4 | 4 | 5 | 5 | 5 |
| 7:0 | 0 | 1 | 2 | 3 | 4 | 4 | 5 | 5 | 5 | 6 |
第 5 題10 分
If possible, use the master method to solve .
登入後即可作答並保存紀錄。
核心觀念
本題考查演算法中利用**大師定理(Master Theorem)**求解遞迴關係式(Recurrence Relation)的時間複雜度。
大師定理適用於形式如下的遞迴式:
其中常數滿足 且 。其核心精神是比較「遞迴樹葉節點總成本」與「各層合併成本 」的大小關係,決定性指標為 與 :
- Case 1(葉節點成本主導):
若存在常數 ,使得 ,則: - Case 2(各層成本均勻分布):
若存在常數 ,使得 ,則: (當 時,,則 ) - Case 3(根節點合併成本主導):
若存在常數 ,使得 ,且滿足平滑條件/正則條件(Regularity Condition,即存在常數 且對足夠大的 恆滿足 ),則:
解題方法
給定遞迴關係式: