//: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...