赞
踩
AC算法是Alfred V.Aho(《编译原理》(龙书)的作者),和Margaret J.Corasick于1974年提出(与KMP算法同年)的一个经典的多模式匹配算法,可以保证对于给定的长度为n的文本,和模式集合
AC算法从某种程度上可以说是KMP算法在多模式环境下的扩展。
对于模式串而言,其前缀,有可能也是模式串中的非前缀的子串,而且这里找的是最大前缀,非前缀可能包含多个前缀。
在KMP算法中有个数组,叫做前缀数组,也有的叫next数组,发现不匹配,下一步模式(pattern)串匹配目标(target)串的模式串的位置,它记录着字符串匹配过程中失配情况下,模式串可以向前跳几个字符,当然它描述的也是子串的对称程度,程度越高,值越大,当然之前可能出现再匹配的机会就更大。
序号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
pattern | a | b | c | a | b | c | a | c | a | b |
next | 0 | 0 | 0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 |
序号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
pattern | a | g | c | t | a | g | c | a | g | c | t | a | g | c | t | g |
next | 0 | 0 | 0 | 0 | 1 | 2 | 3 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 4 | 0 |
示例2中,a g c t a g c,包含两个前缀。对于t,其next一定小于其前面c的next。
AC are determined by three functions:goto function ,failure function,output function
A keyword tree (or a trie ) for a set of patterns
A keyword tree for
States: nodes of the keyword tree
initial state: 0 = the root
the goto function
the failure function
f(q) is always defined, since
L(0)=ϵ is a prefix of any pattern
Dashed arrows are fail transitions
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|
h- | e- | s- | h- | e- | i- | s- | r- | s- | |
0 | 0 | 0 | 1 | 2 | 0 | 3 | 0 | 3 |
the output function
参与评论
您还未登录,请先
登录
后发表或查看评论
07-31
5584
01-16
639
12-03
2237
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
|
---|
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。