《柔性字符串匹配》讀書筆記

介紹:《柔性字符串匹配 Flexible Pattern Matching in Sortings》是一本不可多得的字符串匹配方面的專業書籍。書中對串匹配問題進行了系統化的分類,從實際效果出發,着重詳細介紹了串匹配領域內效果最好的若干種算法。


1.單模式匹配

算法的思想越簡單,實際應用的效果越好。

  • KMP(Knuth-Morris-Pratt)和BM(Boyer-Moore)算法是串匹配中最古老和最著名的。
  • KMP在實際應用中比蠻力方法還要慢一倍。
  • BM系列算法中,應用最成功的算法是對原始算法進行高度簡化後得到的Horspool(比BM快)。
  • 實際應用中如果模式串p足夠長,則BOM是最快的,而如果p足夠短,則BDM的更簡單、更有效版本BNDM會比較好。


2.多模式匹配

大部分但模式匹配算法都能擴展到多模式匹配。

  • Aho-Corasick是KMP向多模式串情形的擴展,該算法對應的數據結構是Aho-Corasick Automation,即AC自動機。
  • Horspool的多模式匹配擴展是Set Horspool,當搜索一個很大字母表上的一個較小模式串集合時,其效率很高。
  • Wu-Manber算法結合了後綴搜索算法和散列方法,在實際應用中效率很高。
  • BOM的多模式匹配擴展是SBOM,當模式串集合中的最小模式串長度較大時,SBOM算法效率很高。


3.正則表達式

NFA (Nondeterministic Finite Automaton)
DFA (Deterministic Finite Automaton)

  • DFA是正則表達式搜索中所採用的經典算法之一,稱爲DFA Classical算法。但它的主要問題是把NFA轉換成DFA後,DFA的大小可能是原來NFA大小的指數級,因此,只是在模式串長度較短時才適用。
  • 對於較長的模式串,通常適用多個較小的DFA構造一個大的NFA,這種結合適用NFA和DFA的方法具有較好的效率,稱爲DFA Modules算法。


閒話:看這本書最初是因爲最近要做一個網站關鍵詞過濾的功能(關鍵詞高亮或者關鍵詞替換爲*號),後來經過各種取捨之後,決定採用AC自動機來做(能力有限,這個比較簡單)。於是先用關鍵字字典(模式串集合)建立一個AC自動機(其實就是增加了fail指針的Trie樹),每次匹配時用它去匹配就好了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章