在實現文字過濾的演算法中,dfa是唯一比較好的實現演算法。dfa即deterministic finite automaton,也就是確定有窮自動機,它是是通過event和當前的state得到下乙個state,即event+state=nextstate。下圖展示了其狀態的轉換
在這幅圖中大寫字母(s、u、v、q)都是狀態,小寫字母a、b為動作。通過上圖我們可以看到如下關係
abb
s---
--> us-
----> vu-
----> v
在實現敏感詞過濾的演算法中,我們必須要減少運算,而dfa在dfa演算法中幾乎沒有什麼計算,有的只是狀態的轉換。
具體參考:
演算法 DFA敏感詞過濾
最近剛好有群友問到關於敏感詞過濾的問題,當時有人給出了一些辦法。1.利用hashset,對傳多來的字串進行比較。或者將敏感詞儲存到資料庫或者其他地方,然後和傳入的詞做匹配。2.正規表示式匹配。上述兩個方法不用想肯定都是很慢的。後來有人說道可以利用dfa演算法,因此我去研究了一下,增加自己的知識面。具...
PHP實現DFA演算法
最近專案需要用到敏感詞過濾功能,最開始想的是使用正則匹配和mysql儲存敏感詞來對敏感詞來進行過濾操作,但是這兩種方法都感覺不好。大家都知道正則效能問題一直都是乙個很大的問題,而使用mysql的話雖然可以實現,但是給資料庫增加了額外的壓力。後面經過google了解到dfa 有窮自動機 演算法可以解決...
Python實現模擬DFA演算法
演算法 模擬dfa 輸入 dfa d和輸入字串x,d的初態為s0,終態集為f。輸出 若d接受x,回答 yes 否則回答 no 構造dfa class dfa 初始化dfa def init self,s,s0,f,move self.s s 狀態集 list self.s0 s0 初態 int se...