常見演算法及問題場景 字串匹配

2021-07-22 11:45:55 字數 926 閱讀 8210

字串匹配的思路大致分幾種:

1、暴力匹配。

2、基於暴力匹配進行優化。

進行預計算,一旦發現失敗匹配之後,可以跳過更多的位置,減少無謂的浪費。

這篇文件提到了許多按這個思路實現的演算法各具特點

但最具代表性的演算法還是kmp,這篇文件講的非常詳細:

3、ac自動機。

根據原始字串,及模式字串,初始化dfa,計算出轉移矩陣。接下來檢驗原始字串是否可以被dfa所接受即可。

轉移矩陣在這種情況下為稀疏矩陣,為了壓縮空間,通常使用trie(字典樹)來實現。字典樹中的邊表示匹配路徑上的字元,節點儲存當前索引,next指標陣列,fail指標。

fail指標的指向,跟kmp演算法有共性,在匹配失敗時可以跳過無效的匹配。

關於ac自動機,可以參考這裡:

關於dfa的原理,可以參考這裡:

字典樹的應用:

在搜尋引擎的分詞操作中,使用的詞庫中的詞條數目往往幾十萬以上,為了保證切分速度,乙個好的詞庫查詢方法很重要。乙個比較經典的方法就是使用trie樹結構來組織詞條,使用樹節點儲存詞條中的字元,使用hash來尋找字元在trie樹中的位置,使用最大長度查詢方法來匹配詞條。

特殊字串模式識別

有些字串的模式有自己的內在規則,像**(86-13088438874)、位址(北京市朝陽區大望路)、組織機構(阿里巴巴集團****)等。

要識別這類字串,可以構造出不同規則的狀態機,進行規則的判斷和狀態跳轉。

4、hash值匹配。實現非常簡單的rabin-karp演算法。預計算出模式字串的hash code,然後依次從原始字串中取出模式字串等長的部分,計算其hash code,看兩個值是否相等。匹配失敗則後移一位,繼續匹配。

思路比較新穎,效率波動比較大。

可參考這篇文件:

dfa與kmp最優。

具體可參考這裡:

字串匹配問題 KMP匹配演算法

基本思想 字串匹配問題 在文字串中尋找是否有與模式串相同的子串 在字串匹配時,暴力匹配忽略了如果模式串開頭與中間有重複部分,在將模式串的後面的重複部分匹配後,無法繼續匹配的話,此時將模式串開頭實際上也已經被匹配了,可以直接從開頭重複部分之後開始匹配 這裡引入了乙個部分匹配值表,每個與模式串的字元對應...

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

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

字串匹配問題 KMP演算法

kmp演算法 kmp是解字串匹配這類題目的演算法,又稱 看毛片 演算法。如下圖,給定乙個長度為n的文字,給定乙個長度為m 的字串,求該字串在給定文字的中出現的次數。kmp就是解決這一類題目的。i 1 zzkzzzkzzzkzkkkz zzkzzkzzkzzk j 1繼續考慮上面的問題。首先我相信每個...