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