KMP演算法求取部分匹配值的方法

2021-09-29 11:58:51 字數 1434 閱讀 4049

複習過程中看到的乙個簡潔明瞭的求取部分匹配值的方法,比看圖要好理解。

字串結構上的幾個概念:

字首:指除最後乙個字元外,字串的所有頭部字串。

字尾:指除第乙個字元外,字串的所有尾部子串。

部分匹配值:為字串的字首和字尾的最長相等前字尾長度。

以′ 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,因為一直比到最前一位,都...