複習過程中看到的乙個簡潔明瞭的求取部分匹配值的方法,比看圖要好理解。
字串結構上的幾個概念:
字首:指除最後乙個字元外,字串的所有頭部字串。
字尾:指除第乙個字元外,字串的所有尾部子串。
部分匹配值:為字串的字首和字尾的最長相等前字尾長度。
以′ ab
aba′
'ababa'
′ababa
′為例:
′ a′
的字首和
字尾都為
∅,最長
相等前後
綴長度為
0'a'的字首和字尾都為\varnothing,最長相等前字尾長度為0
′a′的字首
和字尾都
為∅,最
長相等前
字尾長度
為0′ ab
′的字首
為,字尾
為,∩=
∅,最長
相等前後
綴長度為
0'ab'的字首為\,字尾為\,\\cap\=\varnothing,最長相等前字尾長度為0
′ab′的前
綴為,後
綴為,∩
=∅,最
長相等前
字尾長度
為0′ ab
a′的前
綴為,後
綴為,∩
=,最長
相等前後
綴長度為
1'aba'的字首為\,字尾為\,\\cap\=\,最長相等前字尾長度為1
′aba′的
字首為,
字尾為,
∩=,最
長相等前
字尾長度
為1′ ab
ab′的
字首為∩
字尾=,
最長相等
前字尾長
度為
2'abab'的字首為\\cap字尾\=\,最長相等前字尾長度為2
′abab′
的字首為
∩字尾=
,最長相
等前字尾
長度為2
′ ab
aba′
的字首∩
字尾=,
公共元素
有兩個,
最長相等
前字尾長
度為
3'ababa'的字首\\cap字尾\=\,公共元素有兩個,最長相等前字尾長度為3
′ababa
′的字首
∩字尾=
,公共元
素有兩個
,最長相
等前字尾
長度為3
綜上,字串′ab
aba′
'ababa'
′ababa
′的部分匹配值為00123
部分匹配值的作用:將部分匹配值寫成陣列形式後可以得到next陣列.
KMP演算法之部分匹配值計算
kmp演算法我在網上搜了很多說明,但論簡潔易懂還屬阮一峰的那篇文章,強烈推薦大家看看 個人覺得唯一不足之處在於 部分匹配值 的計算方法描述有些不清楚,在此按自己的理解更詳細的詳解一下 取阮總文章中的例子進行說明,搜尋詞及 部分匹配值 如下圖如示 一開始我一直以為單個字元進行計算,後來經過查詢資料發現...
模式匹配,KMP 演算法精華部分
kmp 宗旨 i指標在整個匹配過程是沒有回溯。當主串中的第i個字元與模式中第j個字元失配時,主串中第i個字元 i指標不回溯 應與模式中哪個個字元再比較?假設此時對應於模式中第k k 哪個字元繼續比較。則模式中前k 1個字元的子串必須滿足下列關係式 4 2 j為模式串當前不匹配處。k為模式串下一趟與主...
KMP模式匹配演算法 next值求解
j 1 2 3 4 5 6 7 8 模式串 a b a a b c a c next j 0 1 1 2 2 3 1 2 各個位的解釋 1.前兩位必定為0和1。2.計算第三位的時候,看第二位b的next值,為1,則把b和1對應的a進行比較,不同,則第三位a的next的值為1,因為一直比到最前一位,都...