108 年 國立臺灣大學電信工程學研究所丙組《資料結構與演算法》

📄 試題原卷 免費註冊後即可對照原始考卷 PDF免費註冊

第 1 題

  1. Suppose there are n people born between the year 0 A.D. and the year 2003 A.D. It is possible to sort all of them by birthdate in o(nlg⁡n)o(n \lg n) time.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查:

  • 比較式排序的下界;
  • 非比較式排序,例如 Counting Sort;
  • 小寫入值域下,線性時間排序的可能性;
  • 小記號 o(⋅)o(\cdot) 的定義。

若只使用元素間比較,排序一般需要

Ω(nlg⁡n)\Omega(n\lg n)

時間。但題目中的出生日期範圍固定在西元 0 年至 2003 年,可能的日期數量是有限常數,因此不必受比較式排序下界限制。

解題方法

將每個人的出生日期轉換成一個可排序的整數鍵值。例如,可將日期依時間順序編號:

key=出生年份、月份、日期所對應的序號\text{key}=\text{出生年份、月份、日期所對應的序號}

西元 0 年至 2003 年之間的所有可能出生日期數量至多為

K=2004×366K=2004\times 366

其中 KK 是固定常數,與 nn 無關。

接著使用 Counting Sort:

  1. 建立長度為 KK 的計數陣列;
  2. 掃描 nn 個人的出生日期,統計各日期出現人數;
  3. 依日期順序輸出所有人。

時間複雜度為

T(n)=Θ(n+K)T(n)=\Theta(n+K)

由於 KK 是常數,因此

T(n)=Θ(n)T(n)=\Theta(n)

接著驗證是否符合 o(nlg⁡n)o(n\lg n):

lim⁡n→∞T(n)nlg⁡n=lim⁡n→∞Θ(n)nlg⁡n=lim⁡n→∞Θ(1lg⁡n)=0\lim_{n\to\infty}\frac{T(n)}{n\lg n} = \lim_{n\to\infty}\frac{\Theta(n)}{n\lg n} = \lim_{n\to\infty}\Theta\left(\frac{1}{\lg n}\right) =0

因此

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 2 題

  1. The following array is a min-heap.
    2 5 9 8 10 13 12 22 50

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

題目給出的陣列為:

A=[2,5,9,8,10,13,12,22,50]A=[2,5,9,8,10,13,12,22,50]

陣列表示 binary heap 時,通常採用 0-based indexing:

  • 節點 ii 的左子節點:2i+12i+1
  • 節點 ii 的右子節點:2i+22i+2
  • 節點 ii 的父節點:⌊i−12⌋\left\lfloor \dfrac{i-1}{2}\right\rfloor

Min-heap 必須同時滿足:

  1. 結構上是 complete binary tree。
  2. 每個父節點的值小於或等於其子節點:
A[parent(i)]≤A[i]A[\text{parent}(i)]\leq A[i]

Min-heap 只保證父子之間的大小關係,不要求同一層由左至右排序。

解題方法

將陣列畫成 complete binary tree:

             2
          /     \
         5       9
       /  \     / \
      8   10   13  12
     / \
    22 50

逐一檢查每個具有子節點的父節點。

根節點 22

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 3 題

  1. If f(n)∈Ω(g(n))f(n) \in \Omega(g(n)) and g(n)∈O(f(n))g(n) \in O(f(n)), then f(n)∈Θ(g(n))f(n) \in \Theta(g(n)).

登入後即可作答並保存紀錄。

這一題的完整詳解

觀念解析

依據漸進記號(Asymptotic Notation)定義:

  • f(n)∈Ω(g(n))  ⟺  ∃c1>0,n1>0,∀n≥n1:f(n)≥c1⋅g(n)f(n) \in \Omega(g(n)) \iff \exists c_1 > 0, n_1 > 0, \forall n \ge n_1: f(n) \ge c_1 \cdot g(n)
  • g(n)∈O(f(n))  ⟺  ∃c2>0,n2>0,∀n≥n2:g(n)≤c2⋅f(n)g(n) \in O(f(n)) \iff \exists c_2 > 0, n_2 > 0, \forall n \ge n_2: g(n) \le c_2 \cdot f(n)

上述兩條件邏輯上完全等價,均僅說明 g(n)g(n) 為 f(n)f(n) 的漸進下界(Lower Bound)。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 4 題

  1. In a dynamic programming solution, its space complexity is always at least as large as the number of unique subproblems.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

動態規劃(Dynamic Programming, DP)利用:

  1. 重疊子問題:相同子問題會被重複使用。
  2. 最佳子結構:原問題的最佳解可由子問題的最佳解組成。

若共有 mm 個不同子問題:

  • **Memoization(自頂向下)**通常會為每個子問題保存答案,因此空間複雜度常為 O(m)O(m)。
  • **Tabulation(自底向上)**則可依照狀態轉移式,只保留未來仍會用到的部分狀態,空間不一定需要保存全部 mm 個子問題。

因此,「不同子問題的數量」是某些 DP 實作的記憶體需求上界或常見需求,但不是所有 DP 解法的必要空間下界。

解題方法

判斷「always」這類敘述時,只要找出一個反例即可證明錯誤。

以 Fibonacci 數列為例:

F(n)=F(n−1)+F(n−2)F(n)=F(n-1)+F(n-2)

從 F(0)F(0) 到 F(n)F(n) 共有 O(n)O(n) 個不同子問題。若使用完整的 DP 陣列,確實需要:

dp[i]=F(i),i=0,1,…,ndp[i]=F(i),\quad i=0,1,\ldots,n

此時空間複雜度為 O(n)O(n)。

但計算 F(i)F(i) 時只需要前兩項,因此可使用滾動變數:

prev2 = F(0)
prev1 = F(1)

for i = 2 to n:
    current = prev1 + prev2
    prev2 = prev1
    prev1 = current
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 5 題

  1. Given a directed acyclic graph G=(V,E)G = (V,E) where the edge weights are of real numbers, Dijkstra's algorithm can be applied to solve the single-source shortest-path problem in GG.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

Dijkstra 演算法解決單一起點最短路徑問題時,必要條件是所有邊權重皆滿足

w(u,v)≥0w(u,v)\ge 0

原因是:Dijkstra 每次選出目前暫定距離最小且尚未確定的頂點,並將其距離視為最終答案。這個判定依賴「後續經過其他邊不會使距離下降」;若存在負權重邊,此性質便不成立。

題目只說邊權重為實數,實數包含負數,因此不保證所有邊權重非負。

解題方法

可用反例證明題目敘述不成立。

考慮一個有向無環圖:

  • s→as\to a,權重為 22
  • s→bs\to b,權重為 55
  • b→ab\to a,權重為 −10-10

此圖沒有有向環,符合 DAG 條件。

