免費開始練習
高考申論題 110年 [資訊處理] 資料結構

第 一 題

📖 題組:
二元搜尋法(binary search)使用 divide-and-conquer(分而治之)演算法技巧,對一個已排序的(sorted)且長度為 n 的陣列 A[0:n-1],以二元化方式進行資料值 x 的搜尋,其最差時間複雜度(worst case time complexity)可降到Θ(log n)。(一)請使用 C++或 Python 語言,修改此二元搜尋法,使其能對未排序的(unsorted)且長度為 n 的陣列 A[0:n-1],進行三元化搜尋,即以 divide-and-conquer 技巧將此陣列切成三個子陣列,並在可能包含資料值 x 的子陣列繼續進行 divide-and-conquer 技巧的搜尋,如果找到則回傳 1,如果找不到則回傳 0。(17 分)(注意:請寫一個 searching 類別,內含一個 search 功能)(二)請分析修改後的三元化搜尋法其最差時間複雜度(worst case time complexity)以 order 的方式表示。(8 分)(注意:不可將此陣列數值進行排序,請加註解說明程式碼作法。)
📝 此題為申論題,共 2 小題

小題 (一)

請使用 C++或 Python 語言,修改此二元搜尋法,使其能對未排序的(unsorted)且長度為 n 的陣列 A[0:n-1],進行三元化搜尋,即以 divide-and-conquer 技巧將此陣列切成三個子陣列,並在可能包含資料值 x 的子陣列繼續進行 divide-and-conquer 技巧的搜尋,如果找到則回傳 1,如果找不到則回傳 0。(17 分)(注意:請寫一個 searching 類別,內含一個 search 功能)

思路引導 VIP

  1. 關鍵陷阱:題目強調「未排序(unsorted)」。2. 思考邏輯:在「已排序」的情況下,我們可以根據比較結果排除部分區間(剪枝);但在「未排序」情況下,目標值 x 可能出現在任何一個子陣列中。因此,雖然使用了三元化的 divide-and-conquer 形式,但實際上必須搜尋所有三個子區間。3. 程式結構:建立一個 Searching 類別,遞迴函數接收 leftright 指標,計算兩個切點 m1, m2 分成三段,分別遞迴呼叫。
🤖
AI 詳解
AI 專屬家教

【考點分析】 未排序陣列之分治法(Divide and Conquer)搜尋與遞迴實作。 【理論/法規依據】

小題 (二)

請分析修改後的三元化搜尋法其最差時間複雜度(worst case time complexity)以 order 的方式表示。(8 分)(注意:不可將此陣列數值進行排序,請加註解說明程式碼作法。)

思路引導 VIP

  1. 遞迴關係式:設 $T(n)$ 為長度 $n$ 陣列的搜尋時間。2. 拆解過程:在每一層,我們將問題分成 3 個規模約為 $n/3$ 的子問題,且必須搜尋所有子問題。所以 $T(n) = 3T(n/3) + C$。3. 套用 Master Theorem 或遞迴樹分析:$a=3, b=3$。根據 Master Theorem 第一型,$n^{\log_3 3} = n^1$,故結果為 $O(n)$。
🤖
AI 詳解
AI 專屬家教

【考點分析】 遞迴演算法的時間複雜度分析(Master Theorem 應用)。 【理論/法規依據】

📝 未排序三元搜尋法
💡 未排序陣列的分治搜尋無法剪枝,需遍歷所有子區塊方能尋獲。
比較維度 已排序搜尋 (Sorted) VS 未排序搜尋 (Unsorted)
剪枝依據 資料值大小關係 無規律,無法剪枝
遞迴分支數 僅進入 1 個子區間 須進入所有子區間
最差時間複雜度 O(log n) O(n)
💬未排序狀態下使用分治法並無加速效果,效能等同線性搜尋。
🧠 記憶技巧:分治三部曲:切三分、找三段、合一果;未排必走遍,複雜度變成 N。
⚠️ 常見陷阱:易誤用已排序二元搜尋的邏輯。需注意「未排序」陣列無法透過數值比較直接排除特定區間,必須搜尋所有分支。
二元搜尋法 主定理 (Master Theorem) 分治演算法技巧 遞迴演算法設計

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

演算法分析與複雜度
查看更多「[資訊處理] 資料結構」的主題分類考古題

📝 同份考卷的其他題目

查看 110年[資訊處理] 資料結構 全題