AC多模式匹配算法

本来想写字符串匹配算法的,感觉题目太大;又想写个多模式匹配算法的,感觉还是太大;最后,写了个AC多模式匹配算法,对哦,我只用到了AC算法啊,不过其他算法还是会介绍一下的,了解多少介绍多少。

 

本人是为了总结,所以可能不遵守一些写作逻辑了哦。

 

字符串匹配,主要分两种情况。一种是单字符串匹配,另一种是多字符串匹配。

单字符串匹配的意思就是,从一个较长的字符串里找所包含的另一个字符串,可以包括匹配的位置以及个数。

多字符串匹配又称多模式匹配,诚然,你可以循环调用单字符串匹配的算法,一个一个匹配。但是很明显,这并不是一个高效的做法。目前有很多算法可以提高匹配的效率,而我选中的AC算法,主要是因为它的简单,当然,效率也不是盖的。

 

单字符串匹配的算法有KMP,Horspool,Boyer-Moore,Sunday算法,忘得差不多了,等晚上回去仔细学一下再发。对了,还有个RK算法,用了线性代数,实在是看不懂了。。

 

多字符串匹配算法,也有好几个,不过只有AC算法看起来好用。

 

下面着重介绍AC算法了哦

 

AC算法的主要思想是,把字符串库放到一个trie树里面,然后有内容要匹配时,只要一次遍历,就可以将所有字符串匹配好了。

假设要在字符串"whatever you do, wherever you go."中匹配一下四个字符串

hello

world

when

what

 

首先,需要将hello world when what做成自动机,如图:




 

其中,每个圈代表一个状态,若出现匹配的状态,就转移到下一个状态。

如:匹配whatever,先匹配到w,到达状态6,然后匹配h,到达状态7,然后匹配a,到达状态10,然后匹配t,到达状态11.状态11应该有个output标志,表示已经有匹配。

 

吃饭去了,下次继续写~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值