多模式匹配算法

1. 问题原型:

         给定一篇网页,其中有很多敏感词汇或者无效的词,需要找到一种算法,找到这些敏感词。

2. 如何求解呢?
   2.1 第一个简单的思路是:
          step1: for i = 0 to in #text   
          step2:       foreach pattern p 
          step3:           比较 text[i+j] and p[0+j]  where j = 0 to #p  

     这个思路最大问题是,逐个比较每个文本和每个模式,算法的复杂度是O(m*n*k),m是文本长度,n是pattern个数,k是所有pattern的总长度。my god!可想而知,这样的算法是不可容忍的。那么有哪些改进方法呢:

     首先, hash_map 可以减少大量的比较。

     其次, 对一个模式的比较,有很多算法如: KMP和Boyer-Moore。这两个改进的算法思想是:比较过的文本就不需要在比较了,直接shift 模式而不需要回溯Text,这两个算法可以看这里。以后有机会详细讨论这些。多模式匹配算法也是可以有类似的方法。
    我们知道,单模式匹配算法的复杂度可以达到O(m+n),所以最基本的改进是:
    2.2.  naive muti-pattern match
           step1: foreach pattern p
           step2:        执行 O(m+#p)的单模式匹配算法 
          算法复杂度是: O(m + #P1 + m + #P2 + …… + m + #pn) = O( n*m + k)

    好慢!如果模式的个数有几百万个,速度是不可忍受

3. 有哪些算法解决多模式匹配问题:
    AC (Aho-Corasick algorithm)
    ACBM(CW)[ A String Matching Algorithm Fast on the Average ]
    WM [Wu

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值