108 年 國立臺灣大學電子工程學研究所丁組《資料結構(B)》

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

第 1 題

  1. A binary heap may not be a complete binary tree.
    (A) True
    (B) False

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

這一題的完整詳解

核心觀念

Binary heap(二元堆積)必須同時符合兩項條件:

  1. 結構條件:是一棵完全二元樹(complete binary tree)。
  2. 堆積性質:
    • Max-heap:每個節點的鍵值不小於其子節點。
    • Min-heap:每個節點的鍵值不大於其子節點。

其中,「完全二元樹」表示除了最後一層之外,其餘各層皆填滿,且最後一層的節點必須由左至右排列。

因此,完全二元樹是 binary heap 的必要結構條件。

解題方法

題目敘述為:

A binary heap may not be a complete binary tree.

意思是:「二元堆積可能不是完全二元樹。」

根據定義,二元堆積一定要先具備完全二元樹的結構,再額外滿足 min-heap 或 max-heap 的順序條件。若一棵二元樹不是完全二元樹,即使節點大小符合堆積順序,也不能稱為 binary heap。

例如,下列樹雖符合 max-heap 的大小關係:

🔒

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

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

免費註冊

第 2 題

  1. A complete binary tree can be transformed into a heap in Θ(n)\Theta(n) steps.
    (A) True
    (B) False

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

這一題的完整詳解

核心觀念

本題考查「將任意完全二元樹轉換成 Heap 的時間複雜度」。

Heap 通常指符合下列條件的完全二元樹:

  1. 結構上是完全二元樹。
  2. 順序上符合 Heap-order:
    • Max-Heap:每個父節點皆不小於子節點。
    • Min-Heap:每個父節點皆不大於子節點。

將完全二元樹轉成 Heap,最有效率的方法是使用自底向上的 Build-Heap:

  • 從最後一個非葉節點開始。
  • 依序對每個內部節點執行 Heapify。
  • 葉節點不需要調整。

解題方法

設樹中共有 nn 個節點。對高度為 hh 的節點執行 Heapify,最多需要向下調整 O(h)O(h) 層。

完全二元樹中,高度越大的節點數量越少:

  • 高度 00 的節點約有 n2\frac{n}{2} 個;
  • 高度 11 的節點約有 n4\frac{n}{4} 個;
  • 高度 22 的節點約有 n8\frac{n}{8} 個;
  • 一般而言,高度為 hh 的節點數量至多為 n2h+1\frac{n}{2^{h+1}}。

因此,所有節點執行 Heapify 的總成本為:

T(n)=∑h=0⌊log⁡n⌋n2h+1O(h)T(n) = \sum_{h=0}^{\lfloor \log n \rfloor} \frac{n}{2^{h+1}}O(h)

提出 nn:

T(n)=O(n)∑h=0⌊log⁡n⌋h2h+1T(n) = O(n)\sum_{h=0}^{\lfloor \log n \rfloor}\frac{h}{2^{h+1}}

由於級數

🔒

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

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

免費註冊

第 3 題

  1. There is a min-heap with seven distinct elements so that the preorder traversal of it gives the elements in sorted order.
    (A) True
    (B) False

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

這一題的完整詳解

核心觀念

本題考查兩個定義:

  1. Min-heap(最小堆積)
    必須是完全二元樹,且每個節點的鍵值皆不大於其子節點:

    parent≤child\text{parent} \leq \text{child}

  2. Preorder traversal(前序走訪)
    順序為:

    根節點→左子樹→右子樹\text{根節點} \rightarrow \text{左子樹} \rightarrow \text{右子樹}

題目問的是「是否存在」一個具有七個相異元素的 min-heap,使其前序走訪結果恰好為遞增排序。


解題方法

直接構造一個符合條件的例子即可證明敘述為真。

取完全二元樹如下:

        1
      /   \
     2     5
    / \   / \
   3   4 6   7

其前序走訪順序為:

1→2→3→4→5→6→71 \rightarrow 2 \rightarrow 3 \rightarrow 4 \rightarrow 5 \rightarrow 6 \rightarrow 7

正好是由小到大的排序結果。

接著檢查 min-heap 條件:

🔒

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

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

免費註冊

