AC多模式匹配演算法

2021-09-01 03:56:08 字數 879 閱讀 7875

本來想寫字串匹配演算法的,感覺題目太大;又想寫個多模式匹配演算法的,感覺還是太大;最後,寫了個ac多模式匹配演算法,對哦,我只用到了ac演算法啊,不過其他演算法還是會介紹一下的,了解多少介紹多少。

本人是為了總結,所以可能不遵守一些寫作邏輯了哦。

字串匹配,主要分兩種情況。一種是單字串匹配,另一種是多字串匹配。

單字串匹配的意思就是,從乙個較長的字串裡找所包含的另乙個字串,可以包括匹配的位置以及個數。

多字串匹配又稱多模式匹配,誠然,你可以迴圈呼叫單字串匹配的演算法,乙個乙個匹配。但是很明顯,這並不是乙個高效的做法。目前有很多演算法可以提高匹配的效率,而我選中的ac演算法,主要是因為它的簡單,當然,效率也不是蓋的。

單字串匹配的演算法有kmp,horspool,boyer-moore,sunday演算法,忘得差不多了,等晚上回去仔細學一下再發。對了,還有個rk演算法,用了線性代數,實在是看不懂了。。

多字串匹配演算法,也有好幾個,不過只有ac演算法看起來好用。

下面著重介紹ac演算法了哦

ac演算法的主要思想是,把字串庫放到乙個trie樹裡面,然後有內容要匹配時,只要一次遍歷,就可以將所有字串匹配好了。

假設要在字串"whatever you do, wherever you go."中匹配一下四個字串

hello

world

when

what

首先,需要將hello world when what做成自動機,如圖:

其中,每個圈代表乙個狀態,若出現匹配的狀態,就轉移到下乙個狀態。

如:匹配whatever,先匹配到w,到達狀態6,然後匹配h,到達狀態7,然後匹配a,到達狀態10,然後匹配t,到達狀態11.狀態11應該有個output標誌,表示已經有匹配。

吃飯去了,下次繼續寫~

多模式匹配AC演算法

aho corasick演算法是多模式匹配中的經典演算法,目前在實際應用中較多。aho corasick演算法對應的資料結構是aho corasick自動機,簡稱ac自動機。搞程式設計的一般都應該知道自動機fa吧,具體細分為 確定性有限狀態自動機 dfa 和非確定性有限狀態自動機nfa。普通的自動機...

多模式匹配AC演算法(更正)

上篇中的執行結果如下 不仔細看完全沒有問題,可是如果細心的你仔細看下對字串 hao 的匹配的下標時就會發現問題了.下圖為更正 後的結果 經過兩個的對比,應該很明顯了吧。廢話不多說,以下是需要更改的函式的 int searchac tree root,char str,int len treenode...

AC自動機(多模式匹配)

ac自動機主要解決的問題 多模式匹配 kmp則屬於單模式匹配 n個單詞在m個字元的文章中,出現過多少次。主要分三步 構建trie樹 構建失敗指標 尋找匹配個數 trie樹 又稱字典樹 單詞查詢樹,是一種樹形結構,用於儲存大量的字串。它的優點是 利用字串的公共字首來節約儲存空間。具體參見 失敗指標 作...