字串匹配演算法有四種:
1.樸素演算法,預處理o(0),匹配時間o((n-m+1)m) 其中n是文字長度,m是模式長度
2.rabin-karp演算法,預處理o(m),匹配時間同樸素演算法
3.有限自動機演算法,預處理o(m|∑|),匹配時間o(n)
4.kmp演算法,預處理o(m),匹配時間o(n)
這裡討論的是有限自動機演算法,先給出預處理為o(m^3|∑|),匹配時間為o(n)的演算法。
**:view code
1 #include 2 #include具體理論知識可以參考演算法導論。3 #include 4
using
namespace
std;
5string str="
abc";6
string
t,p;
7int res[8][3];8
9void transition() //
o(m^3*|all|)
1030 res[q][i]=k;
31//
cout<32}33
34//
for(i=0;i<=m;i++)
35//40}
4142
void
match()
4355}56
57int
main()
5865
66/*
67ababaca abababacabababacab
68*/
利用有限自動機進行字串匹配
乙個有限自動機m是乙個5元組,q,q0,f,m,g q 狀態的集合,q0 開始狀態,f接收狀態,m字符集,g 轉換函式 文字字串t,匹配模式p 1,2,3.m 每乙個匹配模式都有乙個對應的有限自動機,將字串t按序輸入到自動機中,如果到達接受狀態,則匹配成功,下面介紹如何為p構造自動機。1.狀態集合q...
字串匹配演算法 利用有限自動機進行匹配
本文內容與 演算法導論 中字串匹配章節相關並部分摘錄。常用的字串匹配演算法有樸素字串匹配演算法,rabin karp演算法,利用有限自動機進行字串匹配和kmp演算法等。前面兩種比較簡單,重點是後面兩種。利用有限自動機進行字串匹配 假設要對文字字串t進行掃瞄,找出模式p的所有出現位置。這個方法可以通過...
字串匹配 有限自動機
有限自動機包含乙個五元組 q,q0,a,q表示狀態有限集 q0為初始狀態 q0 q a表示接受狀態的集合 a 是q的子集 是輸入字母表 是狀態轉移函式 對於終態函式我還不是很理解,希望大家不吝賜教 演算法導論上有乙個例子 p ababaca 那麼轉換成五元組是 q q0 0 注 0狀態什麼都沒有 a...