109 年 國立臺灣大學電信工程學研究所丙組《資料結構與演算法》
第 1 題
In this exam:
The height of a singleton tree is defined as 0.
The order of a node in a tree is defined as the number of its children.
The order of a tree is defined as the maximum order among its nodes.
Unless otherwise specified, all logarithms are taken with respect to base 2, i.e., log2.
一、(20%)是非題(每題2分,答錯每題倒扣1分至本大題0分止)
- Given a connected graph G = (V, E), if a vertex v∈V is visited during level k of a breadth-first
search from source vertex s ∈V, then every path from s to v has length at most k.
登入後即可作答並保存紀錄。
核心觀念
本題考查廣度優先搜尋(Breadth-First Search, BFS)的分層性質:
- BFS 從來源頂點 開始,第 層為 。
- 第 層的頂點,其到 的最短距離為 。
- 因此,若頂點 在第 層被拜訪,則:
這表示存在一條長度為 的路徑從 到 ,且不存在長度小於 的路徑。
解題方法
題目敘述為:
若頂點 在從 開始的 BFS 第 層被拜訪,則從 到 的每一條路徑長度至多為 。
BFS 的正確性質是:
因為若存在某條路徑長度小於 ,BFS 應該會在更早的層數發現 。
但題目說的是「每一條路徑長度至多為 」,也就是要求:
第 2 題
- Depth-first search will take time on a graph G = (V, E) represented as an adjacency
matrix.
登入後即可作答並保存紀錄。
核心觀念
深度優先搜尋(Depth-First Search, DFS)的時間複雜度取決於圖的表示方式。
- 使用 adjacency list:DFS 時間複雜度為 。
- 使用 adjacency matrix:為了找出某一頂點的所有鄰接頂點,必須掃描該頂點對應的整列矩陣,共 個位置。
雖然圖中實際邊數為 ,adjacency matrix 仍會逐一檢查所有可能的邊,因此其時間複雜度通常為 。
解題方法
DFS 對每個頂點至多拜訪一次。若圖以 adjacency matrix 表示,當 DFS 拜訪頂點 時,必須檢查:
以判斷 是否與其他頂點相鄰。因此,處理一個頂點需要 時間。
最多有 個頂點被拜訪,總時間為:
若圖不連通,完整 DFS 通常會以迴圈檢查所有頂點是否已拜訪;這部分需要 ,仍被 主導。
此外,adjacency matrix 本身需要儲存 個位置,因此空間複雜度為:
選項分析
題目只有一個是非敘述:
第 3 題
- In a weighted undirected graph G = (V, E, w), breadth-first search from a vertex s finds single-
source shortest paths from s (via parent pointers) in time.
登入後即可作答並保存紀錄。
核心觀念
廣度優先搜尋(BFS)依照「邊數」由少到多探索頂點,因此能保證的是:
- 在無權圖,或每條邊權重皆相同的圖中,找到從起點 到各頂點的最短路徑。
- BFS 的時間複雜度為 。
但加權圖的最短路徑是依據總權重判定,而非邊數。從 到頂點 的路徑權重為:
BFS 只會選擇邊數較少的路徑,無法處理不同邊權重造成的差異。
解題方法
判斷此敘述是否正確,必須檢查 BFS 的最短路徑性質是否適用於「weighted undirected graph」。
取一個無向加權圖:
- 邊 的權重為
- 邊 的權重為
- 邊 的權重為
從 到 有兩條路徑:
- 直接路徑 :
- 間接路徑 :
因此真正的加權最短路徑是:
然而 BFS 依照邊數探索:
第 4 題
- In a weighted undirected tree G = (V, E, w), breadth-first search from a vertex s finds single-
source shortest paths from s (via parent pointers) in time.
登入後即可作答並保存紀錄。
核心觀念
本題考查「樹的唯一路徑性質」與「廣度優先搜尋(BFS)的時間複雜度」。
對任意樹 :
- 樹是連通圖。
- 樹不含環。
- 任意兩個頂點之間恰有一條簡單路徑。
- 因此,從起點 到任意頂點 的路徑是唯一的。
若邊具有權重,路徑長度定義為該路徑上所有邊權重的總和:
在標準假設下,邊權重為非負數。由於樹中不存在另一條路徑可供比較,這條唯一路徑自然就是從 到 的最短路徑。
解題方法
BFS 從 開始走訪圖形,當頂點 第一次被發現時,記錄其父節點 。
由於原圖本身就是樹:
- 到 的路徑唯一。
- BFS 所記錄的 parent pointers 會形成一棵以 為根的樹。
- 從 沿著 parent pointers 回溯至 ,所得路徑必定是原樹中唯一的 – 路徑。
- 該路徑因此就是 到 的最短路徑。
加權距離可在 BFS 發現新頂點時一併計算:
若 是由 發現,則設定:
因為 到 的唯一路徑就是「 到 的唯一路徑」接上邊 ,所以此遞迴式所得的 正確。
時間複雜度分析
第 5 題
- In a weighted undirected tree G = (V, E, w), depth-first search from a vertex s finds single-
source shortest paths from s (via parent pointers) in time.
登入後即可作答並保存紀錄。
核心觀念
本題考查樹的結構與單源最短路徑(Single-Source Shortest Paths, SSSP):
- 樹是連通且無環的無向圖。
- 任意兩個頂點之間恰好存在唯一一條簡單路徑。
- 因此,從起點 到任意頂點 的唯一路徑,必然也是最短路徑;不需要比較其他路徑。
- DFS 的 parent pointers 會記錄從 出發搜尋時所形成的樹狀父子關係。在原圖本身就是樹的情況下, 往上追溯 parent pointers,正好得到 到 的唯一路徑。
邊權重不影響上述結論。即使邊權為負數,樹中仍然沒有環,因此不會產生負權環;唯一的 – 路徑仍然是唯一可行路徑。
解題方法
從頂點 執行 DFS,對每個被首次拜訪的頂點 設定其父節點:
其中 是 DFS 從 到達 時的前一個頂點。
由於 是樹, 到 只有唯一一條路徑:
DFS 所建立的 parent chain 也必然是這條唯一路徑。因此,從 反覆追蹤 parent pointers 回到 ,即可得到 到 的最短路徑。
若要同時計算距離,可在 DFS 遍歷邊 時設定:
初始條件為:
由於每個頂點到 的路徑唯一,這個距離就是最短距離:
第 6 題
- Dijkstra's shortest-path algorithm may relax an edge more than once in a graph with a cycle.
登入後即可作答並保存紀錄。
觀念解析與推導
Dijkstra 演算法適用於非負權重圖(graphs with non-negative edge weights)。在標準 Dijkstra 演算法執行過程中:
第 7 題
- Given a weighted directed graph G = (V, E, w) and a source s∈V, if G has a negative-weight
cycle somewhere, then the Bellman-Ford algorithm will always compute an incorrect result for
some d(s,v).
登入後即可作答並保存紀錄。
核心觀念
此題在測驗你對 Bellman‑Ford 演算法 與 負權回路 (negative‑weight cycle) 之關係的理解。關鍵在於判斷:只要圖中存在負權回路,演算法就一定會在某個頂點的最短路徑估計 上出錯,還是只有在負權回路 可從源點 到達 時才會產生錯誤。
解題步驟與說明
-
回顧 Bellman‑Ford 的基本性質
- 演算法在 次鬆弛 (relax) 後,若沒有負權回路,所有 都等於從 到 的最短路徑長度。
- 第 次鬆弛若仍能改變某條邊的距離,則圖中必存在 負權回路,且該回路必 可從 到達(因為只有可達的回路才會影響 )。
-
負權回路不一定可達的情況
- 若負權回路位於圖的某個「孤立」子圖,且 沒有任何路徑從 指向該子圖,則在鬆弛過程中這些頂點的距離永遠不會被更新(仍是 ),因此不會影響任何 的正確性。
- 演算法仍會在第 次鬆弛時偵測到負權回路,然而它只會報告「存在負權回路」而不會改變已正確計算出的 。
-
構造反例證明敘述錯誤
考慮有向圖 ,其中
第 8 題
- In a weighted directed graph G = (V, E, w) containing no zero- or positive-weight cycles,
Bellman-Ford can find a longest (maximum-weight) path from vertex s to vertex t.
登入後即可作答並保存紀錄。
核心觀念
本題考查:
- Bellman-Ford 演算法原本求的是單源最短路徑。
- 最長路徑問題可透過「邊權重取負」轉換為最短路徑問題。
- 負環會使最短路徑不存在;相對地,原圖中的正環會使最長路徑不存在。
- 題目保證圖中沒有零權重環與正權重環,因此所有環的總權重皆為負。
若一條路徑包含負權重環,移除該環後,路徑總權重反而會增加。因此最大權重路徑必定不需要包含任何環,可視為一條簡單路徑。
解題方法
將原圖 中每條邊的權重改為:
對任意一條從 到 的路徑 ,其新權重為:
因此:
也就是說,原圖中的最大權重路徑,等價於負權重轉換後圖中的最短路徑。
接著檢查環的性質。原圖任一環 滿足:
取負後得到:
所以轉換後的圖不存在負權重環。Bellman-Ford 正好能在含負邊、但不含負環的圖中,求出單源最短路徑。
求得轉換後的最短距離 後,原圖中的最大路徑權重為:
前提是 從 可達;若不可達,則不存在從 到 的路徑。
選項分析
題目只有一個是非敘述:
第 9 題
- In a weighted directed graph G = (V,E,w) containing a negative-weight cycle, running the
Bellman-Ford algorithm from s will find a shortest acyclic path from s to a given destination
vertex t.
登入後即可作答並保存紀錄。
核心觀念
本題在測驗「負權環 (negative‑weight cycle)」對 Bellman‑Ford 演算法的影響。
- 若圖中存在可由起點 到達的負權環,則從 到任意可被該環觸及的終點 的最短路徑權重會趨向 (可無限次迴圈降低路徑長度)。
- Bellman‑Ford 在第 轮鬆弛後,只能保證找出 沒有負權環 的圖的最短路徑;若存在負權環,演算法只能偵測到它,而無法給出有限的最短路徑。
解題過程
-
回顧 Bellman‑Ford 的保證
- 在沒有負權迴路的情況下,經過 次鬆弛,所有最短路徑(必為簡單路徑,亦即不含重複頂點的無環路徑)會被正確求得。
- 再做第 次鬆弛,如果仍有距離可被縮短,表示圖中存在 負權迴路,且該迴路可從 到達。
-
負權迴路的影響
- 設有負權迴路 ,其總權重 。如果 可從 走到且再走到 ,則可以在 的路徑中任意次數重複 ,使路徑權重趨向 。
- 因此,不存在 有限且唯一的「最短」路徑;最短路徑的概念在此情況下退化為「無下界」。
-
Bellman‑Ford 是否會回傳「最短無環路徑」?
- 演算法在第 輪鬆弛後,所得到的距離值僅是 某一條不含環的路徑 的權重上界。若存在負權迴路,該上界不一定是最小的,甚至可能比真實的「最短」(即 ) 大。
- 在第 輪檢測到負權迴路後,標準的 Bellman‑Ford 會報告 “負權迴路存在”,而不會返回任何最短路徑。
第 10 題
- Given a weighted directed graph G = (V, E, w) and a shortest path p from s to t, if we doubled.
the weight of every edge to produce G' = (V, E,w'), then p is also a shortest path in G'.
登入後即可作答並保存紀錄。
核心觀念
本題考查「所有邊權重同乘正數後,最短路徑是否保持不變」。
一條路徑 的總權重定義為其所經過所有邊權重的總和:
題目將每條邊的權重加倍,因此對所有邊 :
因此任一路徑 在新圖 中的權重為:
也就是說,所有路徑的總權重都同時乘上 。
解題方法
已知 是原圖 中從 到 的最短路徑,因此對任意其他從 到 的路徑 ,皆有:
因為 ,將不等式兩邊同乘 ,不等號方向不變:
又由前述關係:
所以:
第 11 題
二、(64%)單選題(每題2分,答錯不倒扣)
Please choose the best possible answer in each of the following questions. In questions that ask for
time complexities, please choose the tightest bound.
- In a binary heap of size n, the worst case time complexity of one insert operation is
(A)0(1)
(B) O(log*n)
(C) O(log n)
(D) O(n)
(E) O(n log n)
登入後即可作答並保存紀錄。
核心觀念
二元堆(binary heap)是一棵具備完全二元樹形狀的樹,並滿足堆序性:
- Max-heap:父節點值不小於子節點。
- Min-heap:父節點值不大於子節點。
插入元素時,通常分成兩個步驟:
- 將新元素放在陣列末端,以維持完全二元樹的形狀。
- 若違反堆序性,便與父節點交換,持續向上調整,稱為
sift-up或bubble-up。
二元堆的高度為:
解題方法
新元素最壞情況下可能具有極大值(max-heap)或極小值(min-heap),因此必須一路從葉節點交換到根節點。
每次向上移動一層只需 時間,而最多移動堆的高度:
此外,確實存在某些插入情況需要移動 層,因此最壞情況的緊確複雜度為:
題目要求選擇最緊確的上界,因此選擇 。
選項分析
- (A) :錯誤。
插入後可能需要將元素一路向上調整至根節點,最多交換 次,不是固定時間。
第 12 題
- In a binary heap of size n, the worst case time complexity of one find-min operation is
(A)0(1)
(B) O(log*n)
(C) O(log n)
(D) O(n)
(E) O(n log n)
登入後即可作答並保存紀錄。
核心觀念
二元堆(binary heap)是一棵完全二元樹,並滿足堆序性。若題目執行 find-min,通常指的是最小堆(min-heap):
- 每個父節點的鍵值都小於或等於其子節點。
- 因此,全體元素中的最小值必定位於根節點。
- 根節點的位置固定,通常以陣列索引 儲存。
所以,find-min 只需要直接讀取根節點,不必搜尋其他節點。
解題方法
在最小堆中:
取得陣列第一個元素只需一次索引存取,因此執行時間為
最壞情況與最好情況都相同,因為無論堆的內容如何排列,最小值都固定在根節點。
因此答案為:
選項分析
-
(A) :正確。
最小堆的最小值位於根節點,直接讀取根節點即可完成find-min。 -
(B) :錯誤。
是反覆取對數的次數,常見於某些特殊演算法;
第 13 題
- In a binary heap of size n, the worst case time complexity of one decrease-key operation is
(A)0(1)
(B) O(log*n)
(C) O(log n)
(D) O(n)
(E) O(n log n)
登入後即可作答並保存紀錄。
核心觀念
Binary heap 是一棵具有完整二元樹結構的 heap。大小為 時,其高度為
以 min-heap 為例,decrease-key 將某個節點的鍵值減小後,可能違反「父節點鍵值不大於子節點」的 heap-order property,因此必須將該節點向上移動,直到恢復 heap 性質。
解題方法
decrease-key 的處理流程如下:
- 將指定節點的鍵值減小。
- 比較該節點與父節點的鍵值。
- 若該節點小於父節點,便交換兩者。
- 持續向上比較,直到到達根節點或不再違反 heap 性質。
每次比較或交換所需時間為 。最壞情況下,該節點位於葉節點,且新鍵值小到必須一路上移至根節點,最多經過 heap 高度 層:
因此,decrease-key 的 worst-case time complexity 為 。
選項分析
- (A) :錯誤。
若鍵值減小後仍大於等於父節點,確實只需常數時間即可完成;但這是 best case,不是 worst case。最壞情況可能一路上移至根節點。
第 14 題
- In a binomial heap of size n, the worst case time complexity of O(logn) consecutive insert
operations is
(A)0(logn)
(B) O(log² n)
(C) O(n log n)
(D) O(nlog² n)
(E) O(n² log n)
登入後即可作答並保存紀錄。
核心觀念
二項堆(Binomial Heap)由數個二項樹組成,具有以下性質:
- 一個大小為 的二項樹,其高度為 。
- 大小為 的二項堆最多包含 棵二項樹。
- 標準實作中,
insert通常透過「建立一棵單一節點的二項樹,再與原二項堆合併」完成。 - 合併過程需掃描及整理最多 棵二項樹,因此單次插入的最壞時間複雜度為
解題方法
題目要求連續執行 次 insert。
設插入次數為
每次插入的最壞成本為 ,因此總最壞時間為
代入 :
所以正確答案為:
這裡問的是「最壞情況」,不能直接採用偶爾插入只需常數時間的情況。某次插入可能產生連續的合併(linking),而標準二項堆的插入上界仍為 。
選項分析
第 15 題
- In a binomial heap of size n, the worst case time complexity of one delete-min operation is
(A)0(1)
(B) O(log*n)
(C) O(log n)
(D) O(n)
(E) O(n log n)
登入後即可作答並保存紀錄。
核心觀念
Binomial heap(雙項堆)由若干棵 binomial tree 組成,並且每棵樹都符合最小堆性質。
對於含有 個元素的 binomial heap:
- 最大樹階為 。
- 根串列中的樹數量最多為 。
- 一棵階數為 的 binomial tree,其根節點刪除後會留下 棵子樹,階數分別為 。
因此,delete-min 的主要工作量與最大樹階及根串列長度有關,皆為 。
解題方法
delete-min 的處理步驟如下:
- 在根串列中找出最小根節點。
- 移除該最小根節點。
- 將其子樹加入 heap 的根串列。
- 重新合併相同階數的 binomial tree,使每個階數最多只保留一棵樹。
若最小根節點所屬的 binomial tree 階數為 ,則:
所以:
刪除根節點後,最多產生 棵子樹;同時,原本根串列中最多也只有 棵樹。重新整理與合併的成本因此為:
此上界可以達到,例如最小元素位於高階 binomial tree 的根節點,刪除後需要處理 棵子樹,因此最壞情況為:
選項以 Big-O 表示時,應選 。
第 16 題2 分
The worst case time complexity of one union operation upon two binomial heaps of total size is
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
核心觀念
二項堆由多棵二項樹組成,同一個堆中每種階數至多有一棵。階數為 的二項樹有 個節點,因此總節點數為 時,最大階數不超過 ,根串列中樹的數量也至多為 。
兩個二項堆的 union(合併)會先合併根串列,再將階數相同的二項樹連結,維持每種階數至多一棵。
解題方法
設兩堆總節點數為 。兩堆根串列各自依階數遞增排列,串列長度皆為 。合併這兩個已排序串列需 時間。
接著掃描合併後的根串列,遇到階數相同的二項樹便將其中一棵掛到另一棵之下。一次連結只需 時間;掃描與連結所處理的樹數量受根串列長度限制,總成本仍為 。
因此,一次 union 的最壞時間複雜度為 ,答案是 (C)。
選項分析
第 17 題2 分
In a binomial heap of size , the worst case time complexity of one decrease-key operation is
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
核心觀念
二項堆由多棵二項樹組成。二項樹 有 個節點,且高度為 ;因此,大小為 的二項堆中,任一節點到根的路徑長度至多為 。
在最小二項堆中,decrease-key 將指定節點的鍵值減小。若新鍵值小於父節點的鍵值,就沿父子鏈向上交換,直到恢復堆序性,或到達根節點。
解題方法
假設 decrease-key 已取得指定節點的指標,先更新鍵值,再逐層向上檢查父節點。每次交換及比較都耗時 ,最多向上移動一個樹高,也就是 層。因此:
在最壞情況下,節點原本位於深度 ,減小鍵值後一路上升至根,故最壞情況時間複雜度為 。
選項分析
第 18 題2 分
In a Fibonacci heap of size , the worst case time complexity of one find-min operation is
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
核心觀念
斐波那契堆(Fibonacci heap)會維護一個指向目前最小鍵值節點的指標,通常記為 min。因此,find-min 只需讀取並回傳這個指標所指向的節點,不必走訪堆中的其他節點。
解題方法
堆的最小值指標會在操作過程中適時更新:插入節點時比較新節點與目前最小節點;執行合併時比較兩個堆的最小節點;刪除最小節點後,則在後續整理根串列時找出新的最小節點。
更新指標的工作已由其他操作負責。單獨執行一次 find-min 時,只需存取並回傳指標,所需時間為常數,因此其最壞時間複雜度是 。
選項分析
- (A) :正確。 直接透過最小值指標取得最小節點,操作時間與堆的大小無關。
- **(B) :錯誤。
第 19 題2 分
In a Fibonacci heap of size , the worst case time complexity of one delete-min operation is
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
核心觀念
Fibonacci heap 的 delete-min 會刪除最小根節點,將該節點的子節點提升為根,再合併具有相同度數的根節點。合併後,根節點的度數最多為 ;但刪除前的根節點數量不一定是 ,可能達到 。
因此,必須區分:
- 單次操作的最壞情況時間:。
- 攤銷時間:。
解題方法
delete-min 的主要工作包括掃描根串列,並依根節點的度數合併根節點。若刪除前根串列有 個節點,掃描及合併所需時間可寫成 ,其中 是最大度數,且 。
Fibonacci heap 可以藉由連續插入節點,形成含有 個根節點的根串列。此時執行一次 delete-min,就需要處理這些根節點,耗時可達 。所以單次操作的最壞情況為 ,對應 (D)。
選項分析
第 20 題2 分
The worst case time complexity of one union operation upon two Fibonacci heaps of total size is
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
核心觀念
這題考 Fibonacci heap 的 合併(union,也稱 meld) 操作時間複雜度。標準 Fibonacci heap 以循環雙向鏈結串列維護根串列,並以一個指標記錄目前的最小根。
解題方法
合併兩個 Fibonacci heaps 時,將兩個根串列接在一起即可。循環雙向鏈結串列的串接只需調整固定數量的指標,因此耗時為常數。
接著比較兩個堆的最小根,將較小者設為合併後的最小根,只需一次鍵值比較與常數次指標更新。若兩堆大小分別為 與 ,合併後大小為 ;整個過程不需要逐一走訪節點。
因此,最壞情況時間複雜度為 。
選項分析
第 21 題2 分
In a leftist heap of size , the worst case time complexity of one delete-min operation is
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
核心觀念
左偏堆(leftist heap)同時維持兩項性質:
- 堆序性質:父節點的鍵值不大於子節點,因此最小值位於根節點。
- 左偏性質:每個節點的左子樹空路徑長度(null path length,簡稱 NPL)不小於右子樹的 NPL。
左偏性質使得從根沿右子節點往下的路徑長度為 。左偏堆的合併操作會沿著這類右側路徑進行,因此合併兩個堆的時間為 。
解題方法
執行 delete-min 時,先移除根節點;根節點的兩棵子堆各自仍是左偏堆,接著將它們合併:
刪除根節點本身只需 ,主要成本來自合併兩棵子堆。合併沿右側路徑遞迴處理,路徑長度為 ,所以一次 delete-min 的最壞時間複雜度為:
選項分析
第 22 題2 分
The worst case time complexity of one merge operation upon two leftist heaps of total size is
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
核心觀念
左偏堆(leftist heap)同時維持兩項性質:
- 堆序性質:父節點的鍵值不大於子節點,或不小於子節點,依題目採用的最小堆或最大堆定義而定。
- 左偏性質:每個節點左子樹的零路徑長度(null path length, NPL)不小於右子樹的零路徑長度。
合併兩個左偏堆時,沿著右子樹遞迴合併;遞迴返回後,若左子樹的 NPL 小於右子樹,就交換左右子樹。因此,合併所需的主要時間取決於右側路徑的長度。
解題方法
令 表示節點 的 NPL,並令空節點的 NPL 為 。左偏性質保證:
也就是說,從根沿右子節點往下走,每經過一層,NPL 至少減少 。因此右側路徑長度為 。
另一方面,NPL 為 的左偏堆至少有 個節點:根的左右子樹 NPL 都至少為 ,故有遞迴下界 ,且 。解得 。若整個堆有 個節點,則:
第 23 題2 分
In a leftist heap of size , the worst case time complexity of one decrease-key operation is
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
第 24 題2 分
An AVL tree of nodes has height at least
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
核心觀念
二元樹的高度若以「邊數」計算,根節點高度為 。高度為 的二元樹最多有
個節點。因此,節點數越多,樹高就不能低於這個容量限制所要求的高度。
AVL 樹是高度平衡的二元搜尋樹;完全二元樹也符合 AVL 的平衡條件,因為每個節點的左右子樹高度差至多為 。
解題方法
先檢查高度 的二元樹最多能容納多少個節點:
,所以 100 個節點的二元樹高度至少為 。
這個下界可以達到:100 個節點依序填入完全二元樹的各層,樹高為 (邊數),且仍是 AVL 樹。因此最低可能高度正是 。
選項分析
第 25 題2 分
A 2-3-4 tree of nodes has height at least
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
核心觀念
2-3-4 樹的每個內部節點最多有 個子節點。樹高 定義為根節點到最深葉節點的邊數,因此高度為 的樹最多有
個節點。要找出含 個節點的樹「至少」多高,就比較高度較低時所能容納的最大節點數。
解題方法
若高度為 ,最多能有
個節點,少於題目給的 個。因此高度不可能是 或更低,至少需要 。
再看高度 的容量:
所以 個節點可以落在高度 的容量範圍內;高度 也確實可達,例如各層節點數為 ,總數正好為 ,且最後一層的每個節點都
第 26 題2 分
How many binomial trees are there in a binomial heap with items?
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
核心觀念
二項堆由多棵不同階數的二項樹組成。階數為 的二項樹記為 ,其中恰有 個節點。
二項堆中每種階數至多有一棵二項樹,因此若堆中有 個項目,便將 寫成二進位;二進位表示中每個值為 的位元,對應一棵二項樹。故二項樹的棵數等於 的二進位表示中 的個數。
解題方法
將 分解為不同的 的次方:
也就是:
因此,二項堆包含 ,共 棵二項樹。
選項分析
第 27 題2 分
How many items are there in a binomial tree with order ?
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
核心觀念
二項樹 的階數為 ,由兩棵階數為 的二項樹合併而成; 是一個節點。因此,若 表示 的節點數,則
由此可得,階數為 的二項樹有 個節點。
解題方法
題目給定階數 ,代入節點數公式:
因此,階數為 的二項樹共有 個項目。
選項分析
第 28 題2 分
Which of the following is correct?
(A)
(B)
(C) If and , then .
(D) If , then .
登入後即可作答並保存紀錄。
核心觀念
本題考漸近成長率的比較,以及 記號的定義與傳遞性。對非負函數 、,若存在常數 與 ,使得所有 都滿足
就稱 。直觀上,這表示 的成長速度至多與 同階。
比較兩個函數時,也可觀察比值:若 隨 增大而無界,則 ;若比值有固定上界,則 。
解題方法
逐一檢查各選項:漸近比較題以比值檢驗成長率;涉及 記號的敘述則直接套用定義,或用反例檢查是否成立。
選項分析
(A) :錯誤。
比較兩邊的比值:
當 時, 的成長速度快於 ,因此此比值趨近無限大,沒有固定常數能讓 對所有充分大的 成立。故此選項錯誤。
(B) :錯誤。
因為 ,比較兩者比值:
此比值隨 增大而無界,因此 不受任何常數倍的 上界限制,兩者不是 關係。
第 29 題2 分
Order the following functions by the big-Oh notation in decreasing order.
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
Which of the following orders is correct?
(A)
(B)
(C)
(D)
登入後即可作答並保存紀錄。
第 30 題2 分
If , where , then ____.
(A)
(B)
(C)
(D)
登入後即可作答並保存紀錄。
核心觀念
這題考遞迴式的變數轉換與遞迴樹分析。遇到子問題規模由 變成 ,可令 ,因為
如此便能把平方根縮小轉成規模減半,再套用遞迴樹分析。
解題方法
令 ,則 、,遞迴式改寫為
其中每個子問題的規模是原來的一半,且每個節點的額外成本為該節點規模。
以遞迴樹計算:第 層有 個節點,每個節點的規模為 ,因此該層總成本為
遞迴深度約為 。葉節點對應 ,不產生額外成本,所以
代回 ,得到
第 31 題2 分
Which is the tight lower bound for any comparison based sorting algorithms?
(A)
(B)
(C)
(D)
登入後即可作答並保存紀錄。
核心觀念
比較式排序會透過比較元素大小來決定輸出順序。分析這類演算法的下界時,可將演算法表示為一棵決策樹:每個內部節點代表一次比較,每條根到葉的路徑代表一種比較結果序列,每個葉節點代表演算法判定的一種排序結果。
要排序 個互異元素,輸入共有 種排列。演算法必須能區分這 種排列,因此決策樹至少要有 個葉節點。若樹高為 ,二元決策樹最多有 個葉節點,所以:
取以 為底的對數,得到:
由 Stirling 近似公式可知:
因此,任何比較式排序演算法在最壞情況下都需要 次比較。
解題方法
本題問的是所有比較式排序演算法都必須滿足的緊密下界,使用決策樹下界即可。上述推導給出 的必要比較次數;此外,合併排序等演算法能在最壞情況下以 次比較完成排序。因此,這個下界可由演算法達成,漸近上是緊密的。
選項分析
第 32 題2 分
What's the time complexity to do (deterministic) quick sort, insertion sort and merge sort on a list of numbers in perfect sorted order?
(A) quick sort: , insertion sort: , merge sort:
(B) quick sort: , insertion sort: , merge sort:
(C) quick sort: , insertion sort: , merge sort:
(D) quick sort: , insertion sort: , merge sort:
登入後即可作答並保存紀錄。
核心觀念
本題比較三種排序法在「輸入已完全排序」時的時間複雜度。關鍵在於各演算法如何選擇樞紐、比較元素,以及是否仍執行完整的排序流程。
以下依一般教科書的基本實作判斷:快速排序固定選取子陣列的第一個或最後一個元素作為樞紐;合併排序照常遞迴分割並合併,沒有額外的「已排序」檢查。
解題方法
快速排序:
輸入已排序,若固定選取第一個或最後一個元素為樞紐,每次分割都會得到大小為 與 的兩個部分。每層分割需花費 ,因此遞迴式為:
展開後:
插入排序:
每次處理下一個元素時,它已經位於正確位置。總共進行約 次比較,且不需搬移已排序部分的元素,因此:
合併排序:
合併排序仍將資料分成兩半,遞迴排序後再合併。即使輸入原本已排序,基本合併程序仍會逐層處理所有元素。其遞迴式為:
第 33 題2 分
To search a specific number in a list, there are the following two strategies:
(a) Linear Search
(b) First sort the list using merge sort, and then do binary search
Which strategy is faster on average? What is its corresponding time complexity?
(A) (a),
(B) (b),
(C) (a),
(D) (b),
登入後即可作答並保存紀錄。
核心觀念
本題比較的是「查詢前先排序」與「直接搜尋」的總成本。時間複雜度須計入整個策略的每一步,不能只看最後的二分搜尋。
解題方法
假設只需查詢一次,且原始串列尚未排序。
- 線性搜尋:依序檢查元素。若目標在串列中且位置平均分布,平均約需檢查 個元素;即使目標不在串列中,最多檢查 個元素。因此平均時間複雜度為 。
- 合併排序後再二分搜尋:合併排序需 ;排序完成後,二分搜尋需 。總時間為
因此,單次查詢時,直接線性搜尋較快,答案為 (A)。
選項分析
第 34 題2 分
Consider the following list of activities with their start time and end time . What's the maximum number of activities that can be performed by a single person? Assume that a person can only work on a single activity at a time.
\text{index}&1&2&3&4&5&6&7&8&9\\ \hline s&2&3&1&10&14&6&13&7&19\\ t&5&9&12&16&17&15&18&11&20 \end{array}$$ (A) $2$ (B) $3$ (C) $4$ (D) $5$登入後即可作答並保存紀錄。
核心觀念
本題考「活動選擇問題」:每個活動有開始時間 與結束時間 ,要選出最多個彼此不重疊的活動。若前一個活動在 結束,下一個活動須滿足 。
活動依結束時間由早到晚排序,並每次選擇最早結束且與已選活動相容的活動,可得到最多活動數。這是活動選擇問題的貪婪法。
解題方法
圖中表格列出 9 個活動:活動 1 至 9 的開始時間依序為 ,結束時間依序為 。
依結束時間排序如下:
括號內依序是開始時間與結束時間。從最早結束的活動開始挑選:
- 選活動 1,時間為 。
- 活動 2 的開始時間 ,與活動 1 重疊,跳過;活動 8 的開始時間 ,選活動 8,時間為 。
第 35 題2 分
Consider the following two sequences:
The length of the longest common subsequence is:
(A)
(B)
(C)
(D)
登入後即可作答並保存紀錄。
核心觀念
最長共同子序列(Longest Common Subsequence, LCS)是指:在兩個序列中,按照原有順序挑出相同元素所形成的最長序列。挑出的元素不必連續,但順序必須一致;相同數字若出現多次,也要依照各自的出現位置配對。
令 表示第一個序列前 個元素與第二個序列前 個元素的 LCS 長度,則有遞迴式:
解題方法
將題目序列記為:
依照遞迴式填表。表格的欄標是 的元素,列標是 的元素;每格表示兩者截至該位置的 LCS 長度。
| 8 | 3 | 7 | 8 | 1 | 9 | 8 | 3 | 9 | 0 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 3 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 2 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 |
For problems 36 to 42, please refer to the following dynamic programming problem.
🖼️【此處有附圖,請對照原卷】
Ann is riding a scooter from her home to Bob's home with a constant speed . However, her scooter can only hold gas for km of riding at most.
There are a few gas stations along the way at distances from her home, but filling up at different stations would take different time . She would start her trip with a full tank of gas, and if she decides to fill up at a gas station, she needs to fill her entire tank up.
Since the riding time is constant , we only need to consider the time consumed by filling gas. Assume that the distances between two consecutive stations are no longer than km. Bob's home is at ; distances from Ann's home and the distances between his home and the last station are no longer than km as well.
According to the following figure, solve .
🖼️【此處有附圖,請對照原卷】
第 36 題2 分
If indicates the minimum time she has spent filling gas when she has filled the gas at the th station, then
(A)
0,&\text{if }a=0,\\ \displaystyle\min_{\substack{(0\le i\le a-1)\land(x_a-x_i\le100)}}(s[i]+t[i]),&\text{otherwise}. \end{cases}$$ (B) $$s[a]=\begin{cases} 0,&\text{if }a=0,\\ \displaystyle\min_{\substack{(0\le i\le a-1)\land(x_a-x_i\le100)}}(s[i]+t[a]),&\text{otherwise}. \end{cases}$$登入後即可作答並保存紀錄。
核心觀念
本題考察動態規劃。令 表示「已在第 站加滿油時,累計花在加油上的最少時間」。每次到站後,若決定加油,就必須加滿,因此在第 站加油會新增時間 。
解題方法
圖中相鄰位置的距離依序為 公里;五站的加油時間依序為 。因此五站距離出發點的位置是 公里。
若前一個加油位置是第 站,只有在 時才能到達第 站。抵達後在第 站加油,新增成本是 ,所以遞迴式為:
依序計算:
- 。
- 到第 2 站時,出發點距離已超過 公里,只能從第 1 站接續:。
第 37 題2 分
If indicates the minimum time she has spent filling gas when she arrives at the th gas station, then
(A)
0,&\text{if }a=0,\\ \displaystyle\min_{\substack{(0\le i\le a-1)\land(x_a-x_i\le100)}}(r[i]+t[i]),&\text{otherwise}. \end{cases}$$ (B) $$r[a]=\begin{cases} 0,&\text{if }a=0,\\ \displaystyle\min_{\substack{(0\le i\le a-1)\land(x_a-x_i\le100)}}(r[i]+t[a]),&\text{otherwise}. \end{cases}$$登入後即可作答並保存紀錄。
核心觀念
這題考動態規劃的狀態定義與轉移式。 表示 Ann 抵達第 個加油站時,已花在加油上的最少時間;抵達時尚未計入在第 站加油的時間。
從前一個加油站 出發,只有當 時,才能到達第 站。出發前若在第 站加滿油,就要花 ,因此轉移式為:
其中起點 一開始已有滿油,不需加油,可視為 。
解題方法
圖中各站加油時間依序為 ;相鄰位置的距離依序為 公里。
第 38 題2 分
____.
(A)
(B)
(C)
(D)
登入後即可作答並保存紀錄。
核心觀念
表示 Ann 已在第 個加油站加滿油時,累計花在加油上的最少時間。要計算 ,需確認她能否從起點 騎到第一站 ,再加上在第一站加油所需的時間。
解題方法
圖中起點到第一站的距離是 公里,第一站的加油時間是 ;她出發時油箱已加滿,續航上限為 公里。因此可以直接從起點騎到第一站,並在第一站加油:
這裡的 是出發前已花的加油時間;抵達第一站後加滿油,花費 。
第 39 題2 分
____.
(A)
(B)
(C)
(D)
登入後即可作答並保存紀錄。
核心觀念
本題考查動態規劃。 表示 Ann 已在第 個加油站加滿油時,累計花在加油上的最少時間。若上一個加油位置是 ,且從 到 的距離不超過油箱可行駛的 公里,就能從狀態 轉移到 ,並加上在第 站加油的時間 :
解題方法
圖中從 Ann 的家到第 1 站距離為 公里,第 1 站到第 2 站為 公里;第 1、2 站的加油時間分別為 、。
第 40 題2 分
____.
(A)
(B)
(C)
(D)
登入後即可作答並保存紀錄。
核心觀念
這題考動態規劃。令 表示到第 站加完油時,累計花在加油上的最少時間;起點 的初始油箱已滿,因此 。若前一個加油位置是第 站,必須滿足 ,才能抵達第 站;抵達後加油則增加 ,所以轉移式為
解題方法
圖中相鄰距離依序為 公里,各站加油時間為 。因此 ;初始位置 。
先算出需要的前置狀態:
因為 ,到第 2 站前必須在第 1 站加油,所以
第 41 題2 分
____.
(A)
(B)
(C)
(D)
登入後即可作答並保存紀錄。
核心觀念
這題考動態規劃。 表示 Ann 在第 個加油站加滿油後,累計花在加油上的最少時間。若從第 站到第 站的距離不超過 公里,就能從 站開到 站;到達第 站後,加油時間是 ,因此轉移式為:
解題方法
圖中各段距離依序為 公里,因此各站位置為 。各站加油時間為 。
先算出求 會用到的前項:
- 到第 1 站可由起點行駛 公里,故 。
- 第 2 站距起點 公里,超過油箱續航;只能由第 1 站前往,距離 公里。因此 。
- 第 3 站可由第 1 站前往,距離 公里;
第 42 題2 分
____.
(A)
(B)
(C)
(D)
登入後即可作答並保存紀錄。
核心觀念
這題考動態規劃。 表示「已在第 個加油站加滿油時,累計花在加油上的最少時間」。若 Ann 從第 站(或起點 )出發後能抵達第 站,便可由 加上在第 站加油所需的時間 ,得到一種到達狀態 的方案。
解題方法
圖中各段距離依序為 公里;五個加油站的加油時間依序為 。起點到第 站的累計距離是 公里,且每次加油最多可行駛 公里。
採用遞推式:
第 站前,能在一次加油後抵達第 站的前一站有第 站,因為:
- 第 站到第 站: 公里。
- 第 站到第 站: 公里。
- 第 站到第 站: 公里。
由前面各站的最小加油時間:
第 43 題2 分
Consider the expression tree in Fig. 1.
🖼️【此處有附圖,請對照原卷】
(A) The prefix expression is .
(B) The prefix expression is .
(C) The infix expression is .
(D) The postfix expression is .
(E) The postfix expression is .
登入後即可作答並保存紀錄。
核心觀念
表達式樹的三種走訪順序會產生不同表示法:
- 前序走訪(prefix):根、左子樹、右子樹。
- 中序走訪(infix):左子樹、根、右子樹。
- 後序走訪(postfix):左子樹、右子樹、根。
本題是複選題,需依圖中的表達式樹逐一判斷選項所列字串是否符合其標示的走訪方式。
解題方法
圖中根節點是乘法;左子樹的根是加法,兩個子樹分別為 與 。右子樹的根是乘法,左子節點為 ,右子樹是加法,其兩個子樹分別為 與 。因此整棵樹可寫成:
依序對整棵樹做前序與後序走訪,即可核對選項 B、D。
選項分析
第 44 題2 分
In a splay tree of size :
(A) The height is .
(B) Time complexity of one insertion is .
(C) Time complexity of insertions is .
(D) Time complexity of one deletion is .
(E) Time complexity of deletions is .
登入後即可作答並保存紀錄。
核心觀念
伸展樹(splay tree)是二元搜尋樹。每次搜尋、插入或刪除後,會透過旋轉把相關節點伸展到根節點附近。這種調整不保證每一步都快速,但有以下攤銷複雜度保證:
- 單次操作的最壞情況時間為 ,因為樹高可能退化成 。
- 一連串 次操作的攤銷時間為 ,也就是每次操作的攤銷成本為 。
判斷選項時,必須區分「單次操作最壞情況」與「一連串操作的攤銷總時間」。
解題方法
對單次操作,檢查伸展樹是否保證最壞情況樹高為 。答案是否定的:伸展樹可能形成長度為 的鏈,因此沿樹搜尋並伸展一次,可能花費 。
對多次操作,使用伸展樹的攤銷分析定理:每次插入或刪除的攤銷成本為 。因此, 次操作的攤銷總成本為
選項分析
第 45 題2 分
Consider the splay tree in Fig. 2.
🖼️【此處有附圖,請對照原卷】
(A) In Fig. 2, after inserting the key , the parent of key is key .
(B) In Fig. 2, after inserting the key , the parent of key is key .
(C) In Fig. 2, after inserting the key , the parent of key is key .
(D) In Fig. 2, after inserting the key , the parent of key is key .
(E) In Fig. 2, after inserting the key , the root is key .
登入後即可作答並保存紀錄。
核心觀念
伸展樹(splay tree)插入新鍵值時,先依二元搜尋樹規則插入,再透過 zig、zig-zig 或 zig-zag 旋轉,將新插入的節點伸展至根節點。因此,插入後新鍵值必為根;其他節點的父子關係則要依旋轉結果判斷。
解題方法
圖 2 的根為 ;左子樹根為 ,其左子為 、右子為 ;右子樹根為 ,其左子為 、右子為 ,而 的左子為 。依二元搜尋樹規則插入各鍵值,再沿著插入節點至根的路徑執行伸展旋轉,檢查題目所問的父子關係或根節點。
選項分析
(A) 正確。
插入 時,它成為 的右子。對 與祖父 執行右右型 zig-zig,也就是連續左旋。第一次左旋使 成為 的右子;第二次左旋不改變這個父子關係。之後將 伸展至根, 仍以 為父節點。
(B) 錯誤。
插入 時,搜尋路徑為 ,所以 插入為 的左子。先對 、、 執行左左型 zig-zig,接著 成為 的右子,而 是 的右子;
第 46 題2 分
In a red-black tree of size :
(A) Time complexity of one search is .
(B) Time complexity of one insertion is .
(C) Time complexity of insertions is .
(D) Time complexity of one deletion is .
(E) Time complexity of deletions is .
登入後即可作答並保存紀錄。
核心觀念
紅黑樹是一種自我平衡的二元搜尋樹。其紅黑規則保證樹高為 ,其中 是樹中的節點數。因此,沿樹高進行的搜尋、插入與刪除,都能在 時間內完成。
紅黑樹的高度 滿足:
插入與刪除除了沿樹高尋找位置或節點,還會進行旋轉與重新著色。修正過程最多沿樹高進行,因此整體時間仍為 。
解題方法
先判斷單次操作的最壞時間,再將單次操作的時間加總,即可得到多次操作的總時間。
若每次操作至多需要 時間,對 個節點逐一操作,總時間上界為:
選項分析
(A) 正確。 搜尋從根節點沿著一條根至葉的路徑前進,最多檢查 個節點。紅黑樹高度為 ,所以一次搜尋為 。
(B) 正確。 插入時先依二元搜尋樹規則尋找插入位置,耗時 ;再透過旋轉與重新著色恢復紅黑樹性質,修正時間也至多為 。
第 47 題2 分
Which of the following are balanced trees?
(A) Binary search tree.
(B) AVL tree.
(C) Red-black tree.
(D) Splay tree.
(E) 2-3-4 tree.
登入後即可作答並保存紀錄。
核心觀念
平衡樹的判斷重點,是樹的結構是否能保證高度為 ,其中 為節點數。高度維持在對數級,搜尋、插入與刪除才有對數級的最壞情況時間。
自我調整樹(如 Splay tree)則要另外區分:它能保證一連串操作的攤銷時間為 ,但單次操作前的樹高仍可能是 。
解題方法
逐一檢查各類樹是否有維持對數高度的結構條件:
- 若樹的定義本身沒有高度限制,節點可以排成鏈,便不屬於嚴格意義下的平衡樹。
- 若樹的不變量能限制高度為 ,便屬於平衡樹。
- 攤銷效率不等於每個當下的樹形都平衡,因此要把 Splay tree 與 AVL tree、紅黑樹等區分。
選項分析
(A) Binary search tree:錯。
一般二元搜尋樹只要求左子樹鍵值較小、右子樹鍵值較大,沒有限制左右子樹高度差。依序插入已排序的 個鍵值時,樹會退化成長度為 的鏈,高度為 )。
第 48 題2 分
In an AA tree, which of the following statements are correct?
(A) There are no two consecutive right horizontal links.
(B) There is no left horizontal link.
(C) A node has the same level as its right horizontal link child.
(D) A node has the same level as its left-link child.
(E) The height is .
登入後即可作答並保存紀錄。
核心觀念
AA 樹以每個節點的「層級」維持平衡。設水平連結是父節點與子節點層級相同的連結,AA 樹的主要規則為:
- 左子節點的層級恰好比父節點低 。
- 右子節點的層級與父節點相同,或比父節點低 。
- 不允許左水平連結,也不允許連續兩條右水平連結。
- 層級大於 的節點有兩個子節點。
由這些規則可限制樹高,使其為 。AA 樹的層級不變量與高度分析
解題方法
先將「水平連結」轉換成層級相同的連結,再逐項核對 AA 樹的規則。最後用層級與節點數的關係判斷高度:
若某節點的層級為 ,它的左右子樹根層級都至少為 ,因此該子樹至少有
第 49 題2 分
Which of the following operations are supported by binary search trees?
(A) Find key
(B) Insert key
(C) Delete key
(D) Find-Min
(E) Delete-Min
登入後即可作答並保存紀錄。
核心觀念
二元搜尋樹(Binary Search Tree, BST)是一種二元樹。對每個節點而言,其左子樹的鍵值小於該節點的鍵值,右子樹的鍵值大於該節點的鍵值。依此順序性質,可以支援搜尋、插入、刪除,以及尋找最小鍵值等操作。
解題方法
逐一檢視各操作是否能利用 BST 的鍵值順序完成:
- 搜尋鍵值時,從根節點開始比較;若目標較小,往左子樹走,若較大,往右子樹走。
- 插入鍵值時,沿搜尋路徑找到適當的空位置,將新節點接上。
- 刪除鍵值時,依節點的子女數量處理:沒有子女時直接移除;有一個子女時以子女取代;有兩個子女時,可用右子樹的最小節點取代,再刪除該最小節點。
- 最小鍵值必在最左側節點;從根節點持續往左即可找到。
- 刪除最小鍵值時,移除最左側節點,並以其右子樹接回原位置。
上述操作都由 BST 的定義直接支援。若樹高為 ,各操作的時間複雜度為 ;平衡時 ,退化成單鏈時 。
第 50 題2 分
Consider the Fibonacci heap in Fig. 3.
🖼️【此處有附圖,請對照原卷】
(A) In Fig. 3, after decreasing key to , there will be marked nodes in total.
(B) In Fig. 3, after decreasing key to , there will be marked nodes in total.
(C) In Fig. 3, after decreasing key to , there will be trees in total.
(D) In Fig. 3, after delete-min, there will be two trees.
(E) In Fig. 3, after inserting key , there will be one tree.
登入後即可作答並保存紀錄。