KMP匹配演算法

2021-07-30 00:15:17 字數 759 閱讀 1756

1.概述

在講解kmp匹配演算法之前,我們不妨來看看我們用暴力法是怎麼完成字串的匹配的.

在我們的目標串t:101011011,和模式串p:110中,我們在t中找尋p第一次出現在t中的下標.通過上圖,我們發現我們利用暴力匹配法,在某次失敗後我們只能非常機械的一步一步移動我們的模式串p.所以我們理解了上述過程後,不難寫出如下的匹配**:

int match_1(const

char* t,const

char* p)

}}int match_2(const

char* t,const

char* p)

else}}

總結雖然暴力字串匹配演算法實現起來非常簡單,然而我們並不能滿足於此,分析時間複雜度我們知道,在最壞情況下,每次我們都是在最後一次失敗,所以為(m-1 + 1)步,和我們需要移動(n-m+1)次,所以暴力匹配的時間複雜度為,o(n*m);雖然說n>>m,但這確實還能進行優化.

kmp匹配演算法是上圖三位於2023年共同發現.kmp匹配就是利用之前已經成功匹配,借助成功的經驗,來加速向右移動.

//待完成,見諒.

演算法 kmp匹配演算法

執行結果 心得收穫 完整 計算next陣列 next陣列的目標是求得從開始到當前位置的字串相同最大前字尾長度為多少 該值的作用是在當前位置的字元匹配失敗時,匹配字串應該從那裡開始繼續匹配,而不用回到開頭 時間複雜的 o m void calnextarray const string str,int...

模式匹配演算法 KMP演算法

一.基本概念 真字首指的是除了本身以外字串全部頭部的組合,真字尾指的是除了本身以外字串全部尾部的組合。二.簡單的模式匹配演算法 按照正常的思維,字串可以進行暴力匹配,如下。int index bf string s,string p else if j p len else return 1 暴力匹...

模式匹配 KMP演算法

字串匹配演算法 include includeusing namespace std define ok 1 define error 0 define overflow 2 typedef int status define maxstrlen 255 使用者可在255以內定義最長串長 typed...