串的模式匹配的算法改進過程
改進的地方
1、從 Brute Force 到 KMP:
建立next[j]數組提取加速匹配的有用信息;
有用信息:
暴力算法要一個一個進行比對,但如果知道匹配失敗的位置tj之前的k個字符(tj−k...tj−1)和串開頭的k(t1...tk−1)個字符相同,那麼就可以省去一些無效比較(具體過程還是得自己試一下)
2、從 KMP 到 改進的 KMP
將next[j]升級;
升級:
減少無效比較,直接回溯j=nextval[j]。
直接回溯的條件——tj=tnext[j]
否則還是回溯和 KMP 一樣即j=next[j]
理由:
匹配失敗的位置字符si與tj不匹配,那麼和tk也不匹配。減少的無效比較就是上述過程。