演算法分析 KMP 串的模式匹配演算法

2021-08-27 10:37:40 字數 1016 閱讀 3581

**:

kmp字串模式匹配通俗點說就是一種在乙個字串中定位另乙個串的高效演算法。簡單匹配演算法的時間複雜度為o(m*n);kmp匹配演算法。可以證明它的時間複雜度為o(m+n).。

先來看乙個簡單匹配演算法的函式:

int index_bf ( char s [ ], char t [ ], int pos )

// if

else

k = next[k];

}// while

這裡是我加的顯示部分

// for(int i=0;i另一種寫法:

void getnext(const char* pattern,int next)

這裡是我加的顯示部分

// for(int i=0;i

下面是kmp模式匹配程式,各位可以用他驗證。記得加入上面的函式

#include #include int kmp(const char *text,const char* pattern) //const 表示函式內部不會改變這個引數的值。

int *next=new int[len+1];

get_nextval(pattern,next);//求pattern的next函式值

int index=0,i=0,j=0;

while(text[i]!='\0' && pattern[j]!='\0' )

else

}}//while

delete next;

if(pattern[j]=='\0')

return index;// 匹配成功

else

return -1;

}int main()//abcabcad

else if(t[j] != t[0])

else

}//while

for(int i=0;iint my_kmp(char *s, char *t, int pos)

{int i = pos, j = 0;//pos(s 的下標0≤pos

串的模式匹配演算法 KMP演算法

這個演算法理解起來有點難受,建議看下簡單的串模式匹配演算法bf演算法刷下經驗,如上鏈結。相比於brute force bf演算法 每當一趟匹配出現字元不等時,不需要回溯i指標 目標串指標 並且模式串指標j將從已經得到的部分匹配模式盡可能後移,從而降低時間消耗。o n m bf演算法為o n m 對於...

演算法 串的模式匹配演算法(KMP)

串的模式匹配演算法 問題 求子串位置的定位函式如何寫?int index sstring s,sstring t,int pos 給定串s,子串t,問t在s中從pos位開始第一次出現的位置是?我沒有使用字元陣列或者string,而是自己實現sstring,這其實是資料結構作業 s 0 中存放的是串的...

KMP 模式串匹配演算法

這兩天讀了july的kmp,覺得很受益,寫下以作備忘。kmp最重要的就是求出next陣列,而next陣列則是通過不斷比較 str2 k 與 str2 j 來確定下乙個字元對應的 next數值 相等則直接next j k 不相等則令k next k 進行遞推直到出現 str2 k str2 j 相等的...