第 4 題

  1. Arrays are inefficient for implementing dynamic sorted lists because the insert and delete operations require moving a quarter of the elements, on average.
    (A) True
    (B) False

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

這一題的完整詳解

核心觀念

陣列實作動態排序串列時,元素通常必須維持遞增或遞減順序。因此插入或刪除元素時,不能只修改一個位置,還要搬移一段連續元素。

若陣列目前有 nn 個元素:

  • 插入新元素:需將插入位置之後的元素向右搬移。
  • 刪除既有元素:需將被刪除位置之後的元素向左搬移。

若操作位置均勻分布,平均搬移量約為一半元素,而不是四分之一。

解題方法

設插入位置可能是第 0,1,…,n0,1,\ldots,n 個位置,共有 n+1n+1 種可能。

若插入在位置 ii,需搬移後方的 n−in-i 個元素,因此平均搬移數為

1n+1∑i=0n(n−i)=1n+1∑k=0nk=n2.\frac{1}{n+1}\sum_{i=0}^{n}(n-i) = \frac{1}{n+1}\sum_{k=0}^{n}k = \frac{n}{2}.

因此,陣列插入排序串列的平均搬移量為

Θ(n).\Theta(n).

刪除元素時,若刪除第 ii 個元素,需搬移其後的 n−i−1n-i-1 個元素。平均搬移數為

🔒

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

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

免費註冊

第 5 題

  1. Computers handle postfix notation more easily than infix notation because infix requires parentheses but postfix does not.
    (A) True
    (B) False

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

這一題的完整詳解

核心觀念

本題考查中序表示法(infix notation)與後序表示法(postfix notation)的運算式表示方式,以及運算子優先權與括號的作用。

  • 中序表示法:運算子寫在兩個運算元之間,例如 A+BA+B。
  • 後序表示法:運算子寫在兩個運算元之後,例如 AB+AB+。
  • 後序表示法不需依賴括號或運算子優先權即可決定運算順序,通常可利用堆疊直接由左至右處理。

解題方法

判斷題幹中的因果敘述是否完全正確。

中序表示法並非「需要括號」才能表達運算式。例如:

A+B×CA+B\times C

依照運算子優先權,乘法先於加法,因此可直接判定為:

A+(B×C)A+(B\times C)

不加括號也不會產生歧義。

括號只是在需要改變預設運算順序時使用,例如:

(A+B)×C(A+B)\times C

相較之下,後序表示法將運算順序直接編碼在符號排列中:

A+B×C⟶ABC×+A+B\times C \longrightarrow ABC\times+
🔒

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

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

免費註冊

第 6 題

  1. Hash tables that use separate chaining need rehashing to avoid performance degradation due to long chains.
    (A) True
    (B) False

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

這一題的完整詳解

觀念解析與推導

雜湊表(Hash Table)採用**獨立鏈結法(Separate Chaining)**時,其操作效能取決於負載因子(Load Factor)α=NM\alpha = \frac{N}{M}(其中 NN 為元素總數,MM 為桶數/陣列大小)。

  1. 鏈長與效能關聯:當資料量 NN 不斷增加而表長 MM 不變時,負載因子 α\alpha 會大幅提升,導致每個桶位(Bucket)所連結的單向串列(Chain)過長。
🔒

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

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

免費註冊

第 7 題

  1. Using quadratic probing to resolve hash collision, we add i2i^2 to the address upon the i-th collision.
    (A) True
    (B) False

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

這一題的完整詳解

核心觀念

本題考查雜湊表(hash table)發生碰撞(collision)時的開放定址法(open addressing),以及其中的二次探測(quadratic probing)。

若雜湊函數產生的初始位置為 h(k)h(k),二次探測通常依序檢查:

h(k),h(k)+12,h(k)+22,h(k)+32,…h(k),\quad h(k)+1^2,\quad h(k)+2^2,\quad h(k)+3^2,\ldots

實際位置須對雜湊表大小 mm 取模:

index⁡i=(h(k)+i2) mod m\operatorname{index}_i=(h(k)+i^2)\bmod m

其中 ii 表示第 ii 次探測所使用的位移量。

解題方法

