高考申論題
109年
[資訊處理] 資料結構
第 一 題
📝 此題為申論題,共 3 小題
小題 (一)
請利用 KMP(Knuth, Morris, Pratt)演算法寫出失敗函數(failure function)之定義。(4分)
思路引導 VIP
看到 KMP 演算法的失敗函數,應直覺聯想到其核心目的:『避免比對失敗時,主字串指標回退』。答題時需寫出精確的數學定義式(通常以 Horowitz 版本的索引值定義為主),並簡要說明其代表『最大相同真前綴與真後綴』的幾何意義,以確保完整拿分。
小題 (二)
找出 pattern “abcdabcabcdabcdabc”之失敗函數(failure function)值(請填入表2 failure value 中)。(14分)
思路引導 VIP
這題考查 KMP 字串匹配演算法中的 Failure Function(失敗函數)計算。解題時應先尋找 pattern 中每個子字串的「最長相同前綴與後綴」。需注意國考資結多採用 Horowitz 版本的定義(數值為長度減 1,即從 -1 開始),但也建議在答題時一併註明 CLRS 長度版本的結果,以防不同閱卷標準的爭議。
小題 (三)
假設(二)之 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。