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

第 一 題

📝 此題為申論題,共 3 小題

小題 (一)

請利用 KMP(Knuth, Morris, Pratt)演算法寫出失敗函數(failure function)之定義。(4分)

思路引導 VIP

看到 KMP 演算法的失敗函數,應直覺聯想到其核心目的:『避免比對失敗時,主字串指標回退』。答題時需寫出精確的數學定義式(通常以 Horowitz 版本的索引值定義為主),並簡要說明其代表『最大相同真前綴與真後綴』的幾何意義,以確保完整拿分。

🤖
AI 詳解
AI 專屬家教

「失敗函數(failure function)$f(j)$」指在 KMP 演算法中,針對樣式字串(Pattern)$P = p_0 p_1 ... p_{m-1}$ 預先計算的函數。其代表在子字串 $P[0..j]$ 中,使得「真前綴與真後綴完全相同」的最大真前綴之最後一個字元的索引。 數學定義為: $$ f(j) = \begin{cases} \max { k \mid k < j \text{ 且 } p_0 p_1 ... p_k = p_{j-k} p_{j-k+1} ... p_j } & \text{若此 } k \text{ 存在} \ -1 & \text{若無此 } k \text{ 存在} \end{cases} $$

小題 (二)

找出 pattern “abcdabcabcdabcdabc”之失敗函數(failure function)值(請填入表2 failure value 中)。(14分)
題目圖片

思路引導 VIP

這題考查 KMP 字串匹配演算法中的 Failure Function(失敗函數)計算。解題時應先尋找 pattern 中每個子字串的「最長相同前綴與後綴」。需注意國考資結多採用 Horowitz 版本的定義(數值為長度減 1,即從 -1 開始),但也建議在答題時一併註明 CLRS 長度版本的結果,以防不同閱卷標準的爭議。

🤖
AI 詳解
AI 專屬家教

【解題關鍵】Failure Function F(j) 定義為子字串 pattern[0...j] 中,最長相同真前綴與真後綴的長度減 1(Horowitz 定義)。 【解答】 逐步推導:

小題 (三)

假設(二)之 pattern 嘗試在 string “abcdabcabcdabcabcda…..”找出 pattern。當 pattern 從 index 0開始比對到 index 13都一樣,而在 index 14時發現字母不一樣,請問 pattern 如何利用 failure function 所得之結果很快找到下一個要對應之位置?也就是 pattern 的那一位置的值要位移到 string 的那一對應位置。(4分)

思路引導 VIP

看到「failure function」與字串比對,應立刻聯想 KMP 演算法。先找出 Pattern 已成功匹配的部分(index 0~13),接著計算此子字串的「最長相同前綴與後綴長度」,該長度即為下一個要比對的 Pattern index,並對齊 String 發生錯誤的 index。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用 KMP 演算法中的 Failure Function(失敗函數),計算已匹配字串的最長相同前綴與後綴長度,以決定下一次比對的起點。 【詳解】 已知:

📝 同份考卷的其他題目

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

升級 VIP 解鎖