没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论















字符串多模匹配算法之 AC 自动机理解心得
自动机算法全称 算法,是一种字符串多模式匹配算法。用于
在一段文本中查找多个模式字符串。最近看到这个算法的一些文章,由于理解
能力有限,琢磨了许久才有一些眉目,故记下此时的理解过程,防止过久了又
要琢磨许久才能理解,也希望能帮助其他人加深理解,如有理解不当之处还望
指出修正。
总结如下:
该算法有两个主要步骤,一个是字典树的构造,一个是搜索路径的确定。
1. 字典树的构造
这个比较好理解,就是把要匹配的一些字符串添加到树结构中去,树边就是单
词中的字符,单词中最后一个字符的连接节点添加标志,以表示改节点路径包
含 个字典中的字符串,搜索到此节点就表示找到了字典中的某个单词,可以
直接输出。
例子:某字典 {}对应的字典树如下图:
图中有数字的节点到根节点的路劲正好对应字典中的字符串,数字表述单词在
字典中的顺序,也可以是其他标志。
【转载请注明出处:
!"""#$!%& $】
本文档由志文工作室为您整理 网址: http://www.zhiwenweb.cn 欢迎访问反馈!

2. 搜索路径的确定
就是这部分我琢磨了很久,我的理解是'利用后缀字符串来确定。后缀字符串就
是某个字符串的后面的一部分。比如 的后缀字符串有 和
。
假定目标字符串为 ,字典为上图所示。
搜索过程目标字符串指针指向的字符和字典中的字符会有以下几种情况:
'当前字符匹配,表示从当前节点沿着树边有一条路径可以到达目标字符,此
时只需沿该路径走向下一个节点继续匹配即可,目标字符串指针移向下个字符
继续匹配;
如:当指针指到 处,此时字典树指针处于根,要从根到 处,可以看到图中
有一条从根经 连接到的节点,因此字典树节点指针指向此节点,目标字符串
指针移动到下一字符 继续匹配;显然当前节点有一条经 连接到的节点,于
是重复操作到有数字标志的节点 # 处,表示已找到,该匹配字符串就是((,
输出该字符串的位置后,目标字符串指针增 指向((,字典指针指向数字 # 节
点,进行下次匹配。
'当前字符无匹配,表示当前节点的任何一条边都无法达到要匹配的字符,此
时不能沿现有路径前进,只能回溯,回溯到存在的最长的后缀字符串处,如果
没有任何后缀字符串匹配则回溯到树根处。然后从当前回溯节点判断是否可以
到达目标字符串字符。
如:接上,由于数字 # 节点无经((的连接,因此回溯, 的后缀字符串 在
字典树中,因此字典树指针指向带有数字 的标志节点,由于带有标志,直接
输出该节点()*(+存疑,很多文章没有提到此处需要输出,正常路径移动的字典
指针节点要判断是否可以输出,那么由回溯路径改变的字典指针指向的节点要
不要判断是否输出?,,然后从数字 节点判断是否有经((到下一节点的路径,
显然图中有。因此字典树节点指向下一节点,重复以上操作,最后找
到((,此时匹配搜索也结束了。
以上两种情况直到目标字符串指针直到末尾结束匹配。在匹配过程中遇到有标
志的节点说明找到了字典中的某个词,可以直接输出。
更新:输出说明:每次目标串指针移动前都需要判断当前节点是否可以输出,
并递归的判断当前节点回溯路径上的节点是否可以输出(其实就是判断所有后
缀字符串, 匹配时,其后缀 也会匹配,即使 不匹配,其后缀 也
可能匹配,因此需递归判断后缀字符串),直到树根结束递归。
由于固定字典的字符串的后缀字符串都是已知的,因此可以在字典树结构中存
储匹配失败的路径方向,因此只要字典树构造完毕,就可以根据字典树的路径
本文档由志文工作室为您整理 网址: http://www.zhiwenweb.cn 欢迎访问反馈!

进行匹配了,效率非常快。以上就是我对该算法的全部过程的理解,疏漏之处
在所难免。
附 :含匹配失败的情况的路径选择的字典树,实线表示匹配成功的正常路径,虚线表示失败
的回溯路径
附 #:伪代码实现
- 为目标字符串,长度为 ,. 为字典树的节点指针, 函数返回从节点 . 经过路径 -/0到达的
下一节点指针," 函数返回节点 . 的回溯节点指针。" 判断节点是否为标志节点
.''12''3''+,
"''''''
444'5'+.-/0,''6788'
4444444'.''"+.,2''回溯
4444.''+.-/0,2''前进
444'3.2
444'5+39,:
4444444'"'"+3,';'2'3'3''+3,2
4444444'3''"+3,244'查找回溯节点
本文档由志文工作室为您整理 网址: http://www.zhiwenweb.cn 欢迎访问反馈!
剩余13页未读,继续阅读
资源评论

- 蜀山仙剑派2023-03-26感谢大佬分享的资源,对我启发很大,给了我新的灵感。

老帽爬新坡
- 粉丝: 65
- 资源: 2万+

下载权益

C知道特权

VIP文章

课程特权

开通VIP
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