題目敘述「在第 ii 次碰撞時,將 i2i^2 加到該位址上」,其意義就是發生碰撞後,不採用固定的線性位移,而是依照碰撞次數使用平方位移:

🔒

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

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

免費註冊

第 8 題

  1. If a binary tree has 1,000 nodes, it has a minimum height of 10. (The height of a tree with one node is 0.)
    (A) True
    (B) False

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

這一題的完整詳解

觀念與推導

根據題目定義,單一節點之二元樹高度為 00。高度為 hh 的二元樹最多可容納之節點數 Nmax⁡N_{\max} 為:
Nmax⁡=∑i=0h2i=2h+1−1N_{\max} = \sum_{i=0}^{h} 2^i = 2^{h+1} - 1

當二元樹擁有 n=1000n = 1000 個節點時,若要使高度最小,需滿足:

🔒

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

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

免費註冊

第 9 題

  1. If T is a BST and both the left and right subtrees of T are AVL trees, then T must be an AVL tree.
    (A) True
    (B) False

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

這一題的完整詳解

核心觀念

這題考查二元搜尋樹(BST)與 AVL 樹的定義。

  • BST:對任一節點 xx,左子樹所有鍵值小於 xx,右子樹所有鍵值大於 xx。
  • AVL 樹:本身必須是 BST,且每一個節點都滿足平衡條件:
∣h(left)−h(right)∣≤1\left|h(\text{left})-h(\text{right})\right|\leq 1

其中 hh 表示子樹高度。

題目只保證 TT 的左、右子樹各自為 AVL 樹,並未保證根節點 TT 本身左右子樹的高度差不超過 11。

解題方法

關鍵在於區分:

  • 左子樹是 AVL 樹:表示左子樹內部的每個節點皆平衡。
  • 右子樹是 AVL 樹:表示右子樹內部的每個節點皆平衡。
  • TT 是 AVL 樹:除了左右子樹內部平衡外,根節點也必須平衡。

可構造下列 BST:

          10
         /  \
        5    20
       /
      3
     / \
    2   4

採用葉節點高度為 00、空子樹高度為 −1-1:

  • 節點 33 的左右子樹高度皆為 00,高度為 11,平衡。
  • 節點 55 的左子樹高度為 11、右子樹高度為 −1-1,高度差為
∣1−(−1)∣=2|1-(-1)|=2

此例中節點 55 並不平衡,因此不符合左子樹為 AVL 的條件。改用以下合法構造:

🔒

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

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

免費註冊

第 10 題

  1. The postfix expression "53+77-1-/" evaluates to 4.
    (A) True
    (B) False

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

這一題的完整詳解

核心觀念

後序表示法(postfix expression)將運算子放在運算元之後,計算時由左至右掃描:

  • 遇到運算元:推入堆疊。
  • 遇到二元運算子:取出堆疊頂端的兩個運算元,先取出者為右運算元,後取出者為左運算元,計算後再將結果推回堆疊。

本題的運算子皆為二元運算子,包含加法、減法與除法。

解題方法

將運算式

53+77−1−/53+77-1-/

拆成後序符號:

5, 3, +, 7, 7, −, 1, −, /5,\ 3,\ +,\ 7,\ 7,\ -,\ 1,\ -,\ /

依序利用堆疊計算:

讀入符號操作堆疊內容
55推入[5][5]
33推入[5,3][5,3]
++5+3=85+3=8[8][8]
77推入[8,7][8,7]
77推入[8,7,7][8,7,7]
−-7−7=07-7=0[8,0][8,0]
11推入[8,0,1][8,0,1]
🔒

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

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

免費註冊

第 11 題

  1. Which of the following statements are true?
    (A). f(n)∈O(g(n))f(n) \in O(g(n)) if and only if g(n)∈Ω(f(n))g(n) \in \Omega(f(n)).
    (B). Θ(g(n))=Θ(g(n))∩Ω(g(n))\Theta(g(n)) = \Theta(g(n)) \cap \Omega(g(n)).
    (C). o(g(n))=O(g(n))−Ω(g(n))o(g(n)) = O(g(n)) - \Omega(g(n)).
    (D). ω(g(n))∪Θ(g(n))=Ω(g(n))\omega(g(n)) \cup \Theta(g(n)) = \Omega(g(n)).
    (E). ω(g(n))∩Θ(g(n))=∅\omega(g(n)) \cap \Theta(g(n)) = \emptyset.

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

