模式匹配之(BF KMP演算法)

2021-08-08 01:42:14 字數 651 閱讀 6477

bf演算法

我們先來看bf

演算法

(brute-force,最基本的字串匹配演算法),bf演算法的實現思想很簡單:我們可以定義兩個索引值i和j,分別指示主串tag和子串ptn當前正待比較的字元位置,從主串tag的第pos個字元起和子串ptn的第乙個字元比較,若相等,則繼續逐個比較後續字元,否則從主串tag的下乙個字元起再重新和子串ptn的字元進行比較,重複執行,直到子串ptn中的每個字元依次和主串tag中的乙個連續字串相等,則匹配成功,函式返回該連續字串的第乙個字元在主串tag中的位置,否則匹配不成功,函式返回-1。

kmp演算法

上述演算法kmp的時間複雜度之所以大,是由於索引指標的回溯引起的,針對以上不足,便有了kmp演算法

kmp演算法可以在o(plen+tlen)的時間數量級上完成串的模式匹配操作。其改進之處在於:每一趟比較重出現字元不等時,不需要回溯索引指標i,而是利用已經得到的部分匹配的結果將子串向右滑動盡可能遠的距離,繼續進行比較。它的時間複雜度為o(plen+tlen),空間複雜度為o(plen),這從後面的**中可以看出。

bf演算法(普通匹配演算法):時間複雜度o(m*n);空間複雜度o(1)

kmp演算法:時間複雜度o(m+n);空間複雜度o(n)

演算法 字串匹配 BF KMP 近似匹配

include includeusing namespace std define maxstr 100 bf 時間o n m int stringmatch bf char str,char pat o m n m str n pat else if pat j 0 找到匹配位置 return i...

串的模式演算法 BF KMP

1 編寫完成下列功能的函式 1 建立乙個串 2 實現 bf 模式匹配演算法 3 實現 kmp 模式匹配演算法 4 呼叫建立串函式建立主串和模式串 5 呼叫 bf 演算法輸出匹配結果 6 呼叫 kmp 演算法輸出匹配結果。串的堆順序儲存 typedef structhstring bf演算法 i為主串...

BF kmp以及Gkmp演算法

一 描述 bf kmp gkmp 優化後的kmp 都是基於單個字串 多個字串一般要用到其他演算法,比如說ac自動機 匹配的演算法,不過時間複雜度各有不同,其中bf的時間複雜度為o n m n 1 而kmp演算法的時間複雜度為o n m 可見快上了不少,但是這其中確實還是有不足之處,故而推出了優化後的...