模式匹配 KMP演算法詳解

2021-06-23 09:24:10 字數 796 閱讀 8935

/*

* kmp 模式匹配演算法

*/#include #include using namespace std;

/* * 計算模式串的next陣列

* 模式串既做主串,又做模式串,進行匹配

* 時間複雜度為o(m),m為模式串的長度

*/void countnext(char* strpattern, int len, int* next)

else if (strpattern[i] == strpattern[j]) else

} else }}

/* * 利用kmp演算法進行模式匹配

* kmp演算法的時間複雜度為o(n)+o(m) = o(n+m)

* 其中n為主串的長度,m為模式串的長度,需要先算出next陣列

* kmp演算法的核心就是在搜尋模式串的過程中,主串的指標不會回朔

* 只會盡可能的不斷向後移,避免無效的回朔,節約了時間,適合於主串

* 中有較多部分匹配模式串的情況,否則如果沒有什麼回朔,也就不需要用kmp演算法了

*/int indexkmp(char* strmain, int lenmain, char* strpattern, int lenpattern, int pos, int* next)

else

} if (j >= lenpattern)

return -1;

}int main()

else

delete next;

return 0;

}

模式匹配演算法(KMP演算法詳解)

從主串s goodgoogle 中找到t google 這個子串的位置 public static intindex string s,string t else if j t.length else 思路 利用已經部分匹配這個有效資訊,保持i指標不回溯,通過修改j指標,讓模式串盡量地移動到有效的位...

模式匹配的KMP演算法詳解

這種由d.e.knuth,j.h.morris和v.r.pratt同時發現的改進的模式匹配演算法簡稱為kmp演算法。大概學過資訊學的都知道,是個比較難理解的演算法,今天特把它搞個徹徹底底明明白白。注意到這是乙個改進的演算法,所以有必要把原來的模式匹配演算法拿出來,其實理解的關鍵就在這裡,一般的匹配演...

模式匹配的KMP演算法詳解

from 模式匹配的kmp演算法詳解 這種由d.e.knuth,j.h.morris和v.r.pratt同時發現的改進的模式匹配演算法簡稱為kmp演算法。大概學過資訊學的都知道,是個比較難理解的演算法,今天特把它搞個徹徹底底明明白白。注意到這是乙個改進的演算法,所以有必要把原來的模式匹配演算法拿出來...