KMP演算法步驟分析

2023-02-11 03:57:04 字數 1219 閱讀 5582

注:先計算好next值進而推出nextval數值,可在csnd上找到求解方法。

對於上述kmp演算法第趟匹配,有一定的難度!接下來,我來分析一下。

先給主串和模式串進行編號:

主串 a b c a a b b a b c a b a a c b a c b a

編號i: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

模式串 a b c a b a a

編號j:1 2 3 4 5 6 7

(1) 第一趟排序

主串t: a b c a a b b a b c a b a a c b a c b a

模式串p: a b c a b a a

i=5 j=5 時匹配失敗

取模式串p第五位的nextval值。nextval=1

故下一趟排序將主串的第i=5位與模式串的第nextval=1位進行比較。

即得到第二趟排序 :

(2)第二趟排序

主串t: a b c a a b b a b c a b a a c b a c b a

模式串pa b c a b a a

i=7 j=3 時匹配失敗

取模式串p第三位的nextval值。nextval=1

故下一趟排序將主串的第i=7位與模式串的第nextval=1位進行比較。

即得到第三趟排序 :

(3)第二趟排序

主串t: a b c a a b b a b c a b a a c b a c b a

模式串pa b c a b a a

i=7 j=1 匹配失敗

取模式串p第1位的nextval值。nextval=0

當nextval=0時 ,主串要向後面移動一位

故下一趟排序將主串的第i=7+1=8位與模式串的第1位進行比較。

(4)第二趟排序

主串t: a b c a a b b a b c a b a a c b a c b a

模式串pa b c a b a a

i=15 j=8 匹配成功!

2017/12/24

餘生雁北星向藍作

KMP演算法 如何理解

假設,p向右移動一定距離後,第k個字元p k 和s i 進行比較。此時如上圖,當p j 和s i 失配後,i不動,將p前移到k,讓p k 和s i 繼續匹配。現在的關鍵是k的值是多少?通過上圖,我們發現,因為黃色部分表示已經匹配了的結果 因為是到了s i 和p j 的時候才失配,所以si j 1si...

KMP演算法中next講解

kmp演算法的功能是要在主串s中尋找是否存在子串t。理解這個演算法的核心是next函式。next函式見下面。由於case1和case3情況比較簡單,我們僅對case2進行 case2中做的事情是在子串t中 t 1 t j 的範圍內找到最大重疊的字首和字尾。並且要求字首頂頭,字尾頂尾。即字首從t 1 ...

分析估算法

常用估算方法 上 作者 新東方北斗星公 研究中心賈柱保 近年來公 的資料分析部分已經趨於穩定,每年的題量控制在四份資料二十道題。經過統計,在每年的二十道題中,判斷結論性的題目大約佔五道,這一部分基本上不需要太多的計算,屬於應該當然解決的範疇 需要進行簡單估算的題目大約佔十道,計算量一般不大但比較講求...