您的位置:首页 > 其它

《柔性字符串匹配》读书笔记

2014-04-30 15:54 477 查看
介绍:《柔性字符串匹配 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树),每次匹配时用它去匹配就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: