字串匹配演算法

2021-07-25 19:36:24 字數 955 閱讀 9608

主要根據《演算法導論》總結了以下幾種字串匹配演算法

1  n=t.length

2 m=p.length

3for s=0 to s=n-m

4if p[1...m]=t[s+1...s+m]

5printf

"patterns occur with shift" s

說明:

第3-5的for迴圈考察每乙個可能的偏移,第4行用於確定當前偏移是否有效,隱藏了乙個迴圈,用於逐個監測對應位置上的字元。

演算法複雜度分析:

最壞情況下,樸素匹配演算法執行時間為θ(

(n−m

+1)m

) ,由於不需要預處理,樸素字串匹配演算法執行時間即為其匹配時間。

相較於kmp演算法,樸素演算法的效率不高,因為即使有無效偏移存在時,它也只關心乙個有效偏移,而完全忽略了檢測無效s值時獲得的文字資訊。

b. kmp演算法

*kmp演算法思路:

kmp演算法思路

英文參考資料posted by jake boxer

演算法思路已經很清晰地在這兩份資料中展現了,下面乙個問題是next陣列以及nextval陣列。

next[j]=k:

k是模式中第j個字元與文字中相應的字元「失配」時,在模式中重新和主串中該字元進行比較的字元的位置。

nextval[j]:

nextval[1]=0, 看第j字元和第next[j]字元是否相等,若相等,則nextval[j]=nextval[next[j]];若不等,則nextval[j]=next[j]

說明:在我的版本中j是從1開始的,有些資料是從0開始的。

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

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

字串匹配演算法

首先引用一下另一篇文章中對字串匹配的介紹 字串匹配指的是從文字中找出給定字串 稱為模式 的乙個或所有出現的位置。本文的演算法一律輸出全部的匹配位 置。模式串在 中用x m 來表示,文字用y n 來,而所有字串都構造自乙個有限集的字母表 其大小為 根 據先給出模式還是先給出文字,字串匹配分為兩類方法 ...

字串匹配演算法

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