1)編寫完成下列功能的函式:(1)建立乙個串;( 2)實現 bf 模式匹配演算法;(3)實現 kmp 模式匹配演算法;(4)呼叫建立串函式建立主串和模式串;(5)呼叫 bf 演算法輸出匹配結果;(6)呼叫 kmp 演算法輸出匹配結果。
串的堆順序儲存
typedef structhstring;bf演算法:(i為主串匹配指標,j為模式串匹配指標)
在kmp函式中,要呼叫next改進函式。
#include
"stdio.h"
#include
"stdlib.h"
#define maxsize 100
#define error 0
#define ok 1
typedef
struct
hstring;
//串的堆式儲存結構
intstrassign
(hstring &s,
char
*t)int
index_bf
(hstring s,hstring t,
int pos)
else
// 否則指標回溯重新開始匹配}if
(j > t.length )
//j > t.length 時,說明字串遍歷完成
return i-t.length;
// 匹配成功
else
return0;
// 匹配失敗
}void
get_nextval
(hstring t,
int nextval)
else k = nextval[k];}
}int
index_kmp
(hstring s, hstring t,
int pos)
//p95-96
// 繼續比較後繼字元
else j = nextval[j]
;// 模式串向右移動}if
(j > t.length)
return i-t.length;
// 匹配成功
else
return0;
// 匹配失敗
}int
main()
}return ok;
}
模式匹配之(BF KMP演算法)
bf演算法 我們先來看bf 演算法 brute force,最基本的字串匹配演算法 bf演算法的實現思想很簡單 我們可以定義兩個索引值i和j,分別指示主串tag和子串ptn當前正待比較的字元位置,從主串tag的第pos個字元起和子串ptn的第乙個字元比較,若相等,則繼續逐個比較後續字元,否則從主串t...
BF kmp以及Gkmp演算法
一 描述 bf kmp gkmp 優化後的kmp 都是基於單個字串 多個字串一般要用到其他演算法,比如說ac自動機 匹配的演算法,不過時間複雜度各有不同,其中bf的時間複雜度為o n m n 1 而kmp演算法的時間複雜度為o n m 可見快上了不少,但是這其中確實還是有不足之處,故而推出了優化後的...
資料結構 串的知識總結,BF,KMP演算法
常見基礎概念 串長 串中字元個數,有時還常用a 0 length來儲存串長 注意空串和空格串的區別 空串是長度為0的串,而空格串是由多個或乙個空格字元組成的字串 子串與主串 串s中任意個連續字串行叫s的子串,s稱為主串 子串位置 子串的第乙個字元在主串中的序號 序號從1開始 字元位置 字元在串中的序...