模式匹配
模式匹配的具體含義是在主串s中從start開始查詢乙個與模式串t相同的子串。如果找到則返回模式串t的第乙個字元在主串中的下標;如果未找到則返回-1。
1.模式匹配的brute-force演算法
brute-force演算法實現模式匹配的思想是:從主串s=」s0s1…sn-1」的第乙個字元開始和模式串t=」t0t1…tn-1」的第乙個字元比較,若相等,則繼續比較後續字元;否則從主串s的第二個字元開始重新與模式串t的第乙個字元比較。如此不斷繼續,若存在模式串中的每個字元依次和主串中的乙個連續字串行相等,則匹配成功,返回模式串t的第乙個字元在主串中的下標;否則匹配失敗,返回-1。
int index_bf ( char s [ ], char t [ ], int pos )當此集合非空時
②next[j]= 0 其他情況
③next[j]= -1 當 j = 0 時
若模式串t中存在真子串「t0t1…tk-1」 = 「tj-ktj-k+1…tj-1」,且滿足0j與主串s的si比較不相等時,模式串t中需重新和主串s的si比較的字元下標為k,即下一次開始比較si和tk;若模式串t中不存在如上所說的真子串,有next[j] = 0,則下一次開始比較si和t0;當j = 0時,令next[j] = -1,此處-1為一標記,表示下一次開始比較si+1和t0.
簡而言之,kmp演算法對brute-force演算法的改進就是利用已經得到的部分匹配結果將模式串t右滑一段距離再繼續比較,從而無需回退主串s的下標值。
#include #include using namespace std;
void get_nextval(const char *t, int next)
// if
else
k = next[k];
}// while
////這裡是我加的顯示部分
// for(int i=0;i// //cout<}// get_nextval
int kmp(const char *text,const char* pattern)
int *next=new int[len+1];
get_nextval(pattern,next);//求pattern的next函式值
int index=0,i=0,j=0;
while(text[i]!='\0' && pattern[j]!='\0' )
else
}}//while
delete next;
if(pattern[j]=='\0')
return index;// 匹配成功
else
return -1;
}int main()//abcabcad
字串匹配演算法 Brute Force演算法
brute force 暴力 演算法是字串匹配中最簡單也是最容易理解的演算法。主要思想是 按順序遍歷母串,將每個字元作為匹配的起始字元,判斷是否匹配字串。若第乙個字元與字串匹配,則比較下乙個字元,否則回退到母串與字串比較的第乙個字元的下個字元,繼續比較。brute force演算法的時間複雜度為o ...
模式匹配 關於模式匹配的演算法實現2
參照我上篇部落格,只不過多了乙個識別率的演算法而已,還是參考歸併排序寫的,很簡單。上篇部落格位址 很多的解釋都在 裡面了,各位看看就明白了 author seen time 2015 09 20 include include include using namespace std struct p...
簡單模式匹配演算法 串的模式匹配
一 對乙個串中的某子串的定位操作稱為串的模式匹配 二 模式串 待定位的子串 三 基本思想 從主串中的第乙個位置起和模式串的第乙個字元開始比較 如果相等,則繼續比較後續字元 如果不等,則從主串的第二個字元起,重新用上一步的方法與模式串中的字元作比較 以此類推,直到比較完模式串的所有字元,則匹配成功,返...