演算法導論 字串匹配

2021-07-09 07:09:00 字數 935 閱讀 9947

華電北風吹

天津大學認知計算與應用重點實驗室

最後修改日期:2016/1/4

本文說說我對幾個常用的字串匹配演算法的理解。

字串匹配問題是指對於乙個長度為n的文字陣列t[n],檢測長度為m的模式文字陣列p[m]在t中出現的位置。常見的方法有樸素演算法,rabin-karp演算法,有限自動機演算法,kmp(knuth-morris-pratt)演算法和boyer-moor(bm)演算法。

一、樸素演算法

樸素演算法不需要對模式進行預處理,直接用模式在文字陣列上二層迴圈匹配(外層對模式逐個偏移,內層進行逐個匹配)。時間複雜度為o((n-m+1)m)。

此方法比較簡單,不詳細敘述。

二、rabin-karp演算法

三、有限自動機演算法

四、kmp演算法

kmp演算法基本思路也是通過對模式在文字陣列上偏移匹配。巧妙的是kmp已經匹配過的模式可以用來挖掘匹配字串的資訊使得每個匹配字串只匹配一次來提高效率。kmp對模式進行預處理時間複雜度o(m),匹配時間複雜度o(n)。總的來說kmp時間複雜度為o(m+n)。

五、bm演算法

bm是一種比kmp更為高效的演算法。目前文字處理軟體(office)裡面的查詢功能就是使用的bm演算法。kmp已經展示了可以通過預處理極大提高匹配效率,bm演算法進一步提高預處理功能。bm演算法通過預先計算生成《壞字元規則表》和《好字尾規則表》來提高匹配效率。

bm演算法引入了」壞字元(bad character)」的概念。在匹配的過程中通過」壞字元規則」和」好字尾規則」來對文字陣列進行匹配。

「壞字元規則—後移位數 = 壞字元的位置 - 搜尋詞中的上一次出現位置

「好字尾規則」—後移位數 = 好字尾的位置 - 搜尋詞中的上一次出現位置

參考資料:

1、演算法導論(第三版)

2、字串匹配的kmp演算法

3、字串匹配的boyer-moore演算法

演算法導論 讀書筆記 字串匹配

字串匹配 一.定義 在日常生活中,我們常常需要在文字中找到某個模式的所有出現位置,比如輸入字串,需要找到出現這個字串的所有位置,解決這個問題的演算法叫做字串匹配演算法。字串匹配問題的形式化定義 假設文字是乙個長度為n的陣列t 1.n 而模式是乙個床都為m的陣列p 1.m 其中m n,進一步假設p和t...

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

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

字串匹配演算法

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