從起點 ss 執行 Dijkstra:

  1. 初始距離為

    d(s)=0,d(a)=2,d(b)=5d(s)=0,\qquad d(a)=2,\qquad d(b)=5
  2. Dijkstra 先選出暫定距離較小的 aa,將 d(a)=2d(a)=2 確定。

  3. 接著處理 bb,經由 b→ab\to a 可得到

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 6 題

  1. Given an unweighted, undirected graph G=(V,E)G = (V, E) and two vertices u,v∈Vu, v \in V, breadth-first search can be applied to find the shortest path between uu and vv or whether no such path exists.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查無權重圖中的最短路徑,以及廣度優先搜尋(Breadth-First Search, BFS)的性質。

在無向圖 G=(V,E)G=(V,E) 中,若每條邊的成本皆為 11,則兩頂點間的最短路徑長度,就是從起點出發所需經過的最少邊數。BFS 具有以下定理:

從起點 uu 執行 BFS 時,頂點第一次被拜訪的層數,等於 uu 到該頂點的最短距離。

令 dist⁡(u,x)\operatorname{dist}(u,x) 表示 uu 到 xx 的最短距離,則 BFS 完成後:

  • 若 vv 被拜訪,則 dist⁡(u,v)\operatorname{dist}(u,v) 即為 uu 到 vv 的最短路徑長度。
  • 若 vv 未被拜訪,則 uu 與 vv 不在同一個連通分量中,因此不存在從 uu 到 vv 的路徑。

解題方法

從頂點 uu 開始,將 uu 放入佇列,並設定:

dist⁡(u,u)=0\operatorname{dist}(u,u)=0

BFS 每次從佇列取出一個頂點 xx,檢查其所有鄰接頂點 yy。若 yy 尚未拜訪,便設定:

dist⁡(u,y)=dist⁡(u,x)+1\operatorname{dist}(u,y)=\operatorname{dist}(u,x)+1

再將 yy 放入佇列。

BFS 的搜尋順序具有分層特性:

  • 第 00 層:uu
  • 第 11 層:與 uu 相鄰的頂點
  • 第 22 層:距離 uu 為 22 的頂點
  • 第 kk 層:距離 uu 為 kk 的頂點

由於 BFS 會先處理較小層數的頂點,任何頂點 vv 第一次被拜訪時,所得到的距離必定是最短距離。若在搜尋過程中記錄每個頂點的前驅頂點 parent,即可由 vv 沿著前驅回溯至 uu,重建完整最短路徑。

關鍵流程如下:

BFS(G, u):
    for each vertex x:
        visited[x] = false
        parent[x] = NIL
        dist[x] = ∞

    visited[u] = true
    dist[u] = 0
    enqueue(u)

    while queue is not empty:
        x = dequeue()

        for each neighbor y of x:
            if visited[y] == false:
                visited[y] = true
                parent[y] = x
                dist[y] = dist[x] + 1
                enqueue(y)

完成後:

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 7 題

  1. If all edges in the graph have integer capacities, then there exists a maximum flow in which all flows are integers.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查最大流問題的「整數流定理」:

若流網路中每條邊的容量皆為整數,則至少存在一個最大流,使得每條邊上的流量皆為整數。

流函數 ff 必須滿足:

  1. 容量限制
    0≤f(u,v)≤c(u,v)0 \le f(u,v) \le c(u,v)

  2. 流量守恆
    對除來源點 ss 與匯點 tt 外的每個頂點 vv:
    ∑uf(u,v)=∑wf(v,w)\sum_{u} f(u,v)=\sum_{w} f(v,w)

  3. 反對稱性
    f(u,v)=−f(v,u)f(u,v)=-f(v,u)

其中 c(u,v)c(u,v) 為邊 (u,v)(u,v) 的容量。

解題方法

採用 Ford–Fulkerson 演算法證明。

初始流量設為零流:

f(u,v)=0f(u,v)=0

因此所有流量都是整數。

在每次迭代中,Ford–Fulkerson 演算法會在殘餘網路中尋找一條由 ss 到 tt 的增廣路徑 PP,並令增廣量為該路徑上的最小殘餘容量:

Δ=min⁡(u,v)∈Pcf(u,v)\Delta=\min_{(u,v)\in P} c_f(u,v)

因為原始容量皆為整數,且初始流量為整數,所以每條殘餘容量

cf(u,v)=c(u,v)−f(u,v)c_f(u,v)=c(u,v)-f(u,v)

或反向邊的殘餘容量

cf(v,u)=f(u,v)c_f(v,u)=f(u,v)

也都是整數。因此 Δ\Delta 必為整數。

增廣後:

  • 路徑上的正向邊流量增加 Δ\Delta;
  • 路徑上的反向邊流量減少 Δ\Delta;
  • 其他邊流量不變。
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 8 題

  1. For a k-bit binary counter that supports two operations: INCREMENT and DECREMENT, the worst-case amortized cost of randomly performing n operations is Θ(nk)\Theta(nk). (Assume that each bit-flip costs 1 unit of time, and that the value of the counter is always positive and never exceeds 2k−12^k - 1.)

登入後即可作答並保存紀錄。

這一題的完整詳解

觀念分析

在僅支援 INCREMENT 的 kk-bit 二進位計數器中,高位元翻轉頻率呈指數遞減,nn 次操作的總成本上限為 O(n)O(n),單次攤還成本(Amortized Cost)為 O(1)O(1)。

然而,若計數器同時支援 INCREMENT 與 DECREMENT,最壞情況下可構造出連續觸發多個位元翻轉的操作序列,使攤還分析的優勢消失。


推導與證明

  1. 總成本上限(Upper Bound):
    kk-bit 二進位計數器共有 kk 個位元,單次 INCREMENT 或 DECREMENT 最多翻轉 kk 個位元。因此,nn 次操作的總位元翻轉次數上界為:
    T(n)≤n⋅k=O(nk)T(n) \le n \cdot k = O(nk)

  2. 最壞情況序列(Lower Bound):
    設定計數器初始值為 2k−1−12^{k-1} - 1(二進位表示為 011…12011\dots1_2):

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 9 題

  1. If any problem in NP can be solved in linear time, then all problems in NPC can be solved in polynomial time.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查複雜度類別 PP、NPNP 與 NPCNPC 的包含關係:

  • PP:可在多項式時間內解決的問題。
  • NPNP:給定候選解後,可在多項式時間內驗證其正確性的問題。
  • NPCNPC(NP-Complete):同時屬於 NPNP,且是 NPNP-Hard 的問題。

重要包含關係為:

NPC⊆NPNPC \subseteq NP

此外,線性時間 O(n)O(n) 屬於多項式時間,因為:

O(n)=O(n1)O(n)=O(n^1)

因此,能在線性時間解決的問題,一定也能在多項式時間解決。

解題方法

題目敘述:

If any problem in NP can be solved in linear time, then all problems in NPC can be solved in polynomial time.

將「any problem in NP」理解為「NPNP 中的任意問題皆可在線性時間解決」。

由於所有 NPCNPC 問題都是 NPNP 問題:

NPC⊆NPNPC \subseteq NP

所以任取一個問題 L∈NPCL\in NPC,必然有 L∈NPL\in NP。根據題目前提,LL 可以在線性時間內解決:

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 10 題

  1. If any problem in NPC can be solved in linear time, then P = NP = NPC.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查複雜度類別與 NP-complete(NPC,NP 完全)問題的關係:

  • PP:可在多項式時間內解決的問題。
  • NPNP:給定候選解後,可在多項式時間內驗證的問題。
  • NPCNPC:同時滿足下列條件的問題:
    1. 屬於 NPNP;
    2. 是 NPNP-hard,也就是所有 NPNP 問題都能在多項式時間內歸約至它。

已知關係為:

P⊆NPP \subseteq NP

若某一個 NP 完全問題 LL 能在線性時間 O(n)O(n) 內解決,因為線性時間必定屬於多項式時間,所以:

L∈PL \in P

這會導致 P=NPP=NP。


解題方法

設 LL 是任意一個可在線性時間內解決的 NP 完全問題。

對任意問題 A∈NPA\in NP,由於 LL 是 NP-hard,存在一個多項式時間歸約:

A≤pLA\leq_p L

先花多項式時間將 AA 的輸入轉換成 LL 的輸入,再用線性時間演算法解決 LL。整體時間仍為多項式時間,因此:

A∈PA\in P

所以:

NP⊆PNP\subseteq P

配合原本的:

P⊆NPP\subseteq NP

得到:

P=NPP=NP

因此,「任一個 NP 完全問題若能在多項式時間內解決,則 P=NPP=NP」是正確的;題目使用的「線性時間」更是多項式時間的特殊情況。


命題分析

題目主張:

P=NP=NPCP=NP=NPC

其中 P=NPP=NP 的部分正確,但 NP=NPCNP=NPC 的部分不正確。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 11 題

  1. T(n) = 25 T(n/5) + n^{lg_5 n}
    A. Θ(n)\Theta(n)
    B. Θ(n2)\Theta(n^2)
    C. O(n2lg⁡n)O(n^2 \lg n)
    D. O(nlg⁡n)O(n \lg n)
    E. None of the above

登入後即可作答並保存紀錄。

這一題的完整詳解

本題考點:主定理(Master Theorem)與遞迴關係式複雜度分析

已知遞迴關係式為:
T(n)=25T(n5)+nlog⁡5nT(n) = 25 T\left(\frac{n}{5}\right) + n^{\log_5 n}

其中 a=25a = 25,b=5b = 5,f(n)=nlog⁡5nf(n) = n^{\log_5 n}。

1. 計算臨界函數(Critical Function):
nlog⁡ba=nlog⁡525=n2n^{\log_b a} = n^{\log_5 25} = n^2

2. 比較 f(n)f(n) 與 nlog⁡ban^{\log_b a} 的成長速度:
取 ϵ=1>0\epsilon = 1 > 0,當 n≥125n \ge 125(即 log⁡5n≥3\log_5 n \ge 3)時:
f(n)=nlog⁡5n≥n3=Ω(n2+1)f(n) = n^{\log_5 n} \ge n^3 = \Omega(n^{2+1})
可知 f(n)f(n) 的成長速度呈多項式地快於 nlog⁡ba=n2n^{\log_b a} = n^2。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 12 題

  1. T(n)=T(n/3)+T(2n/3)+nT(n) = T(n/3) + T(2n/3) + n
    A. Θ(lg⁡n)\Theta(\lg n)
    B. Θ(n)\Theta(n)
    C. O(nlg⁡n)O(n \lg n)
    D. Θ(n2)\Theta(n^2)
    E. None of the above

登入後即可作答並保存紀錄。

這一題的完整詳解

觀念與推導

給定遞迴關係式:
T(n)=T(n3)+T(2n3)+nT(n) = T\left(\frac{n}{3}\right) + T\left(\frac{2n}{3}\right) + n

1. 遞迴樹法 (Recursion Tree Method) 分析

  • 每層工作量:
    • 第 0 層:nn
    • 第 1 層:n3+2n3=n\frac{n}{3} + \frac{2n}{3} = n
    • 第 2 層:(n9+2n9)+(2n9+4n9)=n\left(\frac{n}{9} + \frac{2n}{9}\right) + \left(\frac{2n}{9} + \frac{4n}{9}\right) = n
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 13 題

  1. T(n)=2T(n/2)+nlg⁡nT(n) = 2 T(n/2) + \frac{n}{\lg n}
    A. Θ(lg⁡n)\Theta(\lg n)
    B. Θ(n)\Theta(n)
    C. O(nlg⁡lg⁡n)O(n \lg \lg n)
    D. O(nlg⁡n)O(n \lg n)
    E. None of the above

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查遞迴式的漸進分析,核心工具是遞迴樹與調和級數:

T(n)=2T(n/2)+nlg⁡nT(n)=2T(n/2)+\frac{n}{\lg n}

其中每層共有 2i2^i 個子問題,每個子問題的規模為 n/2in/2^i。


解題方法:遞迴樹分析

第 ii 層的單一子問題非遞迴成本為:

n/2ilg⁡(n/2i)\frac{n/2^i}{\lg(n/2^i)}

該層共有 2i2^i 個子問題,因此第 ii 層總成本為:

2i⋅n/2ilg⁡(n/2i)=nlg⁡n−i2^i\cdot \frac{n/2^i}{\lg(n/2^i)} = \frac{n}{\lg n-i}

遞迴深度約為 lg⁡n\lg n,所以所有非葉節點成本總和為:

∑i=0lg⁡n−1nlg⁡n−i=n∑k=1lg⁡n1k\sum_{i=0}^{\lg n-1}\frac{n}{\lg n-i} = n\sum_{k=1}^{\lg n}\frac{1}{k}

其中

∑k=1m1k=Θ(lg⁡m)\sum_{k=1}^{m}\frac{1}{k}=\Theta(\lg m)

為調和級數,因此:

n∑k=1lg⁡n1k=Θ(nlg⁡lg⁡n)n\sum_{k=1}^{\lg n}\frac{1}{k} = \Theta(n\lg\lg n)

最底層共有 2lg⁡n=n2^{\lg n}=n 個葉節點,葉節點總成本為 Θ(n)\Theta(n)。由於

Θ(n)=O(nlg⁡lg⁡n)\Theta(n)=O(n\lg\lg n)

葉節點成本不會主導整體複雜度,故:

T(n)=Θ(nlg⁡lg⁡n)\boxed{T(n)=\Theta(n\lg\lg n)}

選項分析

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 14 題

  1. T(n)=4T(n/3)+nlog⁡34T(n) = 4 T(n/3) + n^{\log_3 4}
    A. Θ(lg⁡n)\Theta(\lg n)
    B. Θ(n)\Theta(n)
    C. O(nlog⁡34)O(n^{\log_3 4})
    D. O(nlog⁡34lg⁡n)O(n^{\log_3 4} \lg n)
    E. None of the above

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題主要測驗利用**主定理(Master Theorem)求解分治演算法之遞迴關係式(Recurrence Relation)的時間複雜度,以及對漸近符號(Asymptotic Notations)**數學定義之掌握。

對於遞迴關係式:
T(n)=aT(n/b)+f(n)T(n) = a T(n/b) + f(n)
其中 a≥1,b>1a \ge 1, b > 1。主定理透過比較非遞迴成本 f(n)f(n) 與分治樹葉節點總成本 nlog⁡ban^{\log_b a} 來決定時間複雜度:

  • Case 1:若存在 ϵ>0\epsilon > 0 使 f(n)=O(nlog⁡ba−ϵ)f(n) = O(n^{\log_b a - \epsilon}),則 T(n)=Θ(nlog⁡ba)T(n) = \Theta(n^{\log_b a})。
  • Case 2:若存在 k≥0k \ge 0 使 f(n)=Θ(nlog⁡balg⁡kn)f(n) = \Theta(n^{\log_b a} \lg^k n),則 T(n)=Θ(nlog⁡balg⁡k+1n)T(n) = \Theta(n^{\log_b a} \lg^{k+1} n)。
  • Case 3:若存在 ϵ>0\epsilon > 0 使 f(n)=Ω(nlog⁡ba+ϵ)f(n) = \Omega(n^{\log_b a + \epsilon}) 且滿足正規性條件(Regularity condition),則 T(n)=Θ(f(n))T(n) = \Theta(f(n))。

此外,依據漸近符號定義,若 T(n)=Θ(g(n))T(n) = \Theta(g(n)),則必成立 T(n)=O(g(n))T(n) = O(g(n))。


解題方法

  1. 參數辨識:
    給定遞迴式為 T(n)=4T(n/3)+nlog⁡34T(n) = 4 T(n/3) + n^{\log_3 4},比對標準式 T(n)=aT(n/b)+f(n)T(n) = a T(n/b) + f(n):

    • a=4a = 4
    • b=3b = 3
    • f(n)=nlog⁡34f(n) = n^{\log_3 4}
  2. 計算分治樹葉節點複雜度:
    nlog⁡ba=nlog⁡34n^{\log_b a} = n^{\log_3 4}

  3. 比較 f(n)f(n) 與 nlog⁡ban^{\log_b a}:
    f(n)=nlog⁡34=Θ(nlog⁡34)=Θ(nlog⁡balg⁡0n)f(n) = n^{\log_3 4} = \Theta(n^{\log_3 4}) = \Theta(n^{\log_b a} \lg^0 n)
    符合主定理 Case 2(其中 k=0k = 0 之情形)。

  4. 代入公式求解:
    T(n)=Θ(nlog⁡balg⁡0+1n)=Θ(nlog⁡34lg⁡n)T(n) = \Theta(n^{\log_b a} \lg^{0+1} n) = \Theta(n^{\log_3 4} \lg n)

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 15 題

  1. The average case time complexity of quick sort over n items is (choose the tightest bound)
    A. O(n)O(n)
    B. O(nlg⁡n)O(n \lg n)
    C. O(nlg⁡n)O(n \lg n)
    D. O(n2)O(n^2)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

Quick sort 每次執行 partition 時,需要掃描目前子陣列,因此單層 partition 的總成本為 O(n)O(n)。

其時間複雜度取決於 pivot 將資料切分後的形狀:

  • 最佳情況:每次近乎平均切分,為 Θ(nlg⁡n)\Theta(n\lg n)。
  • 最壞情況:每次切成 00 與 n−1n-1,為 Θ(n2)\Theta(n^2)。
  • 平均情況:雖然切分不一定完全平均,但期望遞迴深度為 O(lg⁡n)O(\lg n),因此為 Θ(nlg⁡n)\Theta(n\lg n)。

平均情況可用遞迴式表示為:

T(n)=1n∑k=0n−1(T(k)+T(n−k−1))+Θ(n)T(n)=\frac{1}{n}\sum_{k=0}^{n-1}\bigl(T(k)+T(n-k-1)\bigr)+\Theta(n)

整理後可得:

T(n)=Θ(nlg⁡n)T(n)=\Theta(n\lg n)

因此平均情況的 tightest bound 是 O(nlg⁡n)O(n\lg n),更精確地說是 Θ(nlg⁡n)\Theta(n\lg n)。

解題方法

快速判斷方式是區分「平均情況」與「最壞情況」:

  1. 每一層 partition 的總工作量約為 nn。
  2. 平均情況下,資料經過隨機或合理的 pivot 選擇後,遞迴樹的期望高度為 O(lg⁡n)O(\lg n)。
  3. 總時間為:
每層成本×期望層數=O(n)×O(lg⁡n)=O(nlg⁡n)\text{每層成本}\times\text{期望層數} = O(n)\times O(\lg n) = O(n\lg n)

選項分析

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 16 題

  1. The worst-case time complexity of one push/pop operation in a stack of n items is (choose the tightest bound)
    A. O(1)O(1)
    B. O(log⁡n)O(\log n)
    C. O(log⁡n)O(\log n)
    D. O(n)O(n)
    E. O(nlog⁡n)O(n \log n)

登入後即可作答並保存紀錄。

這一題的完整詳解

觀念解析
堆疊(Stack)為後進先出(LIFO)之資料結構。無論採用單向鏈結串列(Singly Linked List)或是預先配置空間之陣列(Array)實作,push 與 pop 操作皆僅需於堆疊頂端(top)更新指標並執行單一元素的存取

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 17 題

  1. Consider a hash table H with 11 slots. Suppose we use quadratic probing as the collision resolution strategy, where the i-th probe position for a key k is given by the function h(k,i)=(k+i2)(mod11)h(k,i) = (k + i^2) \pmod{11}. Suppose we insert the following 8 keys to the hash table in the exact sequence: 82, 90, 30, 89, 61, 44, 28, 51. What is the index of the slot storing the key 51?
    A. 0
    B. 5
    C. 7
    D. 9
    E. 10

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查雜湊表(hash table)的二次探測(quadratic probing)。

雜湊表共有 1111 個槽位,索引為 00 至 1010。探測函數為

h(k,i)=(k+i2)(mod11)h(k,i)=(k+i^2)\pmod{11}

其中通常以 i=0i=0 作為第一次探測;若該位置已被占用,再依序使用 i=1,2,3,…i=1,2,3,\ldots 探測。

每個鍵值先以 k(mod11)k\pmod{11} 求出初始位置,再依插入順序處理碰撞。


