115 身心障礙特考三等 資訊處理 資料結構 考古題詳解
第 一 題25 分
請回答下列兩個演算法(algorithms)相關的問題:
(一) 程式設計師(programmer)撰寫的程式(program)是否必須滿足演算法應具備「有限性」(Finiteness)的特性?請詳細說明理由。(10 分)
(二) 演算法必須滿足五項特性,除「有限性」外,請寫出另外的四項特性,並說明各項特性的意義。(15 分)
登入後即可作答並保存紀錄。
(一)程式是否必須滿足有限性
核心觀念
**有限性(finiteness)要求演算法在有限步驟內終止。**重點在於演算法對其所處理的每一筆合法輸入,都必須能在有限時間內完成並產生結果;若某筆合法輸入會讓程序永遠執行,該程序就不符合有限性。
程式是演算法的實作形式,但程式也可能設計成持續服務的系統,例如作業系統、伺服器或監控程式,預定在執行期間不停止。因此,不能單憑「程式會一直執行」就判定它違反演算法的有限性。
解題方法與理由
先區分「演算法的終止要求」與「程式的預定執行方式」:
- 若程式要完成一項可結束的計算,例如排序、搜尋或計算總和,則其實作應確保每筆合法輸入都能在有限步驟內結束,否則無法完成該演算法的工作。
- 若程式是作業系統、伺服器或即時監控程式等持續運作的系統,其整體執行期間可以不終止。它可反覆等待事件、接收請求並處理工作;每次個別工作仍可在有限時間內完成。
因此,**程式本身不必一律在有限時間內終止;有限性是對演算法的要求,而持續運作的程式可以包含或實作反覆執行的演算法步驟。**判斷時須看題目所指的是整個程式的執行期間,還是演算法對一筆輸入的處理是否能完成。
(二)有限性以外的四項演算法特性
1. 明確性(definiteness)
第 二 題25 分
請根據下列使用虛擬碼(Pseudo code)撰寫的程式段,回答下列問題。所有答案均必須說明原因或提供計算過程:
(一) 程式段執行完後 的值為何?(10 分)
(二) 程式段執行完後 的值為何?(5 分)
(三) For i from 1 to 150 step 7 do 共執行多少次?(5 分)
(四) $s \leftarrow s+i$ 共執行多少次?(5 分)
Procedure X
For from 1 to 150 step 7 do
End For
End X
登入後即可作答並保存紀錄。
核心觀念
本題考「For 迴圈的起始值、遞增步幅、終止條件」及「等差數列求和」。依虛擬碼, 從 開始,每次增加 ;凡是 ,就執行一次迴圈本體。迴圈本體將當次的 加入 。
解題方法
第 次迴圈開始時, 的值為
要執行迴圈,必須符合
因此 ,即 ,最多執行 次。實際參與累加的數依序為
最後一項為 ,下一項是 ,已超過上限 。
(一) 是這 個數的總和。使用等差數列求和公式:
第 三 題25 分
若下列前置式(prefix)利用堆疊(stack)做計算,假設每個運算元(operand)都是一個阿拉伯數字,請寫出完整的計算過程與最終計算結果。
前置式:
登入後即可作答並保存紀錄。
核心觀念
前置式(prefix)又稱波蘭表示法,運算子寫在運算元之前。二元運算子後方必須依序接上兩個運算式,例如 表示 。
使用堆疊計算前置式時,從右向左掃描:
- 遇到運算元就推入堆疊。
- 遇到二元運算子,就依序彈出兩個值:第一個是左運算元,第二個是右運算元;計算後將結果推回堆疊。
解題方法
原式由左至右為:
由右至左逐項處理:
| 掃描項目 | 堆疊操作 | 堆疊內容(底 → 頂) |
|---|---|---|
| 推入 | ||
| 推入 | ||
| 彈出 ,計算 ,推入 | ||
| 推入 | ||
| 推入 | ||
| 推入 |
第 四 題25 分
請詳述循序搜尋法(sequential search)與二元搜尋法(binary search)的運作原理,並比較其優缺點。(25 分)
登入後即可作答並保存紀錄。
核心觀念
本題考查兩種在資料集合中尋找指定關鍵值的搜尋方法:循序搜尋法(sequential search)與二元搜尋法(binary search)。比較時應掌握搜尋前提、比較方式、時間複雜度,以及資料是否需要排序。
令資料筆數為 ,搜尋目標為 。若找到,回傳其位置;若未找到,回報搜尋失敗。
解題方法
循序搜尋法
循序搜尋不要求資料預先排序。從第一筆資料開始,依序將每筆資料與 比較:
- 若目前資料等於 ,停止並回傳該位置。
- 若不相等,移至下一筆資料繼續比較。
- 若檢查完所有資料仍未找到,則搜尋失敗。
例如,在 中搜尋 ,依序比較 、、,第三次比較即找到目標。
若目標在第 筆,需比較 次;若目標不在資料中,需比較 次。因此:
- 最佳情況:目標位於第一筆,時間複雜度為 。
- 最差情況:目標位於最後一筆或不存在,時間複雜度為 。
- 平均情況:若目標等機率出現在任一位置,成功搜尋平均比較次數為 ,時間複雜度為 。
- 空間複雜度:迭代實作只需固定額外空間,為 。
二元搜尋法
二元搜尋要求資料已依關鍵值排序,且能有效存取中間位置,例如使用陣列。每次檢查搜尋範圍的中間元素,再依比較結果保留可能包含目標的一半範圍:
- 設定目前搜尋範圍的左、右界線。
- 取中間位置 ,比較該位置的值與 。
- 若相等,搜尋成功。
- 若 小於中間值,保留左半部;若 大於中間值,保留右半部。
- 重複以上步驟,直到找到目標或搜尋範圍為空。
例如,在排序資料 中搜尋 :先比較中間值 ,因 而保留右半部;再比較該範圍的中間值 ,因 而保留左側;最後比較 ,找到目標。