kmp演算法是使用了next陣列,改良後的在next陣列基礎上進行2次模式參照,某乙個字元與模式串不匹配則沿用其前一位字元的next值
由於清華版的《資料結構(c語言版)》的類c**使用的是下標從0開始,0作為長度儲存位,與實際的c/c++標準庫不一樣,所以講其改為純c/c++標準實現,使用std庫的string類,由此引發了陣列下標的問題。在使用string庫的迭代器進行定位字元的話,可以將0對應為begin(),-1對應為begin()-1,(即越下界)。
當nextval為-1時,則主串應該向右滑動,同時模式串置為初始狀態index=0。
原kmp演算法原理:
next[j] =
改良的kmp則在max集合儲存有效比較資訊,公式1:假如p(k) = p(j),則nextval[j+1] =next[j]+1;若不等,則模式串應該向右滑動(即自身下標減小),直至滿足公式1,實在尋找不到合適的則
// kmp.cpp : 定義控制台應用程式的入口點。 //
#include "stdafx.h"
#include
#include
using namespace std;
void getnextval(const string t,int * nextval)
else
} else
} }//getnextval
bool index_kmp(const string &s,const string &t,int&targetindex,int beginpos = 0)
else
} delete nextval;
if (j>=t_size)
else
}//index_kmp
int _tmain(int argc, _tchar* argv)
字串模式匹配KMP演算法
next的值去改變每次匹配的位置 注意 字串的儲存最好用字元陣列,然後用字元輸入的形式,保證正確!利用求模式串的next值來分析遍歷,可以在不改變主串i的值的基礎上,只改變next j 的下標來遍歷 next j include include using namespace std void ge...
字串模式匹配KMP演算法
字串模式匹配指的是,找出特定的模式串在乙個較長的字串中出現的位置。很直觀的可以寫出下面的 來找出模式串在乙個長字串中出現的位置。1 2 樸素的模式匹配演算法 3 功能 字串的模式匹配 4 引數 5 s 目標串 6 p 模式串 7 pos 開發匹配的位置 8 返回值 9 匹配成功,返回模式串在目標串的...
字串模式匹配KMP演算法
字串模式匹配指的是,找出特定的模式串在乙個較長的字串中出現的位置。很直觀的可以寫出下面的 來找出模式串在乙個長字串中出現的位置。1 2 樸素的模式匹配演算法 3 功能 字串的模式匹配 4 引數 5 s 目標串 6 p 模式串 7 pos 開發匹配的位置 8 返回值 9 匹配成功,返回模式串在目標串的...