資料結構 KMP演算法

2021-10-06 16:24:03 字數 1053 閱讀 7979

匹配方式:

如果是暴力匹配的話,當空格和d 不匹配的時候,下面的字串會 向後移一位,

如果是採用kmp演算法的話,會直接移動4位。這個地方是採用乙個kmp演算法的移動公式:

移動位數 = 匹配的字元數 - 對應的部分匹配值

如上面的的例子,只有的空格和d 不匹配,前面abcdab是匹配的,匹配的長度為6,通過查表,abcdab的部分匹配值為2,根據公式得出移動的位數為4

實現**如下:

public class kmpalgorithm 

/** kmp搜尋演算法

*/public static int kmpsearch(string str1,string str2,int next)

//想i 和 j 指向的字元相等的時候 j 和 i 加一

if (str1.charat(i) == str2.charat(j))

if (j == str2.length())

} return -1; }

public static int kmpnext(string dest)

//當dest.charat(i) == dest.charat(j) 滿足時候,部分匹配值就是 +1;

if (dest.charat(i) == dest.charat(j))

next[i] = j;

} return next; }

}

資料結構 KMP演算法

求串的模式值next n 定義 1 next 0 1 意義 任何串的第乙個字元的模式值規定為 1。2 next j 1 意義 模式串t中下標為j的字元,如果與首字元相同,且 j的前面的 1 k個字元與開頭的 1 k個字元不等 或者相等但t k t j 1 k 如 t abcabcad 則next 6...

資料結構 KMP演算法

在我的理解,kmp演算法最核心的同時最難理解的是這個next 函式。但是,next 的值是挺好求的,難在哪呢?這個函式難在邏輯。理解起來很費勁,但真的很好用,並且這個函式的結果很好求。例如求模式串t ababaaa 的next j 的函式值 是這樣的,當j 0,next 0 1,對於任何子串,第乙個...

資料結構 KMP演算法

要完善乙個string字串類,那麼實現查詢子串的功能是必不可少的,實現子串查詢可以使用樸素演算法,每次匹配乙個字元後向右移動乙個位置,這樣執行下來效率是比較低的,所以就有了kmp演算法,它能夠準確的知道當前字元不匹配後字串應該向右移動多少位,由於剛接觸kmp演算法,所以很多還明白的不是很透徹,在此記...