對KMP算法的核心理念的理解

串的模式匹配的算法改進過程

建立next數組,省去無效的比較
若t_j=t_k則直接回溯進一步省去無效比較
Brute-Force
KMP算法
改進的KMP

改進的地方

1、從 Brute Force 到 KMP:

建立next[j]next[j]數組提取加速匹配的有用信息;

有用信息:

暴力算法要一個一個進行比對,但如果知道匹配失敗的位置tjt_j之前的k個字符(tjk...tj1t_{j-k}...t_{j-1})和串開頭的k(t1...tk1t_1...t_{k-1})個字符相同,那麼就可以省去一些無效比較(具體過程還是得自己試一下)

2、從 KMP 到 改進的 KMP

next[j]next[j]升級;

升級:

減少無效比較,直接回溯j=nextval[j]j=nextval[j]
直接回溯的條件——tj=tnext[j]t_j=t_{next[j]}
否則還是回溯和 KMP 一樣即j=next[j]j=next[j]
理由:
匹配失敗的位置字符sis_itjt_j不匹配,那麼和tkt_k也不匹配。減少的無效比較就是上述過程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章