114 高普考高考三級 資訊處理 資料結構 考古題詳解
第 一 題10 分
一、 一棵空的階數為 3 的 B-Tree(B-Tree of order 3),由左而右依序插入下列鍵值(key value):。
請問插入完畢後,根節點中的鍵值有哪些?請依序由小到大列出,用逗號分隔,並請說明樹節點的變化。(10 分)
二、 有一棵階數為 5 的 B-Tree(B-Tree of order 5),其高度(height)為 3,請問這棵樹中最多可以儲存多少個鍵值?(10 分)
登入後即可作答並保存紀錄。
核心觀念
階數為 的 B-Tree,每個節點最多有 個子節點,因此最多含 個鍵值。插入鍵值時,先放入適當的葉節點;若節點超出容量,便將中間鍵值提升至父節點,並將其餘鍵值分到左右子節點。若根節點分裂,提升的鍵值會成為新的根。
本題第一小題的階數為 ,每個節點最多有 個鍵值。第二小題的階數為 ,每個節點最多有 個鍵值。
一、依序插入鍵值
依序插入 :
- 插入 :根節點為 。
- 插入 :根節點為 ,已達容量上限。
- 插入 :暫時成為 ,超過上限;提升中間鍵值 ,分裂為根節點 ,左右子節點分別為 、。
- 插入 :因 ,插入左子節點,成為 。
- 插入 :因 ,插入右子節點,成為 。
- 插入 :插入右子節點後暫為 ,超過上限;提升中間鍵值 至根節點。
第 二 題10 分
一、 有一個三維整數陣列 ,每個元素占用 4 個記憶體空間,每個記憶體空間均有位址。該陣列在儲存至記憶體時,會先被轉換為一維陣列的形式儲存。下列位址皆為十進位,已知 的記憶體位址為 , 的位址為 。
請問陣列 在記憶體中的儲存方式為何?是以列為主(row-major)還是以行為主(column-major)?(10 分)
二、 請計算 在記憶體中的位址為何?(10 分)
登入後即可作答並保存紀錄。
核心觀念
三維陣列可依不同維度的先後順序轉成一維記憶體配置:
- 列為主(row-major):最後一個索引變動最快。
- 行為主(column-major):第一個索引變動最快。
每個元素占用 個位址單位,因此兩個元素的位址差除以 ,就是它們在一維序列中的元素位置差。
解題方法
已知 位於 , 位於 。兩者的位址差為
換算成元素位置差:
設陣列維度為 ,各索引從 開始。
假設為列為主:
列為主的位置偏移量公式為
所以 與 的位置偏移量分別為
第 三 題20 分
假設 為一個無方向連通加權圖(Undirected connected weighted graph),包含五個節點:、、、、。各節點間相連情形如下,邊權(邊的權重)為正整數,代表邊的成本。
- 與 相連,邊權為 。
- 與 相連,邊權為 。
- 與 相連,邊權為 。
- 與 相連,邊權為 。
- 與 相連,邊權為 。
- 與 相連,邊權為 。
- 與 相連,邊權為 。
請使用 Sollin’s 演算法,寫出最終形成的最小成本擴展樹的邊集合與總成本,請寫出每一步的演算法與該步驟形成的擴展樹。每一合併過程,列出選中的邊與合併的組成(component)。(20 分)
登入後即可作答並保存紀錄。
核心觀念
Sollin’s 演算法又稱 Borůvka 演算法,用來求加權連通圖的最小成本擴展樹。演算法每一輪都讓每個連通分量各自選取一條權重最小、通往其他分量的邊,再合併這些分量;重複進行,直到所有節點都屬於同一分量。
選出的邊必須連接不同分量,否則加入該邊會形成環。各分量若選到同一條邊,該邊只加入一次。
解題方法
圖中有 個節點及 條邊。先以每個節點各自作為一個分量,逐輪找出各分量最便宜的外連邊,加入後合併分量。
第 0 輪:初始分量
第 1 輪:各分量選擇最小外連邊
- :連出去的邊權為 ,選 。
- :連出去的邊權為 ,選 。
- :連出去的邊權為 ,選 。
第 四 題20 分
根據下列的虛擬碼,若 ,則傳回的答案為何?請說明。其中 為數學上的地板函數(floor function)。
function splitSum(n: integer) returns integer if then<br> return <br> <br> <br> return splitSum() + splitSum()<br>
(20 分)
登入後即可作答並保存紀錄。
核心觀念
本題考遞迴函數的執行與遞迴樹計數。當 時,函數會遞迴計算 與 的結果,再將兩者相加;當 時,回傳 ,這是遞迴的終止條件。
解題方法
由 開始,依照程式逐層展開;每個葉節點都是 的呼叫,回傳值為 。
第 五 題10 分
下列虛擬碼是利用某演算法對陣列 的元素進行處理,請說明該法是進行何種處理,並請寫出其名稱和在最壞情況下時間複雜度為何?(10 分)
若陣列 ,請寫出該虛擬碼的處理過程:請列出陣列在每一輪(每次外層迴圈執行完後)的內容變化情形。請特別標示出最終結果為何?(10 分)
doingSomething(A) begin 陣列 的元素個數<br> for to do<br> <br> for to do<br> if then<br> <br> end for<br> if then<br> <br> <br> <br> end if<br> end for end
登入後即可作答並保存紀錄。
核心觀念
此題考查選擇排序法(Selection Sort)。每一輪外層迴圈都在尚未排序的區段 中,找出最小值的索引 theIndex,再將該值與目前位置 交換。
因此,完成第 輪後,位置 就放入全陣列尚未排序部分的最小元素;已排序區段則由左至右逐步擴大。
解題方法
初始陣列為 ,每輪依序比較未排序區段,記錄最小值的位置,完成掃描後再交換。
| 外層迴圈輪次 | 搜尋範圍 | 找到的最小值 | 交換後的陣列 |
|---|---|---|---|
| 第 1 輪() | : | (索引 1) | |
| 第 2 輪() | : | (索引 4) | |
| 第 3 輪() | : | (索引 2) |