模式匹配中的kmp演算法

2021-04-20 20:11:17 字數 967 閱讀 1594

//:kmp

//kmp演算法是效率最高的模式匹配演算法

//其主要思想是:(假設i,j分別指向主串mstr和模式sstr的當前試匹配位置)當mstr[i]!=mstr[j]時並不

//按傳統的回溯i,j ,而是i不變j重乙個算好的陣列回溯,該陣列可使得模式串向右

//移動盡可能多的距離。

//主要原理:假設當i,j失配的時候應該用模式的k字元與主串的j字元進行比較

//則:  sstr[1~k-1] = mstr[i-k+1 ~ i-1]

//又已知:sstr[j-k+1 ~ j-1]=mstr[i-k+1 ~ i-1]

//所以: sstr[1~k-1] = sstr[j-k+1 ~ j-1];

//所以可以根據字串計算出每個字元對應的最大k,儲存在next中,簡便方法為:

//1,初始化 next[0] = -1 ,i,j分別代表sstr[0~i-1] = sstr[j-i-1,j-1]情況下的i,j且j+1是當前失配位置

//2,如果sstr[i] ==  sstr[j] ; 則sstr[0~i] = sstr[j-i-1,j],如果此時sstr[0~i+1] = sstr[j-i-1,j+1]

//則當j+1位置失配時,推到i+1位置也會失配,所以應使next[j+1] = next[i+1]如果sstr[0~i+1] != sstr[j-i-1,j+1]

//則next[j+1]=i+1;

//3,如果j

#include

int * getindex(const char *pstr,int *next)//及時乙個串的模式匹配陣列

else

}else

}return next;

}int kmp(const char * mainsour,const char * substr,int pos)

}else

}return res;

}int main()

模式匹配 KMP演算法

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

模式匹配KMP演算法

前些日子在為目前該學習什麼而苦惱,就問了一下已經從事多年軟體開發的表哥,他說乙個程式設計師要走的遠,就要學好資料結構和演算法,於是我就重新開始學習資料結構和演算法了 拿起以前上過的資料結構看,看到第四章串的模式匹配時,頗感興趣,就寫了一下程式,實踐了一下。感覺還蠻爽,於是就把以下幾個重要的函式放在此...

KMP模式匹配演算法

首先,這是由knuth morris和prattle三人設計的線性時間字串匹配演算法。這裡就不仔細的講解,網上有更好的講解,在這推薦幾個自己當時學習的kmp所看到的較好理解的 這裡附上自己所學的 includeusing namespace std s 是主串 p 是模式串 int next 100...