112 年 國立臺灣大學電機工程研究所丙組《資料結構(B)》
第 1 題
- If a program has the computational complexity , where is an exponential function of the program input size , then the program must also have the computational complexity .
登入後即可作答並保存紀錄。
核心觀念
與 分別表示不同方向的漸近界:
- : 的成長速度至多與 同階。
- : 的成長速度至少與 同階。
形式化地說,若存在常數 與 ,使得對所有 :
則 。
但這只代表下界,並未限制 的上界,因此不能推出 。
解題方法
直接以反例檢驗敘述是否成立。令題目所稱的指數函數為:
再令程式實際執行時間為:
因為對所有 都有:
所以:
然而, 並不是 。若假設存在常數 ,使得:
則可化為:
但當 持續增加時, 會無限增大,不可能永遠小於固定常數 。因此:
這表示程式可以至少是指數時間,實際上卻是更高階的指數時間。
選項分析
題目敘述為:
第 2 題
- If we implement a min-heap using a dynamic array, then its findMin(), insert(), and deleteMin() operations have the time complexities , , and , respectively.
登入後即可作答並保存紀錄。
核心觀念
Min-heap 是一棵完全二元樹,且每個節點的鍵值不大於其子節點。因此:
- 最小元素一定位於根節點。
- 含有 個元素時,樹高為 。
- 使用陣列儲存時,根節點位於固定位置,通常是索引 。
陣列表示如下:
解題方法
逐一分析三個操作的主要步驟與最多需要移動的層數。
1. findMin()
Min-heap 的最小元素就是根節點,直接存放在陣列的第一個位置:
不需要搜尋其他節點,因此時間複雜度為:
2. insert()
插入新元素時,先將元素放到陣列末端,以維持完全二元樹的形狀。接著執行上浮(percolate up):
- 將新元素放在最後一個葉節點。
- 與父節點比較。
- 若新元素小於父節點,便交換。
- 重複上述步驟,直到滿足 min-heap 性質。
新元素最多從葉節點上浮到根節點。完全二元樹高度為 ,所以交換與比較次數最多為 。
動態陣列在容量不足時需要擴充;採用倍增容量的策略時,尾端插入的攤銷成本為 。因此:
3. deleteMin()
刪除最小元素時,刪除根節點會破壞陣列表示的完整性,因此通常採取以下步驟:
第 3 題
- Since a Deap contains a subtree of min-heap and a subtree of max-heap, its find(), deleteMin(), and deleteMax() operations can all have time complexities.
登入後即可作答並保存紀錄。
核心觀念
Deap(double-ended heap)是一種雙端優先佇列,通常以一棵完整二元樹表示:
- 左子樹符合 min-heap 性質,根節點保存最小值。
- 右子樹符合 max-heap 性質,根節點保存最大值。
- 因此可在兩端分別取得最小值與最大值。
其主要操作複雜度如下:
| 操作 | 複雜度 |
|---|---|
findMin() | |
findMax() | |
deleteMin() | |
deleteMax() |
解題方法
判斷此敘述的關鍵,在於分辨「尋找」與「刪除」的成本。
取得最小值時,只需查看 min-heap 的根節點:
取得最大值時,只需查看 max-heap 的根節點:
刪除最小值後,必須將適當元素補至根部,再沿著 min-heap 向下調整;樹高為 ,因此:
同理,刪除最大值需在 max-heap 中進行向下調整:
第 4 題
- If we perform the post-order traversal from the root of a tree and mark the visited nodes with ascending numbers, then the root will have the largest number.
登入後即可作答並保存紀錄。
核心觀念
本題考查樹的 post-order traversal(後序走訪) 定義。
對於以某節點為根的樹,後序走訪順序為:
- 依序走訪根節點的所有子樹;
- 最後才走訪根節點本身。
若每拜訪一個節點,就依序標上遞增編號,則最後被拜訪的節點會取得最大編號。
解題方法
設樹共有 個節點,編號依序為 。
後序走訪會先完成根節點的所有子樹,最後才拜訪根節點。因此根節點必定是第 個被拜訪的節點,其編號為:
這是所有編號中的最大值,所以根節點會擁有最大的編號。
例如:
A
/ \
B C
後序走訪順序為:
標號後為:
第 5 題
- Assume each data access of a hard drive can fetch a "block" of K data, where K is usually a large number, say, 1024. If we store N (e.g. N = 10 millions) data in this hard drive using a B tree of order K, then the time to "find" a specific data from this hard drive is approximately , where is the disk access time.
登入後即可作答並保存紀錄。
核心觀念
本題考查 B-tree 的高度與硬碟區塊存取成本。
B-tree 是高度平衡的多路搜尋樹。若 B-tree 的 order 為 ,可將每個節點視為一個硬碟 block,最多具有約 個子樹。由於每次讀取一個節點就能取得一整個 block 的資料,因此每下降一層約需一次硬碟存取。
若樹高為 ,最多可容納的資料量約為:
因此:
每次硬碟存取時間為 ,查詢一筆資料約需存取 個節點,所以查詢時間為:
解題方法
B-tree 每一層都能將搜尋範圍縮小約 倍。查詢流程如下:
- 讀取根節點,判斷目標資料落在哪個子樹。
- 讀取對應的下一層節點。
- 重複此過程,直到找到目標資料。
若經過 層後找到資料,則:
兩邊取對數:
每層需要一次硬碟存取,故:
以題目給定的 、 為例:
因此理想化的平均估計時間約為:
第 6 題
- Since the leaf nodes of a red-black (RB) tree are all black nodes, when we insert a new data to a RB tree, we first insert this new data to the RB tree like a regular binary search tree operation (i.e. push it to the leaf), paint the corresponding new leaf node red, and then perform rotation(s) to balance the RB tree, if necessary.
登入後即可作答並保存紀錄。
核心觀念
本題考查紅黑樹(Red-Black Tree, RB Tree)的插入規則與插入後修復。
紅黑樹必須滿足以下性質:
- 每個節點非紅即黑。
- 根節點必須是黑色。
- 所有外部葉節點
NIL都是黑色。 - 紅色節點的子節點必須是黑色,因此不能出現連續兩個紅色節點。
- 從任一節點到其所有後代
NIL葉節點的每條路徑,都包含相同數量的黑色節點,稱為 black-height。
插入新資料時,先依照一般二元搜尋樹插入,維持二元搜尋樹的順序:
新插入的資料節點通常先塗成紅色,再進行修復。
解題方法
插入新節點 後,將 染成紅色的主要原因是:
- 若染成黑色,會使包含 的路徑黑色節點數增加,可能破壞 black-height。
- 染成紅色不會立刻改變任何路徑的黑色節點數。
- 因此通常只可能造成「紅色節點的父節點也是紅色」的違規,再透過重新著色與旋轉修復。
設新節點為 ,其父節點為 ,祖父節點為 ,叔叔節點為 。
情況一:父節點為黑色
若 為黑色,則不會產生連續紅色節點,紅黑樹性質維持不變。
例如:
此時不需要旋轉或重新著色。
情況二:父節點與叔叔節點皆為紅色
若 與 都是紅色,則將:
- 染成黑色;
- 染成黑色;
- 染成紅色。
即:
如此可維持經過 的路徑黑色數量,但可能使 與其父節點形成連續紅色,因此必須將 視為新的問題節點,繼續向上修復。
情況三:叔叔節點為黑色,且形成直線型
若叔叔節點為黑色,且 、、 位於同一直線上,則對 進行一次旋轉。
例如左左型:
第 7 題
- Given a strongly connected graph (i.e. a tree with only one strongly connected component), we can find a trace that traverses from a starting vertex, goes through each edge exactly once, and terminates at the starting vertex.
登入後即可作答並保存紀錄。
核心觀念
題目描述的是從某個起點出發,每條邊恰好經過一次,最後回到起點。這種路徑稱為 Euler circuit(歐拉迴路)。
對於有向圖,存在 Euler 迴路的必要條件是:
- 圖中所有具有邊的頂點屬於同一個強連通區域。
- 對每個頂點 ,其入度必須等於出度:
因此,「強連通」只保證頂點之間彼此可達,並不保證每個頂點的入度與出度相等。
解題方法
判斷題目敘述是否成立,必須比較:
- 強連通條件;
- Euler 迴路所需的入度/出度條件。
若只知道圖是強連通圖,仍可能有某個頂點的出度大於入度。此時每次進入與離開頂點無法完全配對,必然無法在使用所有邊後回到起點。
考慮有向圖:
此圖為強連通圖,例如:
- 可到達 ;
- 可經由 到達 ;
- 可經由 到達 。
但各頂點的入度與出度如下:
| 頂點 | 入度 | 出度 |
|---|---|---|
與 不符合入度等於出度的條件,因此不存在 Euler 迴路。
題目敘述中的名詞問題
第 8 題
- A stable set, or independent set, of a graph, is a subset of vertices with the property that no two vertices in the stable set are adjacent. The stability number of a graph is the cardinality of the largest stable set. For the classic coloring problem where the colors of any pair of the adjacent vertices must be distinct, we can solve it by partitioning the graph into stable sets. Therefore, the Chromatic number of a graph , that is, the minimum number of colors needed to color the graph, must be smaller than or equal to the stability number of the graph.
登入後即可作答並保存紀錄。
核心觀念
本題考查兩個圖論定義:
- 穩定集(stable set/independent set):圖中的頂點集合,其中任意兩個頂點都不相鄰。
- 穩定數 :圖 中最大穩定集的頂點數量。
- 色數 :將圖 正確著色所需的最少顏色數,使每條邊兩端的頂點顏色不同。
在圖著色中,同一種顏色所形成的頂點集合必定是穩定集。因此,一個使用 種顏色的著色方式,就是將所有頂點分割成 個穩定集。
解題方法
題幹的前半段敘述正確:圖著色確實可以視為將頂點集合分割成若干個穩定集。
但由「可分割成穩定集」不能推出
原因是:
- 表示穩定集的個數;
- 表示單一最大穩定集的頂點數量。
兩者衡量的對象不同,不能直接比較為上述不等式。
可用完全圖 作為反例。完全圖中任意兩個不同頂點都相鄰,因此每個穩定集最多只能包含一個頂點,故
另一方面,完全圖的每個頂點都必須使用不同顏色,因此
當 時,
明確違反題幹所宣稱的
正確的相關關係
第 9 題
- A cube can be represented as a planar graph and also a bipartite graph.
登入後即可作答並保存紀錄。
核心觀念
本題考查兩種圖形的性質:
- 平面圖(planar graph):能在平面上繪製,使任意兩條邊只在共同端點相交,不產生邊的交叉。
- 二分圖(bipartite graph):頂點可以分成兩個互不相交的集合,使每條邊的兩端分屬不同集合。等價判定方式是:圖中不存在奇數長度的環。
立方體的骨架圖共有 個頂點、 條邊、 個面。
解題方法
一、判斷是否為平面圖
將立方體的圖形畫成兩個正方形:
- 外層正方形代表立方體的一個面;
- 內層正方形代表相對的另一個面;
- 以 條不相交的邊,將外層正方形的四個頂點分別連到內層正方形的四個頂點。
此畫法可以完整表示立方體的 個頂點與 條邊,且所有邊都能安排在平面上而不互相穿越,因此立方體圖是平面圖。
也可用 Euler 公式驗算。對連通平面圖而言:
立方體圖中:
因此:
符合平面嵌入的基本條件;配合上述無交叉畫法,可確認其為平面圖。
二、判斷是否為二分圖
將立方體的每個頂點以三個二進位座標表示:
第 10 題
- A perfect hash function is a function that can transform the key of a data into an integer between 0 and B - 1 with equal probabilities, where B is the number of buckets in the hash. Therefore, for a hash with a perfect hash function, its find(), insertData(), and deleteMin() operations have the time complexities , , and , respectively, assuming B is large enough so that collisions seldom occur.
登入後即可作答並保存紀錄。
核心觀念
本題考查雜湊函數的定義,以及雜湊表各項操作的時間複雜度。
-
Perfect hash function
Perfect hash function 通常指對固定的 個鍵值,不會發生碰撞的雜湊函數:
「每個桶被選中的機率相同」較接近 uniform hashing(均勻雜湊)的假設,不是 perfect hashing 的完整定義。
-
find() 與 insertData()
在雜湊分布均勻、碰撞很少時:
find()直接計算 ,平均可在 找到對應桶。insertData()直接計算 ,平均可在 插入對應桶。
這兩項複雜度通常是平均時間複雜度,並非無條件的最壞情況複雜度。
-
deleteMin()
deleteMin()要找出所有資料中的最小鍵值。普通雜湊表只依照雜湊值分桶,雜湊值與鍵值大小沒有排序關係,因此無法直接由雜湊表定位最小值。
解題方法
逐一檢查題目所宣稱的三項複雜度:
-
find():計算雜湊值並存取桶,平均為 。 -
insertData():計算雜湊值並插入桶,平均為 。 -
deleteMin():必須檢查 個桶,才能確定全域最小值,時間為即使碰撞很少,仍然需要判斷哪些桶為空、哪些桶含有資料,並比較各桶中的最小鍵值。均勻分布只能降低碰撞,無法提供鍵值大小的排序資訊。
第 11 題15 分
There are various types of heap data structure. Which of the following(s) is (are) a legal heap with respect to the typename shown beside the figure?
(A) Min-Max Heap
(B) Deap
🖼️【此處有附圖,請對照原卷】
(C) Leftist Heap
🖼️【此處有附圖,請對照原卷】
(D) Binomial Heap
🖼️【此處有附圖,請對照原卷】
(E) Fibonacci Heap
🖼️【此處有附圖,請對照原卷】
🖼️【此處有附圖,請對照原卷】
登入後即可作答並保存紀錄。
第 12 題15 分
Which of the following statement(s) about the tree data structure is (are) correct?
(A) (Number of edges) = (Number of nodes)
(B) (Number of leaf nodes) = (Number of internal nodes)
Note: Leaf nodes are those with no child. Nodes that are not leaf nodes are internal nodes.
(C) (Number of paths from the root to the leaf nodes) is .
(D) (Height of a tree) is .
(E) (Number of subtrees) =
A subtree of a tree is a tree formed by a subset of nodes in and with the edges that connect these nodes.
登入後即可作答並保存紀錄。
核心觀念
本題考樹的基本性質,以及大 、大 的漸近界。
- 樹是連通且無環的圖;有 個節點的樹恰有 條邊。
- 葉節點是沒有子節點的節點;內部節點是至少有一個子節點的節點。
- 根到每個葉節點各有唯一一條路徑。
- 題目將子樹定義為:取原樹中的一部分節點,以及連接這些節點的邊所形成的樹。因此,只要取出的節點與原樹中相應的邊構成連通子樹,就計為一個子樹。
解題方法
逐一檢查選項是否對所有符合定義的樹都成立。對於數量與節點數的漸近關係,可用星狀樹或鏈狀樹等簡單結構測試;一個反例就足以否定通稱性質。
選項分析
(A) 正確。
任一有 個節點的樹,其邊數為
因此,(Number of edges) = (Number of nodes) 。
(B) 錯誤。
葉節點數等於內部節點數加 ,並非一般樹的性質。考慮根節點有三個子節點的樹:葉節點有 個、內部節點有 個,並不滿足
這個等式只在特定條件下成立,例如每個內部節點恰有兩個子節點的二元樹。
第 13 題15 分
Which of the following statement(s) about the graph data structure is (are) correct?
(A) Two graphs are isomorphic if and only if both graphs contain the same number of vertices and the same number of edges.
(B) All non-empty graphs must contain at least a clique.
(C) Depth-first traversal of an arbitrary graph has the time complexity , where is the number of vertices in the graph.
(D) The longest simple path of an arbitrary graph has the length , where is the number of vertices in the graph.
(E) A complete graph has the number of edges , where is the number of vertices in the graph.
登入後即可作答並保存紀錄。
已確認原卷頁圖內容,第 13 題的五個選項與題目文字一致,以下為完整詳解。
核心觀念
本題考的是圖論(Graph Theory)基本定義與性質,涵蓋以下概念:
- 同構(Isomorphic):兩圖 同構,代表存在頂點之間的一對一映射,使得邊的連接關係完全對應。
- 團(Clique):圖中一個頂點子集,其中任意兩頂點之間皆有邊相連。特別注意:單一頂點本身即構成一個大小為 1 的團(trivial clique)。
- 深度優先搜尋(DFS)的時間複雜度:標準 DFS 為 。
- 最長簡單路徑(Longest Simple Path):在一般圖上求最長簡單路徑是 NP-hard 問題,且路徑長度隨圖的結構而異,無法用 一概而論。
- 完全圖(Complete Graph)的邊數: 的邊數為 。
解題方法
逐一檢驗每個選項的敘述是否為正確的數學命題。
選項分析
(A) Two graphs are isomorphic if and only if both graphs contain the same number of vertices and the same number of edges. → ❌ 錯誤
頂點數與邊數相同只是必要條件(necessary condition),絕非充分條件。
反例:考慮 的兩個圖:
- :路徑圖 (四個頂點排成一條鏈:)
- :星形圖 (一個中心頂點連接其餘三個頂點)
兩者皆有 4 個頂點、3 條邊,但 的最大度數為 2,而 的最大度數為 3,因此不同構。
選項使用 "if and only if" 宣稱這是充要條件,故錯誤。
(B) All non-empty graphs must contain at least a clique. → ✅ 正確
根據 clique 的定義,任何單一頂點 都構成一個大小為 1 的團(因為「任兩頂點間皆有邊」這一條件在只有一個頂點時是空真(vacuously true)的)。
既然圖是 non-empty(至少有一個頂點),就必然包含至少一個大小為 1 的 clique。即使圖完全沒有邊(獨立集),每個孤立頂點本身仍是一個 clique。
因此本敘述正確。
第 14 題15 分
If we design a hash function as follows:
where is a string, returns the ASCII code of the -th character in the string, is the modulo operator, and is the number of buckets in the hash. In short, given a string as the key of the data, this hash function sums the ASCII codes of all the characters and then returns an integer between and by the modulo operation.
The ASCII codes for the English letters are as shown below. Let the data to be inserted into the hash be , and the number of buckets be . Which of the following bucket(s) has (have) collision(s)?
| Letter | ASCII code | Letter | ASCII code | Letter | ASCII code | Letter | ASCII code |
|---|---|---|---|---|---|---|---|
| A | 65 | B | 66 | C | 67 | D | 68 |
| E | 69 | F | 70 | G | 71 | H | 72 |
| I | 73 | J | 74 | K | 75 | L | 76 |
| M | 77 | N | 78 | O | 79 | P | 80 |
| Q | 81 | R | 82 | S | 83 | T | 84 |
| U | 85 | V | 86 | W | 87 | X | 88 |
| Y | 89 | Z | 90 | a | 97 | b | 98 |
| c | 99 | d | 100 | e | 101 | f | 102 |
| g | 103 | h | 104 | i | 105 | j | 106 |
| k | 107 | l | 108 | m | 109 | n | 110 |
| o | 111 | p | 112 | q | 113 | r | 114 |
| s | 115 | t | 116 | u | 117 | v | 118 |
| w | 119 | x | 120 | y | 121 | z | 122 |
(A)
(B)
(C)
(D)
(E)
登入後即可作答並保存紀錄。
核心觀念
本題考的是**雜湊函數(Hash Function)與碰撞(Collision)**的概念。碰撞是指兩筆以上不同的資料經過雜湊函數後,映射到同一個桶(bucket),即 但 。
題目定義的雜湊函數為:
其中 為字串第 個字元的 ASCII 碼, 為桶數。題目問的是哪些桶號發生碰撞。
解題方法
從原卷圖中確認:待插入的 10 筆字串為 "USA", "MIT", "Cat", "Dog", "May", "Sam", "Bob", "Low", "Phd", "See",桶數 。逐一計算每筆字串的 ASCII 碼總和及其模 5 的結果。
| 字串 | 各字元 ASCII 碼 | 總和 | 桶號 | |
|---|---|---|---|---|
| USA | U=85, S=83, A=65 | 233 | 3 | |
| MIT | M=77, I=73, T=84 | 234 | 4 | |
| Cat | C=67, a=97, t=116 | 280 | 0 | |
| Dog | D=68, o=111, g=103 | 282 | 2 | |
| May | M=77, a=97, y=121 | 295 | 0 | |
| Sam | S=83, a=97, m=109 | 289 | 4 | |
| Bob | B=66, o=111, b=98 | 275 | 0 |