解題方法

依序插入各鍵值,記錄已占用的槽位。

  1. 插入 8282
82(mod11)=582\pmod{11}=5

槽位 55 為空,故 8282 放在 55。

  1. 插入 9090
90(mod11)=290\pmod{11}=2

槽位 22 為空,故 9090 放在 22。

  1. 插入 3030
30(mod11)=830\pmod{11}=8

槽位 88 為空,故 3030 放在 88。

  1. 插入 8989
89(mod11)=189\pmod{11}=1

槽位 11 為空,故 8989 放在 11。

  1. 插入 6161
61(mod11)=661\pmod{11}=6

槽位 66 為空,故 6161 放在 66。

  1. 插入 4444
44(mod11)=044\pmod{11}=0

槽位 00 為空,故 4444 放在 00。

  1. 插入 2828
28(mod11)=628\pmod{11}=6

槽位 66 已有 6161,發生碰撞,因此進行二次探測:

h(28,1)=(28+12)(mod11)=29(mod11)=7h(28,1)=(28+1^2)\pmod{11}=29\pmod{11}=7

槽位 77 為空,故 2828 放在 77。

此時已占用槽位為

{0,1,2,5,6,7,8}\{0,1,2,5,6,7,8\}
  1. 插入 5151

初始位置為

51(mod11)=751\pmod{11}=7

槽位 77 已有 2828,繼續二次探測:

h(51,1)=(51+12)(mod11)=52(mod11)=8h(51,1)=(51+1^2)\pmod{11}=52\pmod{11}=8

槽位 88 已有 3030。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 18 題

  1. What is the maximum height of an AVL tree with 108 nodes? (A tree with only one node has height 0)
    A. 4
    B. 6
    C. 8
    D. 10
    E. 12

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

AVL 樹是一棵高度平衡的二元搜尋樹,對每個節點皆滿足:

∣hleft−hright∣≤1\left|h_{\text{left}}-h_{\text{right}}\right|\le 1

在節點數固定時,若要使 AVL 樹的高度最大,就必須讓每一層的節點數盡量少。因此,考慮「高度為 hh 的 AVL 樹所需的最少節點數」。

令 N(h)N(h) 表示高度為 hh 的 AVL 樹的最少節點數。題目給定單一節點高度為 00,因此:

N(0)=1N(0)=1

高度為 11 時,根節點只需有一個子節點:

N(1)=2N(1)=2

解題方法

高度為 hh 的最小 AVL 樹,其左右子樹高度必須分別為 h−1h-1 與 h−2h-2,才能符合 AVL 的高度平衡限制。因此遞迴式為:

N(h)=N(h−1)+N(h−2)+1N(h)=N(h-1)+N(h-2)+1

其中最後的 11 代表根節點。

逐步計算:

N(0)=1N(1)=2N(2)=2+1+1=4N(3)=4+2+1=7N(4)=7+4+1=12N(5)=12+7+1=20N(6)=20+12+1=33N(7)=33+20+1=54N(8)=54+33+1=88N(9)=88+54+1=143\begin{aligned} N(0)&=1\\ N(1)&=2\\ N(2)&=2+1+1=4\\ N(3)&=4+2+1=7\\ N(4)&=7+4+1=12\\ N(5)&=12+7+1=20\\ N(6)&=20+12+1=33\\ N(7)&=33+20+1=54\\ N(8)&=54+33+1=88\\ N(9)&=88+54+1=143 \end{aligned}

題目有 108108 個節點:

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 19 題

  1. Consider the AVL tree in Figure 1. After inserting key 60, what's the parent of the node with key 87?
    A. 42
    B. 60
    C. 66
    D. 73
    E. 94

登入後即可作答並保存紀錄。

這一題的完整詳解

因題目未提供原始圖形 Figure 1,依選項與典型 AVL 樹題型,合理假設原樹根節點為 73,左子樹包含 42(右子節點為 66),右子樹包含 94(左子節點為 87)。

步驟推導

  1. 二元搜尋樹(BST)插入 key 60
    依據 BST 性質比對大小:60<73→60>42→60<6660 < 73 \to 60 > 42 \to 60 < 66, key 60 插入至節點 66 的左子節點位置。

  2. 計算平衡係數(Balance Factor, BF)

    • 節點 66:左子樹高度 1,右子樹高度 0,BF=1−0=+1\text{BF} = 1 - 0 = +1。
    • 節點 42:左子樹高度 0,右子樹高度 2(路徑 66→6066 \to 60),BF=0−2=−2\text{BF} = 0 - 2 = -2,引發不平衡。
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 20 題

  1. Consider the AVL tree in Figure 1. After deleting key 12, what's the parent of the node with key 54?
    A. 42
    B. 66
    C. 73
    D. 87
    E. 94

登入後即可作答並保存紀錄。

這一題的完整詳解

本題未附原始圖一(Figure 1)圖像,依據題幹與選項數字(12, 42, 54, 66, 73, 87, 94),合理假設初始 AVL 樹為包含該 7 個鍵值之滿二元搜尋樹結構。

1. 初始 AVL 樹結構分析

  • 根節點(Root):6666
  • 左子樹:根節點為 4242,左子節點為 1212,右子節點為 5454
  • 右子樹:根節點為 8787,左子節點為 7373,右子節點為 9494

各節點之平衡因子(Balance Factor, BF=hleft−hrightBF = h_{left} - h_{right})皆為 00,符合 AVL 樹定義。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 21 題

  1. The worst-case time complexity of n splay operations in a splay tree of n items is (choose the tightest bound)
    A. O(n)O(n)
    B. O(nlog⁡n)O(n \log n)
    C. O(nlog⁡n)O(n \log n)
    D. O(n2)O(n^2)
    E. O(n2log⁡n)O(n^2 \log n)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

根據伸展樹(Splay Tree)的攤還分析定理(Splay Theorem,由 Sleator 與 Tarjan 提出):
對包含 nn 個項目的 Splay Tree 執行 mm 次 splay 操作,最壞情況下的累積總時間複雜度為 O((m+n)log⁡n)O((m + n) \log n)。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 22 題

  1. The worst-case time complexity of one delete operation in a splay tree of n items is (choose the tightest bound)
    A. O(1)O(1)
    B. O(log⁡n)O(\log n)
    C. O(log⁡n)O(\log n)
    D. O(n)O(n)
    E. O(nlog⁡n)O(n \log n)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

Splay tree(伸展樹)是一種自我調整的二元搜尋樹。每次搜尋、插入或刪除後,會將相關節點透過旋轉伸展至根節點。

其重要性質是:

  • 單一操作的最壞情況時間複雜度:O(n)O(n)
  • 一連串 mm 次操作的攤銷時間複雜度:O(mlog⁡n)O(m\log n)
  • 因此,單一操作不能直接套用攤銷界限 O(log⁡n)O(\log n)。

