java KMP演算法和next 改進演算法

2021-07-30 10:10:53 字數 719 閱讀 2140

kmp演算法最大的

優點之處

:在匹配失敗時,主串中的指標

i不需要回溯,而是在模式中找出適當的字元繼續比較。下面是模式串中的失敗函式

i=     0  1   2  3  4

模式    

a  a

aa  b

next[i]= -1  0  1   2  3// 沒改進的失敗函式

nextval

[j]=-1 -1 -1  -1  3     // 改進的失敗函式

public class kmp

;

// 模式串(匹配串)

char pattern = ;

// 呼叫kmp演算法返回下標

int position = kmp(aim,pattern);

system.out.println(position);

}public int kmp(char aim,char pattern)

else

i = next[i];

}if(i==len2-1)

return j-i;

return -1;

}public void getnext(int next,char pattern)

else

i = next[i];}}

}

Java KMP演算法 字串匹配

kmp演算法是一種改進的字串模式匹配演算法,可以在o n m 的時間複雜度以內完成字串的匹配操作。利用得到的部分匹配,通過乙個next陣列,儲存模式串中前後最長公共子串行的長度,每次回溯時,通過next陣列找到前面匹配過的位置,省去了大量的計算時間。所以,kmp演算法的核心就是計算next陣列。ne...

kmp演算法next例題 KMP演算法next陣列求解

kmp演算法與bf演算法的比較 bf演算法的想法十分樸素,即先將子串t的第一位與主串s的第一位對齊開始匹配,當不能匹配時將子串整體往後移一位,然後重新匹配,以此類推直至排出結果 如當遇到下圖所示情況時,需將子串整體後移一位,將i,j分別回溯到主串第2位和子串第一位。kmp演算法 對bf進行思考後,我...

next陣列求法和KMP演算法

首先介紹什麼是next陣列 定義 next i 表示是子串s 0 i 的最長相等前字尾的字首的最後一位下標。認真理解不難 下圖給出了next陣列的定義計算 其中下框第一行是字首,下框第二行是字尾 注意字首和字尾可以部分重疊但是不能使是s 0 i 本身 很好理解這是必然因為字首和字尾都是本身,比較毫無...