113 年 國立嘉義大學資訊工程學系碩士班《資料結構》
第 一 題
The Ackermann function is defined for integer and by
(a) What is the value of ? (10 Points)
(b) What is the value of ? (10 Points)
登入後即可作答並保存紀錄。
核心觀念
本題考查遞迴函數的定義與巢狀遞迴的計算。計算時須依序遵守:
- 時,直接使用 。
- 時,使用 。
- 時,先計算內層的 ,再代入外層函數。
(a) 計算
因為 且 ,使用第三個定義:
先計算內層的 。因為 且 :
再依據 的定義:
因此:
(b) 計算
先整理 的計算規律:
當 時:
由於 ,可得:
所以:
第 二 題
(a) What is the minimum height of a binary tree of m-nodes and justify your answer? (5 Points)
(b) What is the maximum height of a binary tree of m-nodes and justify your answer? (5 Points)
登入後即可作答並保存紀錄。
核心觀念
本題採用資料結構常見定義:
- 二元樹的高度(height):根節點到最深葉節點之間的最大邊數。
- 高度為 的二元樹,第 層最多有 個節點。
- 因此高度為 時,最多包含
個節點。
(a) 個節點的二元樹之最小高度
解題方法
要使高度最小,應使每一層盡量填滿,也就是形成「完全二元樹」或接近完美二元樹的結構。
若高度為 ,最多只能容納 個節點,因此必須滿足
移項得
取 :
所以
由於高度必須是整數,最小高度為
此式也可寫成
為何一定可以達成?
令
則
將 個節點依序由上而下、由左而右排列成完全二元樹,最後一個節點必位於第 層,因此其高度為 。所以上述下界確實可以達成。
(b) 個節點的二元樹之最大高度
解題方法
第 三 題20 分
Draw the 10-entry hash table that results from using the hash function , to hash the keys 13, 44, 17, 88, 23, 95, 20, 16, 8 and 67. Assuming the collisions are handled by linear probing.
登入後即可作答並保存紀錄。
題意釐清
題目中的「10-entry」與 存在規格不一致:10 格表的索引為 ~,而模 12 的結果可為 ~。本題各鍵的初始雜湊值皆落在 ~,以下採用「表格容量為 10 格,碰撞後以 10 格循環進行線性探測」的解讀。
核心觀念
雜湊函數將鍵值映射至初始位置:
採用線性探測(linear probing)處理碰撞時,若初始位置已被占用,便依序檢查下一格:
直到找到空格為止。插入順序會影響最後的表格配置,因此必須按照題目給出的順序插入。
解題方法
1. 計算各鍵的初始雜湊位置
| 鍵值 | 初始位置 | |
|---|---|---|
| 13 | ||
| 44 | ||
| 17 | ||
| 88 | ||
| 23 | ||
| 95 | ||
| 20 | ||
| 16 | ||
| 8 | ||
| 67 |
2. 依序以線性探測插入
| 插入鍵值 | 探測位置 | 最終放置位置 |
|---|---|---|
| 13 | ||
| 44 |
第 四 題
(a) The following is the problem of sorting records on several keys. Please use the radix sort to sort 10 numbers {269, 184, 57, 587, 4, 53, 508, 263, 309, 482} in the range [0, 999]. (10 Points)
(b) Please analyze the time complexity of the radix sort. Is it possible that the radix sort is faster than the Quick Sort, in which the latter has only comparison and interchange operations permitted on keys, under some restricted conditions? Please describe your opinions. (10 Points)
登入後即可作答並保存紀錄。
核心觀念
本題考查 LSD Radix Sort(最低有效位數基數排序)。
因為所有數字都在 ,每個數字可補成固定的三位數:
採用十進位基數 ,依序按照:
- 個位數
- 十位數
- 百位數
進行三次穩定排序。穩定排序表示:當目前位數相同時,保留前一輪的相對順序。
(a) Radix Sort 排序過程
第一次:依個位數排序
將數字依個位數放入桶中:
由第 桶至第 桶依序取出:
第二次:依十位數排序
以上一輪結果為輸入,依十位數分桶:
依桶號取出:
例如 、、 的十位數都為 ,其順序必須保留為 ,這正是穩定排序的作用。
第三次:依百位數排序
依百位數分桶:
依桶號取出後得到:
去除前導零,最後排序結果為:
(b) 時間複雜度與 Quick Sort 的比較
Radix Sort 的時間複雜度
設:
- :資料筆數
- :每個鍵值的位數
- :基數,例如十進位的
每一位通常使用 Counting Sort 或桶排序處理:
第 五 題10 分
The following is an infix form of the expression:
(A/B*C+D)+E/(F/(G-H))
Please use the stack method to transform it to the postfix one. You must list the contents of the stack as each operator and operand are read.
登入後即可作答並保存紀錄。
核心觀念
中序(Infix)轉後序(Postfix)利用堆疊(Stack)暫存運算子,遵循以下優先權與結合律規則:
- 運算元(Operand):直接輸出。
- 運算子(Operator):若堆疊頂端運算子之優先權 讀入運算子,則將堆疊頂端運算子彈出(Pop)至輸出,直到堆疊頂端優先權小於讀入運算子(或遇到左括號
(),再將讀入運算子推入(Push)。 - 左括號
(:直接 Push 進入堆疊(進入堆疊後視為最低優先權)。 - 右括號
):持續 Pop 堆疊內容至輸出,直到遇到(為止((與)均丟棄)。 - 運算子優先權:
*/+-(同優先權採左結合,左側先 Pop 輸出)。
堆疊追蹤與轉換步驟
| 讀入字元 | 堆疊內容(底 頂) | 輸出結果(Postfix) |
|---|---|---|
( | ( | |
A | ( | A |
/ | ( / | A |
B | ( / | A B |
* | ( * | A B / |
C | ( * | A B / C |
+ | ( + | A B / C * |
第 六 題
(a) Is the undirected graph G in Figure 1 bipartite? Please explain your answer. (10 Points)
🖼️【此處有附圖,請對照原卷】
(b) The following is an adjacency matrix of the simple graph:
Please describe how many different paths of length 4 from vertex to vertex . (10 Points)
登入後即可作答並保存紀錄。
核心觀念
無向圖為二分圖,等價於頂點可分成兩組,使每條邊的兩端分屬不同組;也等價於圖中沒有奇數長度環。
對鄰接矩陣 , 計算從頂點 到頂點 、長度為 的走法數。矩陣乘方允許走法重複經過頂點或邊。
(a) 判斷是否為二分圖
依圖可將頂點分成:
圖中的每條邊都連接這兩組,例如 分別連到 , 連到 ,而 連到 ;沒有邊的兩端同屬一組。因此此圖是二分圖。
(b) 計算長度為 4 的走法數
以題目標示的頂點順序 ,從 出發逐步計數: