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

介绍:《柔性字符串匹配 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树),每次匹配时用它去匹配就好了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值