本題特別問的是「one delete operation 的 worst-case time complexity」,也就是單次刪除的最壞情況,而不是連續操作的平均攤銷成本。

解題方法

刪除 Splay tree 中的某個節點時,通常分成以下步驟:

  1. 先在樹中搜尋目標節點。
  2. 將目標節點伸展至根節點。
  3. 刪除根節點。
  4. 將根節點的左、右子樹合併。

若目標節點到根節點的路徑長度為 hh,搜尋與伸展的成本為 O(h)O(h)。合併左右子樹也需要沿著樹高進行操作,因此總成本為:

T(n)=O(h)T(n)=O(h)

一般二元搜尋樹的高度最多為 n−1n-1,Splay tree 雖然能改善長期操作的攤銷成本,但不保證每次操作的樹高都是 O(log⁡n)O(\log n)。因此最壞情況下:

h=O(n)h=O(n)

所以單次刪除的最壞情況時間複雜度為:

T(n)=O(n)T(n)=O(n)
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 23 題

  1. In a red-black tree, suppose there is a path with 3 red nodes, then there are at least how many black nodes in the tree?
    A. 0
    B. 4
    C. 7
    D. 8
    E. 11

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

紅黑樹必須符合以下性質:

  1. 根節點必須是黑色。
  2. 紅色節點的子節點必須是黑色,因此任意路徑上不能出現相鄰的紅色節點。
  3. 每個節點到其後代 NIL 葉節點的所有路徑,黑色節點數量相同。
  4. NIL 葉節點視為黑色,但通常題目計算「樹中的節點」時,不將 NIL 葉節點列入一般節點數量。

題目給定某條路徑上有 33 個紅色節點,要求至少需要多少個黑色節點。

解題方法

由於紅色節點不能相鄰,33 個紅色節點之間至少各要插入 11 個黑色節點:

R B R B RR\ B\ R\ B\ R

此外,紅黑樹的根節點必須為黑色;在最少情況下,這個根節點位於第一個紅色節點之前。最後一個紅色節點之後,為了連接至 NIL 黑色葉節點,至少還需要一個黑色節點。

因此,最少的根到葉路徑可表示為:

B R B R B R BB\ R\ B\ R\ B\ R\ B

其中黑色節點數量為:

1+1+1+1=41+1+1+1=4

NIL 葉節點雖然也視為黑色,但不計入一般樹節點數量;即使將 NIL 納入黑高度計算,也不會改變選項中的答案判斷。

選項分析

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 24 題

  1. The number of items in a binomial tree whose root has degree 8 is
    A. 9
    B. 34
    C. 64
    D. 128
    E. 256

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查 Binomial Tree(雙項樹) 的節點數量性質。

雙項樹 BkB_k 的定義如下:

  • B0B_0 只有 11 個節點。
  • BkB_k 由兩棵 Bk−1B_{k-1} 合併而成。

因此,若以 NkN_k 表示雙項樹 BkB_k 的節點數,則有遞迴式:

Nk=2Nk−1N_k=2N_{k-1}

且

N0=1N_0=1

由此可得:

Nk=2kN_k=2^k

另外,雙項樹 BkB_k 的根節點 degree 正好為 kk,所以根的 degree 為 88 時,該樹為 B8B_8。

解題方法

根節點 degree 為 88,表示這是一棵 B8B_8 雙項樹。

其節點總數為:

N8=28=256N_8=2^8=256

因此正確選項為 E。

選項分析

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 25 題

  1. The worst-case time complexity of constructing a binomial heap from an unordered array of n items is (choose the tightest bound)
    A. O(n)O(n)
    B. O(nlog⁡n)O(n \log n)
    C. O(nlog⁡n)O(n \log n)
    D. O(n2)O(n^2)
    E. O(n2log⁡n)O(n^2 \log n)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

Binomial heap 由多棵 binomial tree 組成,且每種階數至多有一棵。BkB_k 樹包含 2k2^k 個節點,根節點的子樹依序為 Bk−1,Bk−2,…,B0B_{k-1},B_{k-2},\ldots,B_0。

合併兩棵同階的 binomial tree 時,只需比較兩個根的鍵值,將鍵值較大的根接到較小根下方,時間為 O(1)O(1)。


解題方法

將陣列中的 nn 個元素各自視為一棵階數為 00 的單節點樹,接著依照二進位進位方式合併同階樹:

  • 若目前沒有階數 kk 的樹,放入該位置。
  • 若已有一棵階數 kk 的樹,便將兩棵 BkB_k 合併成一棵 Bk+1B_{k+1},如同二進位加法進位。
  • 持續處理直到沒有同階樹重複。

每次合併只需 O(1)O(1) 時間。初始有 nn 棵樹,最後剩下的樹數量等於 nn 的二進位表示中 11 的個數,最多為 ⌊log⁡2n⌋+1\lfloor\log_2 n\rfloor+1。因此合併次數為

n−popcount⁡(n)≤n−1n-\operatorname{popcount}(n)\leq n-1

總合併時間為 O(n)O(n)。最後掃描根串列找最小根,最多只有 O(log⁡n)O(\log n) 棵樹,仍不超過 O(n)O(n)。

此外,讀取 nn 個輸入元素本身需要 Ω(n)\Omega(n) 時間,因此建構時間為

Θ(n)\Theta(n)

所以其最緊確界為 O(n)O(n)。


選項分析

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 26 題

  1. How many nodes have degree 5 in a binomial heap with 2019 items?
    A. 32
    B. 63
    C. 64
    D. 128
    E. 256

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

  1. 二項堆疊(Binomial Heap)結構
    大小為 NN 的二項堆疊,其包含的二項樹(Binomial Tree)BkB_k 對應於 NN 的二進位表示法中位數為 11 的項:
    2019=1024+512+256+128+64+32+2+1=(11111100011)22019 = 1024 + 512 + 256 + 128 + 64 + 32 + 2 + 1 = (11111100011)_2
    故該堆疊包含二項樹:B10,B9,B8,B7,B6,B5,B1,B0B_{10}, B_9, B_8, B_7, B_6, B_5, B_1, B_0。

  2. 二項樹 BkB_k 的分支度(Degree)分佈
    在一棵二項樹 BkB_k 中,分支度為 dd 的節點數量 N(k,d)N(k, d) 如下:

    • 若 d=kd = k:N(k,d)=1N(k, d) = 1 (根節點)
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 27 題

  1. What is the maximum possible degree of a root in a Fibonacci heap with 256 nodes?
    A. 8
    B. 9
    C. 10
    D. 11
    E. 16

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

Fibonacci heap 中,根節點的 degree 是其子節點數量。由 Fibonacci heap 的結構性質可知,若某節點的 degree 為 dd,則以它為根的子樹至少包含

Fd+2F_{d+2}

個節點,其中 FkF_k 為 Fibonacci 數列:

