博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AC算法分析
阅读量:5107 次
发布时间:2019-06-13

本文共 650 字,大约阅读时间需要 2 分钟。

在计算机科学领域。AC字符串匹配算法是由和Margaret J. Corasick发明的字符串搜索算法。该算法应用有限自动机巧妙地将字符比较转化为了状态转移。此算法有两个特点,一个是扫描文本时完全不需要回溯,另一个是时间复杂度为O(n),时间复杂度与关键字的数目和长度无关。

直接实例分析吧。哈哈。

子字符串 {a, ab, bc, bca, c, caa}

A diagram of the Aho-Corasick string search algorithm.svg

建立状态机,哈哈。怎么建立。根据子字符串建立啊。白色为已经匹配到子字符串了。该输出了。

so。第一个节点是root节点。

分析输入串 
abccab
节点 剩余字符串 输出:结束位置 变迁 输出
() abccab   从root开始  
(a) bccab a:1 () 到子节点 (a) 当前节点
(ab) ccab ab:2 (a) 到子节点 (ab) 当前节点
(bc) cab bc:3, c:3 (ab) 到词尾(b) 到子节点(bc) 当前节点, 词尾(等于输出c)
(c) ab c:4 (bc) 到后缀 (c) 到词尾 ()到子节点 (c) 当前节点
(ca) b a:5 (c) 到子节点 (ca) 词尾(就是输出a)
(ab)   ab:6 (ca) 到词尾(a)到子节点 (ab) 当前节点
备注:上面一幅图蓝线代表该找不到匹配节点时的节点变迁。黑线找到时的变迁。绿线代表词尾也是更小的字串输出。

源码实现:(自己找一下)

转载于:https://www.cnblogs.com/xiaokangzi/p/3576151.html

你可能感兴趣的文章
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
遍历Map对象
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
SDN第四次作业
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
python第九天课程:遇到了金角大王
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>