《柔性字符串匹配》读书笔记
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树),每次匹配时用它去匹配就好了。
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树),每次匹配时用它去匹配就好了。
相关文章推荐
- Windows Phone 7 多点触控理论
- easyui tree使用方法
- 3.跟我学solr---使用solrj添加索引
- lazarus下的32位Bitmap转24位
- FreeBSD + sed + 无法替换TAB字符
- 路径获取文件名通用方法
- 【WPF】淡入淡出切换页面
- 包含min函数的栈
- ubuntu获取查看uuid的方法
- python获取某网址下所有图片
- Apache Shiro 简介
- 解决non-object的重大问题
- linux bash shell之declare
- ItemBased With Mahout
- [April]总结和规划
- JDOM读取XML文件例子程序
- 另类保存微信公众平台历史消息的方法 - 星标消息
- 惊涛怪浪(double dam-break) -- position based fluids
- 异常
- 在Visual Studio 中替换空行