這一題的完整詳解

各選項分析與證明

(A) 正確
依據漸近記號之轉置對稱性(Transpose Symmetry):
f(n)∈O(g(n))  ⟺  ∃c>0,n0>0 使得 ∀n≥n0,0≤f(n)≤c⋅g(n)f(n) \in O(g(n)) \iff \exists c > 0, n_0 > 0 \text{ 使得 } \forall n \ge n_0, 0 \le f(n) \le c \cdot g(n)
等式兩邊同除以 cc(取 c′=1/c>0c' = 1/c > 0):
  ⟺  ∃c′>0,n0>0 使得 ∀n≥n0,0≤c′⋅f(n)≤g(n)  ⟺  g(n)∈Ω(f(n))\iff \exists c' > 0, n_0 > 0 \text{ 使得 } \forall n \ge n_0, 0 \le c' \cdot f(n) \le g(n) \iff g(n) \in \Omega(f(n))

(B) 正確
依據定義,Θ(g(n))=O(g(n))∩Ω(g(n))\Theta(g(n)) = O(g(n)) \cap \Omega(g(n)),故 Θ(g(n))⊆Ω(g(n))\Theta(g(n)) \subseteq \Omega(g(n))。
對任意集合 XX 與 YY,若 X⊆YX \subseteq Y,則 X∩Y=XX \cap Y = X。
因此 Θ(g(n))∩Ω(g(n))=Θ(g(n))\Theta(g(n)) \cap \Omega(g(n)) = \Theta(g(n)) 恆成立。

(C) 錯誤
o(g(n))⊆O(g(n))−Ω(g(n))o(g(n)) \subseteq O(g(n)) - \Omega(g(n)),但兩者不相等。
反例:設 g(n)=ng(n) = n,f(n)={n,n 為偶數1,n 為奇數f(n) = \begin{cases} n, & n \text{ 為偶數} \\ 1, & n \text{ 為奇數} \end{cases}

  • f(n)≤n  ⟹  f(n)∈O(n)f(n) \le n \implies f(n) \in O(n)。
🔒

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

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

免費註冊

第 12 題

  1. Which of the following statements are true?
    (A). Performing preorder traversal on BST produces a sorted list.
    (B). The k-th smallest element in a BST with n elements can be found with O(n)O(n) in time.
    (C). Every subtree of a BST is another BST.
    (D). The minimal AVL tree with height 5 has 20 nodes. (The height of a tree with one node is 0.)
    (E). When the structure of an AVL tree changes (e.g., with insertion or deletion), one single rotation is sufficient to restore the AVL tree property.

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

這一題的完整詳解

(A) 錯誤
對 BST 進行**中序追蹤(Inorder Traversal)**才能得到遞增排序結果;前序追蹤(Preorder Traversal)無法保證獲得排序結果。

(B) 正確
利用中序追蹤可以在 O(n)O(n) 時間內按順序訪問樹中所有元素,因此尋找第 kk 小元素的最高時間複雜度為 O(n)O(n)(若節點額外紀錄子樹大小,可進一步優化至 O(h)O(h))。

(C) 正確
根據 BST 定義,樹中任一節點的左子樹所有鍵值皆小於該節點鍵值,右子樹所有鍵值皆大於該節點鍵值,且其左右子樹各自皆須符合 BST 定義。因此 BST 的任意子樹必為另一棵 BST。

(D) 正確
高度為 hh 之最小 AVL Tree 的最少節點數遞迴式為:
N(h)=N(h−1)+N(h−2)+1N(h) = N(h-1) + N(h-2) + 1

🔒

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

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

免費註冊

第 13 題

  1. A graph is a pair (V, E), where V is a set of nodes, called vertices, and E is a collection of pairs of vertices, called edges. There are several ways to represent a graph, among them Adjacency Matrix and Adjacency List.
    • Adjacency Matrix: Let A be a matrix of size ∣V∣×∣V∣|V| \times |V|. A[u,v]=1A[u, v] = 1 if there is an edge between vertex u and v, and 0, otherwise.
    • Adjacency List: All vertices connected to a vertex v are listed on an adjacency list for vertex v.
    Which of the following are correct?
    (A). Adjacency List is more suitable for dense graph.
    (B). Using Adjacency Matrix, checking edge between vertices u and v takes constant time.
    (C). The big advantage of BFS is that it has much lower memory requirement than DFS.
    (D). BFS is better in finding shortest paths than DFS.
    (E). Using Adjacency List, the time complexity of topological sort on a directed graph is O(∣E∣+∣V∣)O(|E| + |V|).

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

這一題的完整詳解

核心觀念

本題考查:

  • Adjacency Matrix 與 Adjacency List 的適用情境與操作複雜度。
  • BFS、DFS 的記憶體需求。
  • BFS 求無權圖最短路徑的性質。
  • 使用 Adjacency List 進行拓樸排序的時間複雜度。

設圖中頂點數為 ∣V∣|V|,邊數為 ∣E∣|E|。

解題方法

逐一檢查各選項是否符合圖形表示法與圖形搜尋演算法的基本性質。

選項分析

(A) Adjacency List is more suitable for dense graph.

錯誤。

Adjacency Matrix 必須配置一個 ∣V∣×∣V∣|V|\times |V| 的矩陣,因此空間複雜度為:

O(∣V∣2)O(|V|^2)

Adjacency List 只儲存實際存在的邊,空間複雜度為:

O(∣V∣+∣E∣)O(|V|+|E|)

稀疏圖的 ∣E∣|E| 遠小於 ∣V∣2|V|^2,使用 Adjacency List 較節省空間;稠密圖的邊數接近 ∣V∣2|V|^2,使用 Adjacency Matrix 通常較合適。

因此,Adjacency List 並非較適合稠密圖,選項錯誤。


(B) Using Adjacency Matrix, checking edge between vertices u and v takes constant time.

正確。

在 Adjacency Matrix 中,頂點 uu 與 vv 之間是否有邊,直接查詢矩陣位置 A[u,v]A[u,v] 即可:

A[u,v]={1,若 u 與 v 之間有邊0,否則A[u,v]= \begin{cases} 1, & \text{若 }u\text{ 與 }v\text{ 之間有邊}\\ 0, & \text{否則} \end{cases}

矩陣查詢只需一次索引存取,因此時間複雜度為:

O(1)O(1)

(C) The big advantage of BFS is that it has much lower memory requirement than DFS.

錯誤。

BFS 使用 Queue,會保存某一層或多層尚未處理的頂點。最壞情況下,Queue 可能同時存放 O(∣V∣)O(|V|) 個頂點。

DFS 使用遞迴堆疊或明確 Stack,最壞情況下也需要 O(∣V∣)O(|V|) 的空間。因此,BFS 並沒有「遠低於 DFS」的記憶體需求。

在某些圖形中:

🔒

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

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

免費註冊

第 14 題

  1. An algorithm is said to be insensitive to input if its running time is independent of the initial state of its input. For sorting algorithms, that means that the run time depends only on the number of elements to be sorted, not on their initial arrangement. Which sorting algorithms are insensitive to input?
    (A). Bubble sort.
    (B). Selection sort.
    (C). Merge sort.
    (D). Quick sort.
    (E). Radix sort.

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

這一題的完整詳解

核心觀念

本題考查排序演算法的「輸入敏感性(input-sensitive)」。

若排序演算法對輸入不敏感,表示在元素個數為 nn 時,其執行時間的漸進複雜度不因原始排列不同而改變。也就是說,最佳、平均與最差情況的時間複雜度相同,或至少同階。

常見排序法的判斷如下:

  • 若每次都固定執行相同數量的比較或處理,通常對輸入不敏感。
  • 若執行過程會依資料排列決定提早結束、分割結果或遞迴深度,通常對輸入敏感。

解題方法

逐一比較各排序演算法在不同輸入排列下的時間複雜度:

  • Bubble sort:可能因已排序而提早結束,時間會改變。
  • Selection sort:不論資料排列,總比較次數固定為 Θ(n2)\Theta(n^2)。
  • Merge sort:每次分割與合併的結構固定,時間為 Θ(nlog⁡n)\Theta(n\log n)。
  • Quick sort:樞紐元素造成的分割結果取決於輸入排列。
  • Radix sort:依固定位數與基數逐位處理,時間不依初始排列改變。

因此選出 Selection sort、Merge sort 與 Radix sort。

選項分析

(A) Bubble sort:錯誤

標準的最佳化 Bubble sort 在每一輪檢查是否發生交換。若輸入已經排序完成,第一輪就可發現沒有交換,直接結束:

Tbest(n)=Θ(n)T_{\text{best}}(n)=\Theta(n)

若輸入為反向排序,則需要進行多輪交換:

Tworst(n)=Θ(n2)T_{\text{worst}}(n)=\Theta(n^2)

最佳與最差情況不同,因此 Bubble sort 對輸入敏感。

(B) Selection sort:正確

Selection sort 每一輪都必須掃描尚未排序的部分,找出最小值。

比較次數固定為:

(n−1)+(n−2)+⋯+1=n(n−1)2=Θ(n2)(n-1)+(n-2)+\cdots+1 =\frac{n(n-1)}{2} =\Theta(n^2)

不論輸入原本是已排序、反向排序或隨機排列,都必須完成相同的掃描工作。因此其最佳、平均與最差時間複雜度皆為:

Θ(n2)\Theta(n^2)

所以 Selection sort 對輸入不敏感。

(C) Merge sort:正確

🔒

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

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

免費註冊

第 15 題

  1. Which of the following statements are true?
    (A). Hash tables are generally used in cases where insertion and deletion operations are more often than searches.
    (B). Open-addressed hash tables cannot be used if the data does not have unique keys.
    (C). With linear probing, searches become faster as we remove data from the hash table.
    (D). Both linear and quadratic probing can probe all locations in the table.
    (E). Double hashing resolves the clustering issue by using key-dependent probe intervals.

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

這一題的完整詳解

核心觀念

本題考查雜湊表(hash table)及開放定址法(open addressing)的基本性質:

  • 雜湊表利用雜湊函數將鍵值映射到表格位置,平均搜尋、插入、刪除時間皆可達 O(1)O(1)。
  • 開放定址法發生碰撞時,資料仍直接存放在表格內,依探測序列尋找下一個位置。
  • 常見探測方式包括:
    • 線性探測:
      h(k,i)=(h′(k)+i) mod mh(k,i)=(h'(k)+i)\bmod m
    • 二次探測:
      h(k,i)=(h′(k)+c1i+c2i2) mod mh(k,i)=(h'(k)+c_1i+c_2i^2)\bmod m
    • 雙重雜湊:
      h(k,i)=(h1(k)+ih2(k)) mod mh(k,i)=(h_1(k)+i h_2(k))\bmod m

其中 mm 為表格大小,i=0,1,2,…i=0,1,2,\ldots 為探測次數。


解題方法

逐一檢查每個敘述是否符合雜湊表與探測法的定義,特別注意:

  1. 雜湊表的主要優勢是平均時間複雜度,而不是限定某種操作比例。
  2. 開放定址法是否能處理重複鍵值,要看資料使用方式;重複鍵值本身不會使探測法失效。
  3. 刪除資料時,線性探測必須使用墓碑標記(tombstone),不能直接清空位置。
  4. 二次探測不保證能走訪表格中的所有位置。
  5. 雙重雜湊的步進距離會依鍵值改變,可降低群聚。

選項分析

(A)錯誤

「雜湊表一般用於插入與刪除比搜尋更頻繁的情況」並不是雜湊表的使用條件。

雜湊表的核心優勢是:

平均搜尋=平均插入=平均刪除=O(1)\text{平均搜尋}=\text{平均插入}=\text{平均刪除}=O(1)

因此,雜湊表適合需要快速查找、插入與刪除的情境,例如字典、符號表與資料庫索引。操作頻率比例並不是判斷是否使用雜湊表的依據。

所以此敘述錯誤。


(B)錯誤

開放定址法仍可處理具有重複鍵值的資料。

若兩筆資料具有相同鍵值,它們會產生相同的初始雜湊位置,但後續仍可透過探測序列放入不同位置。例如線性探測中:

h(k,0),h(k,1),h(k,2),…h(k,0),h(k,1),h(k,2),\ldots

即使兩筆資料的鍵值相同,只要插入時不要求「相同鍵值必須覆蓋舊資料」,第二筆資料仍能繼續探測下一個空位。

唯一需要額外定義的是搜尋與刪除行為,例如:

  • 搜尋一個鍵值時回傳任一筆資料;
  • 搜尋時回傳所有相同鍵值的資料;
  • 插入相同鍵值時更新原資料。

因此,重複鍵值會影響資料操作語意,但不代表開放定址法無法使用。

所以此敘述錯誤。


(C)錯誤

線性探測的刪除不能直接將資料位置設為空白,否則可能中斷搜尋路徑。

🔒

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

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

免費註冊

第 16 題

  1. Which of the following statements are true?
    (A). An algorithm is O(log⁡n)O(\log n) if it takes a constant time to cut the problem size by a fraction.
    (B). The Horner's method of evaluating the polynominal p(x)=a0xn+a1xn−1+a2xn−2+⋯+an−1x+anp(x) = a_0 x^n + a_1 x^{n-1} + a_2 x^{n-2} + \cdots + a_{n-1} x + a_n by p(x)=(⋯(((a0)x+a1)x+a2)x+⋯+an−1)x+anp(x) = (\cdots(((a_0) x + a_1) x + a_2) x + \cdots + a_{n-1}) x + a_n runs in Θ(n2)\Theta(n^2) time.
    (C). The running time of the following recursive pseudo-code as a function of nn is Θ(n3)\Theta(n^3).
def function(n):
    if n < 2: return
    else: counter = 0
    for i in range(1,8):
        function(n/2)
    for i in range(1,n*n*n):
        counter += 1

(D). The complexity of the following function is O(nlog⁡n)O(n \log n).

def function(n):
    count = 0
    for i in range(n/2,n):
        j = 1
        while j + n/2 <= n:
            k = 1
            while k <= n:
                count += 1
                k *= 2
            j *= 2
    print(count)

(E). The complexity of the following function is O(log⁡n)O(\log n).

def Function(n):
i = s = 1
while s < n:
    i += 1
    s += i
    print('*')

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

這一題的完整詳解

核心觀念

本題考查漸近時間複雜度的判斷,重點包括:

  • 每次將問題規模縮小固定比例,所需步數為 Θ(log⁡n)\Theta(\log n)。
  • Horner 法以逐次乘加計算多項式,運算次數與多項式次數成正比。
  • 遞迴程式可用遞迴式與主定理分析。
  • 巢狀迴圈要分別計算每層的迭代次數,再相乘。
  • 迴圈變數若逐次累加,累積量可能呈平方成長。

解題方法與選項分析

(A) 正確。 若每一步都能花固定時間,將問題大小縮小固定比例 rr(其中 0<r<10<r<1),經過 kk 步後,規模約為 nrknr^k。當規模降至常數時:

nrk≤1⟹k≥log⁡nlog⁡(1/r)nr^k \le 1 \quad\Longrightarrow\quad k \ge \frac{\log n}{\log(1/r)}

因此步數為 Θ(log⁡n)\Theta(\log n),自然也屬於 O(log⁡n)O(\log n)。

(B) 錯誤。 Horner 法將多項式改寫成連續的乘加形式。對 nn 次多項式,每個係數只需處理一次,因此總共進行 Θ(n)\Theta(n) 次乘法與加法,時間複雜度為 Θ(n)\Theta(n),不是 Θ(n2)\Theta(n^2)。額外空間為 O(1)O(1)。

(C) 正確。 每次呼叫會遞迴呼叫 7 次,每次子問題大小為 n/2n/2;遞迴之外的迴圈執行 Θ(n3)\Theta(n^3) 次。因此遞迴式為:

T(n)=7T(n/2)+Θ(n3)T(n)=7T(n/2)+\Theta(n^3)

主定理中,a=7a=7、b=2b=2,所以:

nlog⁡ba=nlog⁡27n^{\log_b a}=n^{\log_2 7}

因為 log⁡27<3\log_2 7<3,而非遞迴成本為 Θ(n3)\Theta(n^3),依主定理第三種情形:

🔒

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

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

免費註冊

其他考古題