F0=0,F1=1,Fk=Fk−1+Fk−2.F_0=0,\quad F_1=1,\quad F_k=F_{k-1}+F_{k-2}.

因此,含有 nn 個節點的 Fibonacci heap,其任一節點的最大 degree D(n)D(n) 滿足:

FD(n)+2≤n.F_{D(n)+2}\le n.

利用 Fibonacci 數列的漸近關係,也常寫成:

D(n)=O(log⁡φn),D(n)=O(\log_\varphi n),

其中

φ=1+52≈1.618\varphi=\frac{1+\sqrt5}{2}\approx 1.618

為黃金比例。

解題方法

本題有 n=256n=256 個節點,直接尋找最大的 dd,使得:

Fd+2≤256.F_{d+2}\le 256.

列出相關 Fibonacci 數:

F10=55,F11=89,F12=144,F13=233,F14=377.F_{10}=55,\quad F_{11}=89,\quad F_{12}=144,\quad F_{13}=233,\quad F_{14}=377.

當 d=11d=11 時:

Fd+2=F13=233≤256.F_{d+2}=F_{13}=233\le256.

當 d=12d=12 時:

Fd+2=F14=377>256.F_{d+2}=F_{14}=377>256.

所以最大可能 degree 為:

D(256)=11.D(256)=11.

亦可用對數快速估算:

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 28 題

  1. The worst-case time complexity of n decrease key operations in a Fibonacci heap of n items is (choose the tightest bound)
    A. O(n)O(n)
    B. O(nlog⁡n)O(n \log n)
    C. O(nlog⁡n)O(n \log n)
    D. O(n2)O(n^2)
    E. O(n2log⁡n)O(n^2 \log n)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查 Fibonacci heap 中 decrease-key 的時間複雜度,必須區分:

  • 攤銷時間複雜度:decrease-key 為 O(1)O(1)。
  • 單次最壞時間複雜度:可能觸發連鎖切割,為 O(log⁡n)O(\log n)。

Fibonacci heap 中每個節點的最大階數為 O(log⁡n)O(\log n),因此一次 decrease-key 最多進行 O(log⁡n)O(\log n) 次連鎖切割。

解題方法

題目問的是 nn 次 decrease-key 操作的最壞情況。

單次操作的最壞成本為:

O(log⁡n)O(\log n)

因此,nn 次操作的最壞總時間為:

n×O(log⁡n)=O(nlog⁡n)n \times O(\log n)=O(n\log n)

所以最緊的上界是:

O(nlog⁡n)\boxed{O(n\log n)}

需注意,若題目問的是「攤銷總時間」,則答案會是:

n×O(1)=O(n)n\times O(1)=O(n)

但本題明確詢問 worst-case time complexity,故採用單次最壞成本 O(log⁡n)O(\log n)。

選項分析

A. O(n)O(n)

錯誤。

O(n)O(n) 是 nn 次 decrease-key 的攤銷時間上界,不是最壞情況總時間上界。最壞情況下,每次操作都可能觸發最多 O(log⁡n)O(\log n) 層的連鎖切割。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 29 題

  1. The worst-case time complexity of one decrease key operation in a Fibonacci heap of n items is (choose the tightest bound)
    A. O(1)O(1)
    B. O(log⁡n)O(\log n)
    C. O(log⁡n)O(\log n)
    D. O(n)O(n)
    E. O(nlog⁡n)O(n \log n)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

Fibonacci heap 的 decrease-key 會降低節點鍵值。若降低後造成該節點小於其父節點,便違反最小堆序性,因此必須:

  1. 將該節點從原父節點切下,加入根串列。
  2. 若父節點已經被標記,則繼續將父節點切下,形成 cascading cut(級聯切割)。
  3. 此過程可能沿著祖先鏈一路向上進行。

每一次切割與移動節點本身是 O(1)O(1),因此總時間取決於級聯切割的次數。

需要區分兩種複雜度:

  • 攤銷時間:O(1)O(1)
  • 最壞情況時間:O(n)O(n)

Fibonacci heap 的「最大度數」是 O(log⁡n)O(\log n),但這不代表樹的高度也是 O(log⁡n)O(\log n)。級聯切割可能沿著高度很大的父子鏈進行。

解題方法

一次 decrease-key 的最壞情況如下:

  • 降低某個深層節點的鍵值;
  • 該節點違反堆序,因此被切下;
  • 其父節點已標記,也被切下;
  • 再往上的祖先同樣已標記,持續被切下。

若父鏈長度為 kk,便需要執行 kk 次切割。每次切割為 O(1)O(1),所以:

T(k)=O(k)T(k)=O(k)

Fibonacci heap 的樹高在最壞情況下可達 O(n)O(n),因此:

T(n)=O(n)T(n)=O(n)

而且確實存在需要切割線性數量節點的情況,所以最壞情況的緊確界為:

Θ(n)\Theta(n)

因此本題要求的最壞情況緊確上界是 O(n)O(n)。

選項分析

A. O(1)O(1)

錯誤。

O(1)O(1) 是 Fibonacci heap 中 decrease-key 的攤銷時間複雜度。透過勢能函數,可以將平時不發生級聯切割時累積的勢能,用來支付之後的切割成本。

但單一操作在最壞情況下仍可能觸發大量級聯切割,因此不能宣稱最壞情況為 O(1)O(1)。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 30 題

  1. Let x be a non-root node in a Fibonacci heap. If x has degree 6, at least how many children of x should have degree 3?
    A. 0
    B. 1
    C. 2
    D. 3
    E. 4

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查 Fibonacci heap 的子節點度數性質。

在 Fibonacci heap 中,若非根節點 xx 目前有 kk 個子節點,將其子節點依照加入 xx 的先後順序編號為 y1,y2,…,yky_1,y_2,\ldots,y_k,則有:

deg⁡(yi)≥i−2\deg(y_i)\ge i-2

原因是:yiy_i 在與 xx 連結時,必須與當時具有相同度數的根節點合併,因此其初始度數至少為 i−1i-1;而 Fibonacci heap 的 cascading cut 性質保證,一個仍然是 xx 子節點的節點最多失去一個子節點,所以目前度數至少為 i−2i-2。

解題方法

題目給定 xx 的 degree 為 66,因此令其六個子節點依序為 y1,…,y6y_1,\ldots,y_6,套用:

deg⁡(yi)≥i−2\deg(y_i)\ge i-2

可得:

子節點度數下限y10y20y31y42y53y64\begin{array}{c|c} \text{子節點} & \text{度數下限} \\ \hline y_1 & 0\\ y_2 & 0\\ y_3 & 1\\ y_4 & 2\\ y_5 & 3\\ y_6 & 4 \end{array}

因此,y5y_5 與 y6y_6 至少都具有 33 個子節點。也就是說,至少有 22 個子節點的 degree 達到 33 以上。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 31 題

