/***字串匹配演算法***/
#include#includeusing namespace std;
#define ok 1
#define error 0
#define overflow -2
typedef int status;
#define maxstrlen 255 //使用者可在255以內定義最長串長
typedef char sstring[maxstrlen+1]; //0號單元存放串的長度
status strassign(sstring t, char *chars)
}//演算法4.3 計算next函式值
void get_next(sstring t, int next)
else
j = next[j];
}//get_next
//演算法4.2 kmp演算法
int index_kmp(sstring s, sstring t, int pos, int next)
else
j = next[j]; // 模式串向右移動
if (j > t[0]) // 匹配成功
return i - t[0];
else
return 0;
}//index_kmp
int main()
模式匹配KMP演算法
前些日子在為目前該學習什麼而苦惱,就問了一下已經從事多年軟體開發的表哥,他說乙個程式設計師要走的遠,就要學好資料結構和演算法,於是我就重新開始學習資料結構和演算法了 拿起以前上過的資料結構看,看到第四章串的模式匹配時,頗感興趣,就寫了一下程式,實踐了一下。感覺還蠻爽,於是就把以下幾個重要的函式放在此...
KMP模式匹配演算法
首先,這是由knuth morris和prattle三人設計的線性時間字串匹配演算法。這裡就不仔細的講解,網上有更好的講解,在這推薦幾個自己當時學習的kmp所看到的較好理解的 這裡附上自己所學的 includeusing namespace std s 是主串 p 是模式串 int next 100...
KMP模式匹配演算法
思想 盡量利用已經部分匹配的結果資訊,讓i不要回溯,加快模式串的滑動速度。例 如何由當前部分匹配結果確定模式向右滑動的新比較起點k?模式應該向右滑多遠才是高效率的?1 設目前打算與t的第k字元開始比較 則t的1 k 1位 s的i k 1 i 1位 k是追求的新起點 2 剛才肯定是在s的i處和t的第j...