kmp演算法的具體分析見
/************************
author's email:[email protected]
date:2017.12.18
kmp演算法
************************/
#include
#include
using
namespace
std;
#define maxsize 50
void getnext(char substr, int next);//求next陣列
void getnextval(char substr, int nextval);//優化求next陣列
int kmp(char str, char substr, int next);//kmp演算法
int main() ;
int nextval[maxsize] = ;
int result1,result2;
//kmp演算法
getnext(substr, next);
result1 = kmp(str, substr, next);
cout
<< "kmp演算法匹配結果:"
<< endl;
if (result1 != -1)
cout
<< "主串與子串在主串的第"
<< result1 << "個字元(首字元的位置為0)處首次匹配"
<< endl;
else
cout
<< "無匹配子串"
<< endl;
//kmp演算法的優化
getnextval(substr, nextval);
result2 = kmp(str, substr, nextval);
cout
<< "kmp優化演算法匹配結果:"
<< endl;
if (result2 != -1)
cout
<< "主串與子串在主串的第"
<< result2 << "個字元(首字元的位置為0)處首次匹配"
<< endl;
else
cout
<< "無匹配子串"
<< endl;
return0;}
void getnext(char substr, int next)
else
j = next[j];
}}void getnextval(char substr, int nextval)
else
j = nextval[j];
}}int kmp(char str, char substr, int next)
else
j = next[j];
}if (j > strlen(substr) - 1)
return i - strlen(substr) ;
else
return -1;
}
程式測試結果:
以上如有錯誤請指出,大家共同學習進步。
KMP演算法及其優化
今天來記錄一下,關於字元匹配的kmp演算法。給定字串text和pattern,需要判斷字串pattern是否為test的子串。pattern一般稱為模式串,text為文字串。若匹配成功,則讓函式返回,匹配開始處的下標,否則,返回 1。假設有乙個字串s,它以i號位作為結尾的子串就是s 1 i 對該字串...
C 實現KMP演算法及其優化
自己寫了乙個簡潔版本,加注釋。第乙個函式是得到kmp的next陣列。1 設定next的第乙個值為 1。2 遍歷剩下的t串 3 t串前後比較,相等就在next中對應位置加1 4 不等,就回溯 t串中等價位置 void getnext string t,int next else j next j 第二...
經典演算法 KMP演算法詳解
內容 1 問題引入 2 暴力求解方法 3 優化方法 4 kmp演算法 1 問題引入 原始問題 對於乙個字串 str 長度為n 和另乙個字串 match 長度為m 如果 match 是 str 的子串,請返回其在 str 第一次出現時的首字母下標,若 match 不是 str 的子串則返回 1 注 子...