Consider disjoint-set union/find algorithms with weighted union and path compression. Assume the disjoint-set forest consists of nn items, what is the worst-case time complexity of nn find/union operations? (choose the tightest bound)
(A) O(n)O(n)
(B) O(nlog⁡∗n)O(n \log^* n)
(C) O(nlog⁡n)O(n \log n)
(D) O(n2)O(n^2)
(E) O(n2log⁡n)O(n^2 \log n)

登入後即可作答並保存紀錄。

這一題的完整詳解
載入中…

第 32 題

Following the previous question, the worst-case time complexity of one find operations is (choose the tightest bound)
(A) O(1)O(1)
(B) O(log⁡∗n)O(\log^* n)
(C) O(log⁡n)O(\log n)
(D) O(n)O(n)
(E) O(nlog⁡n)O(n \log n)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考加權合併(weighted union)與路徑壓縮(path compression)下,單次 find 的最壞時間複雜度。加權合併會把較小的集合樹接到較大的集合樹下;路徑壓縮則會在 find 時,把路徑上的節點直接接近根節點。

解題方法

圖中第 31 題給定:共有 nn 個項目的不相交集合森林,使用加權合併與路徑壓縮;第 32 題問其中一次 find 的最壞時間。判斷單次操作時,要看呼叫 find 前,樹中最長路徑有多長。

加權合併能限制樹高。每當某節點的深度增加 11,它所在的樹必須被接到至少同樣大的另一棵樹下,因此該節點所屬集合的大小至少加倍。深度增加 hh 次後,集合大小至少為 2h2^h。因為總項目數為 nn,所以

2h≤n⟹h≤log⁡2n.2^h \le n \quad\Longrightarrow\quad h \le \log_2 n.

因此,單次 find 最多沿著一條高度為 O(log⁡n)O(\log n) 的路徑往根節點走。路徑壓縮會縮短後續操作的路徑,但不會讓這次操作在壓縮前需要走過的路徑超過 O(log⁡n)O(\log n)。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 33 題5 分

複選題(每題至少有一個正確選項。每答對一個選項得 1 分;每答錯一個選項倒扣 1 分至本大題 0 分為止;不作答者,得 0 分。)

Suppose f(n)f(n) is positive function of nn, which of the following statement(s) are true?
(A) If f(n)f(n) is Ω(n2)\Omega(n^2) and that f(n)n2\frac{f(n)}{n^2} exists, then f(n)n2>0\frac{f(n)}{n^2} > 0.
(B) If f(n)f(n) is O(n2)O(n^2) and that f(n)n2\frac{f(n)}{n^2} exists, then f(n)n2<∞\frac{f(n)}{n^2} < \infty.
(C) If f(n)f(n) is Θ(n2)\Theta(n^2), then f(2n)f(n)\frac{f(2n)}{f(n)} exists, and f(2n)f(n)=4\frac{f(2n)}{f(n)} = 4.
(D) If f(n)f(n) is O(n!)O(n!) then log⁡f(n)\log f(n) is O(nlog⁡n)O(n \log n).
(E) If f(n)f(n) is O(log⁡2n)O(\log_2 n) then 2f(n)2^{f(n)} is O(n)O(n).

登入後即可作答並保存紀錄。

這一題的完整詳解
載入中…

第 四-1 題10 分

(a) (3%) What is the maximum s−ts-t flow in the graph below?

🖼️【此處有附圖,請對照原卷】

(b) (3%) Draw a line that slices the graph into two pieces along the minimum s−ts-t cut.

(c) (4%) Draw the residual graph that results after running the Ford-Fulkerson algorithm to completion on the above graph. Label the edges with their residual capacities.

🖼️ 本題含圖表,以下為原卷對應頁面:
原卷第 3 頁

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考最大流、最小割與殘餘圖。流量須符合每個中間點的流量守恆,且每條邊上的流量不得超過容量。最大流最小割定理指出,最大流值等於最小割容量。

解題方法

圖中的節點為 s,A,B,C,ts,A,B,C,t;有向邊及容量依序為 s→A:3s\to A:3、A→t:7A\to t:7、s→B:6s\to B:6、A→B:2A\to B:2、B→C:6B\to C:6、C→A:1C\to A:1、C→t:3C\to t:3。

可取以下流量:

有向邊容量流量
s→As\to A33
A→tA\to t74
s→Bs\to B64
A→BA\to B20
B→CB\to C64
C→AC\to A11
C→tC\to t33

各中間點均符合流量守恆:AA 收到 3+1=43+1=4,並送出 44;BB 收到 44,並送出 44;CC 收到 44,並送出 1+3=41+3=4。因此,這組流量的總值為 3+4=73+4=7。

將節點分成 S={s,B,C}S=\{s,B,C\} 與 T={A,t}T=\{A,t\}。由 SS 指向 TT 的邊為 s→As\to A、C→AC\to A、C→tC\to t,割容量為

3+1+3=7.3+1+3=7.

任何流量都不可能超過此割容量;上面又已構造出值為 77 的可行流量,因此最大流值就是 77,且此割為最小 ss-tt 割。圖上的割線應將 s,B,Cs,B,C 留在一側,將 A,tA,t 留在另一側,並切過上述三條跨割邊。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 四-2 題10 分

Santa Claus is packing his sleigh with gifts. His sleigh can hold no more than cc kilograms. He has nn different gifts, and he wants to choose a subset of them to pack in his sleigh. Gift ii has utility uiu_i (the amount of happiness gift ii induces in some child) and weight wiw_i. Define the weight and utility of a set of gifts as follows:

  • The weight of a set of gifts is the sum of their weights.
  • The utility of a set of gifts is the product of their utilities.

For example, if Santa chooses two gifts such that w1=3w_1 = 3, u1=4u_1 = 4 and w2=2w_2 = 2, u2=2u_2 = 2, then the total weight of this set of gifts is 55 kilograms and the total utility of this set of gifts is 88. All numbers mentioned are positive integers and for each gift ii, wi≤cw_i \le c. Your job is to devise an algorithm that lets Santa maximize the utility of the set of gifts he packs in his sleigh without exceeding its capacity cc.

(a) (3%) A greedy algorithm for this problem takes the gifts in order of increasing weight until the sleigh can hold no more gifts. Give a small example to demonstrate that the greedy algorithm does not generate an optimal choice of gifts.

(b) (7%) Let H(k,x)H(k, x) be the maximal achievable utility if the gifts are drawn from 11 through kk (where k≤nk \le n) and weigh at most xx kilograms. Give a recurrence of H(k,x)H(k, x) that can be used in a dynamic program to compute the maximum utility of a set of gifts that Santa can pack in his sleigh. Remember to evaluate the base cases for your recurrence.

登入後即可作答並保存紀錄。

這一題的完整詳解
載入中…

其他考古題