字串匹配演算法

2021-05-22 05:36:54 字數 1072 閱讀 8724

首先引用一下另一篇文章中對字串匹配的介紹:

字串匹配指的是從文字中找出給定字串(稱為模式)的乙個或所有出現的位置。本文的演算法一律輸出全部的匹配位 置。模式串在**中用x[m]來表示,文字用y[n]來,而所有字串都構造自乙個有限集的字母表σ,其大小為σ。

根 據先給出模式還是先給出文字,字串匹配分為兩類方法:

字串樸素匹配

最簡單的匹配方式,時間複雜度是o(mn),但實際上在文字串和模式串都隨機的情況下,它的平均複雜度是o(m+n),因此它的效率並不低。

實現方法如下

2、rabin-karp演算法

rabin-karp演算法是由rabin和karp[1]提出的乙個在實際中有比較好應用的字串匹配演算法,此演算法的預處理時間為o(m),但它的在最壞 情況下的時間複雜度為o((2n-m+1)m),而平均複雜度接近o(m+n),此演算法的主要思想就是通過對字串進行哈稀運算,使得演算法可以容易的派出 大量的不相同的字串,假設模式字串的長度為m,利用

horner法則p = p[m] + 10(p[m -1] + 10(p[m-2]+...+10(p[2]+10p[1])...)),求出模式字串的哈稀值p,而對於文字字串來說,對應於每個長度為m的子串的 哈稀值為t(s+1)=10(t(s)-10^(m-1)t[s+1])+t[s+m+1],然後比較此哈稀值與模式字串的哈稀值是否相等,若不相同, 則字串一定不同,若相同,則需要進一步的按位比較,所以它的最壞情況下的時間複雜度為o(mn)。

實現方法如下:

3、kmp演算法

用了乙個只需要o(m)就能計算出來的輔助函式pai[1..m]就達到了搜尋時間複雜度為o(n).

函式pai稱為字首函式,是根據模式字串 構造的,對於乙個給定的模式字串p[1..m],它的字首函式定義如下:pai[q] = max即:pai[q]是p的最長的與字尾p(q)相同的字首。

通過均攤分析可以證明計算字首函式的時間複雜度為o(m),而同樣把此方法用 於分析kmp演算法的時間複雜度分析,我們可以得出kmp匹配演算法的時間複雜度為o(m+n)。

實現方法如下:

字串匹配演算法 字串匹配演算法總覽

字串匹配在文字處理裡非常重要,我們採用簡潔的python 把以下演算法一一實現並講解。樸素演算法 algorithm rabin karp 演算法 有限自動機演算法 finite automation knuth morris pratt 演算法 kmp algorithm boyer moore ...

字串匹配演算法

平常操作文字的時候,經常需要操作對字串進行操作。而字串中最重要的一種操作就叫匹配,字串的匹配演算法很多,人們最熟悉的莫過於kmp演算法了。今天就來談一談一些字串匹配演算法。先來說說大名鼎鼎的kmp演算法,這個演算法出現在無數的資料結構與演算法書上面。它的策略很簡單 當模式串第k個字元不匹配主串中第s...

字串匹配演算法

一 bf演算法 bf演算法是普通的模式匹配演算法,其基本思想就是將目標串的第乙個字元與模式串的第乙個字元進行匹配。若相等,則繼續比較第二個字元 若不相等,則比較目標串的第二個字元和模式串的第乙個字元。依次比較下去,直到得出最後的匹配結果。示例 static int bf const char src...