彻底理解AC多模式匹配算法jily16

(本文尤其适合遍览网上的讲解而仍百思不得姐的同学)

AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符,表示状态的转移。根节点状态记为0状态,表示起始状态。当一个状态处有一个模式串终结则标记一下。

我找了样例画了一套新图,主要目标是通过稍微的夸张(失配点远离)让过程更清晰。

匹配的过程是:从0状态起点开始,以字符流输入,进行适当的状态转移,如果可以抵达某一标记终结的状态,则成功匹配模式,串值为从0到终结点的路径。

按照传统的说法,状态机有三个主要函数支撑:goto(状态正常转移),fail(状态失配转移),output(传回匹配结果),而我认为与其规定是具体的函数,倒不如说是三个功能的模块,有不同于函数的实现形式。

Trie树的建立是简单的,在此基础上我们要完善更多的数据结构,实现goto的功能。

goto是自动机基本的状态转移过程,很好想,就是在建立Trie树时让每个状态维护一组指针(广义的),使得在每一状态对于输入都可以正确转移,没有对应的则报错(现在回答刚才的问题,什么是失配?失配就是一个状态接受了无法转移的字符,记fail)。除了字典树中的树枝以外,还有一个转移就是在开始节点,对于不能流进自动机的字符,不报错而是再一次转到开始节点(如上图示),很好理解,对于待匹配串λthis,λ为不含t,h的任意串,真正的模式匹配是在去除了它以后开始的。(当然还有其他的用意,坑稍后填)

好了,正常的状态流转已经建立好了,现在看失配时我们的状态流何去何从。举一个栗子,如果输入thip这个串,状态的流转应该如下图:

那3状态处报错后应该怎么处理呢?最好想的方法当然是错开一位,再从头开始匹配(这种方法就像一位老人家曾经说过,太年轻太简单,有时还很幼稚),AC二位的办法是——利用图中的关系计算出一套跳转关系——在x点处失配的串不打回开头来过,而是跳到y点——继续匹配当前字符。这套规则叫做失配函数,也就是fail功能模块。要点在于当前字符不向前回溯,想想着很适合字符流的关键字匹配对不对。

好了,告诉大家3状态的失配跳转在6状态,先不用管怎么得到的,想想这个过程:3得到p字符,失配,凭goto无法转移状态,使用失配时通用的fail,状态跳至6,接受p——还是这个字符,成功匹配到终结状态7。单趟遍历目标串,cool。

当然这套规则是需要小心计算的。采用的方法很巧妙,在树形结构中很像广度优先搜索BFS,数学形式又很像动态规划DP。

正式开始之前请认真思考这个情况:已知2状态的失配跳转为5,怎么求3状态的失配跳转?从图中很容易看出,2通过i流向3,而5恰有对i的goto,自然地,3失配时可以跳转至6,哒哒

现在我把图小小地改动一下,把hip变成hop,我们都喜欢hip-hop~:

2的失配跳转仍然是5,然而对于所有使2不失配的字符,5都没有合适的goto——即会在5也失配,此种情况怎么求3的失配跳转?

请仔细读这两句话:

2的失配跳转说明不能采用前缀th

5的失配跳转说明不能采用前缀h(现在不要想2的事情了,单独想5)

——失配跳转实际上是一个逐字符推后匹配模式前缀的过程

那么既然h开头的也不能匹配模式了,那么对于目标串,要从i开始匹配了——下一次状态就是5的失配跳转0!

这是一个向前递归的过程,而前面提到0的大量无匹配字符均指回0自己则巧妙地保证了这个递归会最不济也在会0处停下:这种时候则是放弃之前的全部前缀从当前字符重新开始尝试匹配了,对吧。

我要强调,失配跳转的过程中当前字符是不变的。

至此,我们也完整的构造了fail模块的规则。

output需要做的则是对匹配路径上的每一状态,检查是否为一个模式的终结,如果是,用一种合适的方式传回这个匹配的结果。

Anotherquestion!目标串全部模式匹配:在匹配到一个模式后,应当驱动自动机继续无遗漏地匹配下一个出现的模式(这个下一模式也许会和已匹配的部分或全部重叠),我再次重复这句话,失配跳转实际上是一个逐字符推后匹配模式前缀的过程,那么应该很简单了吧,匹配到一个模式后自然一次失配跳转就行了!自动机会把前缀去掉一个字符继续匹配。

我在原理中避开一个一定要解释清楚的问题,就是自动机的数据结构实现。Aho&Corasiek的论文中称为goto/fail/outputfunction,与其理解为函数倒不如说是功能,因为它们的实现不必是有输入输出的函数,而可以是向更直接的数据结构直接查询。

我实践中认为易于实现的写法:goto功能就可以实现在结点结构中,每个状态维护一个转向结点的指针,无效则置空;fail即可以是一张自动机维护的表;output在结点中标记是否终结,如果终结,状态结点存储模式串,检测到终结直接传回。

THE END
1.52avav.com子域名大全52avav.com二级域名52avav.com域名解析查询ip.ipwww.52avav.com 3w.52avav.com w.52avav.com wwe.52avav.com bywww.52avav.com 77.www.52avav.com ipwww.52avav.com wwww.52avav.com ee.52avav.com httpwww.52avav.com eewww.52avav.com ww.52avav.com www.52avav.com 更多子域名 最新域名查询 ycgxbm.com www.xxx520.com www.tube16.https://site.ip138.com/52avav.com/domain.htm
2.CTF『脱壳破解区』吾爱破解一、本版只限于发布脱文、破解、算法分析以及大家对脱壳破解相关的心得体会。 1: 发布脱文、破解、算法分析文章时,请不要把正文分为多个回帖进行连接,请整理到一篇正文中发布。(如果后续更新一系列教程可在主题内增加导航链接) 2: 发布脱文、破解、算法分析文章时,请把试炼程序一并上传,便于会员们学习。 3: 发https://www.52pojie.cn/forum.php?mod=forumdisplay&fid=5&filter=digest&digest=1&orderby=views&typeid=344
3.为什么越来越多的人选择在52g官登录主页上进行互动另外,52g官网登录主页还推出了一些有趣的功能,如用户可以通过视频直播、语音聊天等方式与朋友和陌生人进行即时互动,极大丰富了社交的方式。平台还在不断调整和优化算法,使得用户的体验更加个性化、精准化,这也是它能够持续吸引大量用户的原因之一。相关攻略 + 博德http://m.haobeike.net/strategy/267410fd9d.html
4.如何安全高效地使用52g官网登录主页,保障账号安全与顺畅体验在数字化时代,互联网已经渗透到了我们生活的方方面面,各类网站、平台层出不穷。52g官网登录主页作为一个受欢迎的在线平台,为用户提供了便捷的功能和服务。然而,随着使用人数的增加,网络安全问题也逐渐浮现,许多人在使用52g官网登录主页时可能会遇到一些困扰,比如账号安全问题、平台功能不稳定等。本文将为大家提供一些http://m.hajmzs.com/jmgl/171556.html
5.金钥匙211766论坛网址智能科技助你生活更便捷进修版.2.319随着科技的飞速发展,人工智能、机器学习、大数据分析等智能技术逐渐融入我们的日常生活,金钥匙211766论坛作为一个专注于智能科技领域的论坛,致力于为广大网友提供便捷、高效、实用的智能科技产品体验,本文将对金钥匙211766论坛及其产品进行深入解读,探讨智能科技如何助力我们的生活更加便捷。 http://5g.openup3d.com/post/6213.html
6.猿代码超算人才智造局高性能计算并行计算人工智能高效AI算法实践:如何优化深度学习神经网络模型 发布于 2024-12-18 19:08 HPC环境配置技巧:实现高效并行优化 发布于 2024-12-18 19:07 HPC环境配置最佳实践:提升并行计算效率 发布于 2024-12-18 19:05 高效利用GPU加速神经网络训练技巧 发布于 2024-12-18 19:04 高效利用GPU加速深度神经网络训练 发布于 2024-https://www.ydma.com/index.php?mod=space&uid=8
7.阿里云漏洞库漏洞描述 H3C S1526是中国新华三(H3C)公司的一款可管理接入交换机。 H3C S1526存在安全漏洞。攻击者利用该漏洞可以通过 S1526.cfg 组件获取敏感信息。 解决建议 建议您更新当前系统或软件至最新版,完成漏洞的修复。 参考链接 https://github.com/a1drewlong/h3c-S1526/blob/main/Vulnerability%20Cases.md https://avd.aliyun.com/detail?id=AVD-2024-51175
8.03:对齐输出52ac算法网读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们。 输入 只有一行,包含三个整数,整数之间以一个空格分开。 输出 只有一行,按照格式要求依次输出三个整数,之间以一个空格分开。 样例输入 123456789 0 -1 样例输出 123456789 0 -1 源码 #include<stdio.h>intmain(){inta,b,c;scanf("%d %d %d",&ahttps://blog.csdn.net/m0_47256162/article/details/107238330
9.永久免费未网:了解免费互联网服务的种类优势及未来发展随着互联网的快速发展,越来越多的用户开始关注如何能享受免费的网络资源。尤其是在各种服务和软件层出不穷的今天,“永久免费未网”成为了一个热门的关键词,它指代了那些不收取费用的网络服务或资源。而在这种背景下,了解永久免费未网的种类和特点变得非常重要。本文将带你了解什么是永久免费未网,以及它在当今互联网http://m.rongqifanghua.com/fang/57970.html
10.搞52g官网登录主页,提升网站性能,打造更好的用户体验和优化效果在如今的互联网环境中,网站的性能和用户体验变得尤为重要。网站不仅需要具备良好的操作界面,还要注重加载速度、功能齐全以及搜索引擎优化(SEO)等方面的表现。因此,搞52g官网登录主页的优化工作,成为了很多站长和开发者的重点关注对象。本文将探讨如何通过提升网站性能,优化52g官网登录主页,让用户的浏览体验更加流畅,同时http://www.czyifan.com/czyifan15/6251710.html
11.华为H(HUAWEI)S5720S52PLI型号S5720S-52P-LI-AC背板带宽详情可见GB 模块化插槽数16外形尺寸详情可见mm 展开 实际产品价格已电议为准 主要参数 产品类型千兆以太网交换机 支持WRR、DRR、SP、WRR+SP、DRR+SP队列调度算法 支持报文的802.1p和DSCP优先级重新标记 支持L2(Layer 2)-L4(Layer 4)包过滤功能,提供基于源MAC地址、目的https://www.china.cn/wangluojiaohuanji/4742556250.html
12.2024年上半年网络工程师综合知识真题与答案(文字版)信管网参考答案:B 查看解析:www.cnitpm.com/st/632379754.html 51、下列()协议可以加密传输电子邮件 A.SSL B.IMAP C.SMTP D.POP3 信管网参考答案:A 查看解析:www.cnitpm.com/st/632387711.html 52、我国拥有自主知识产权的4G标准是(). A.TD-LTE-Advanced B.FDD-LTE C.WCDMA D.TD-SCDMA 信管网参考答案https://m.cnitpm.com/pm1/160709j8oftrv9l0.html
13.广东岭南职业技术学院9、(26)局域网的标准化工作主要由———制定? A、OSI B、CCITT C、IEEE D、EIA 答案:C 10、(35)请说出OSI七层参考模型中哪一层负责建立端到端的连接? A、会话层 B、传输层 C、网络层 D、数据链路层 E、应用层 答案:B 11、(36)下列哪一个是传输层的协议? http://exp.lnc.edu.cn/suite/portal/popupView.do?feature=testPaper&action=previewTestPaper&testPaperKey=32389442
14.强化学习ACA2CA3C算法原理与实现!腾讯云开发者社区跟着李宏毅老师的视频,复习了下AC算法,新学习了下A2C算法和A3C算法,本文就跟大家一起分享下这三个算法的原理及tensorflow的简单实现。 视频地址:https://www.bilibili.com/video/av24724071/?p=4 1、PG算法回顾 在PG算法中,我们的Agent又被称为Actor,Actor对于一个特定的任务,都有自己的一个策略π,策略π通常https://cloud.tencent.com/developer/article/1375650
15.软件设计师知识点100条软件设计师考点整理软件设计师累加寄存器AC:暂存数据,为ALU提供工作区。 数据缓冲寄存器DR 状态条件寄存器PSW归属有争议 控制器 指令42、加密算法 常见对称密钥加密算法(共享密钥加密技术):DES、 3DES(三重DES)、 RC-5、IDEA、AES算法52、开发方法 结构化开发方法:用户至上,严格区分工作阶段,每阶段有任务和结果,强调系统开发过程的整体性https://www.educity.cn/rk/2213375.html
16.52口万兆上联48口千兆三层管理型以太网POE交换机电源:AC100-240V/50-60Hz 以太网:48 个10/100/1000Mbps POE端口,4 个万兆 SFP 端口, 1 个RJ45 Console 端口, 1 个USB 端口 【产品概述】 52口万兆上联48口千兆三层管理型以太网POE交换机,提供48个10/100/1000自适应POE电口、4个10 Gb SFP +端口、1个console口、1个USB串口。完善的安全控制策略及CPU保http://www.szldfl.com/pro-291-28.shtml
17.一种解决连续空间问题的真实在线自然梯度AC算法?E-mail: jos@iscas.ac.cn http://www.jos.org.cn Tel: +86-10-62562563 一种解决连续空间问题的真实在线自然梯度 AC 算法? 朱斐 1,2,3, 朱海军 1, 刘全 1,3, 陈冬火 1, 伏玉琛 1,4 1(苏州大学 计算机科学与技术学院,江苏 苏州 215006) 2(江苏省计算机信息处理技术重点实验室(苏州大学),江苏 https://jos.org.cn/jos/article/pdf/5251
18.北京华为S572056CEIAC千兆交换机特惠华为S572056CEI华为S5720-56C-EI-AC千兆以太网交换机搭载48个10/100/1000Base-T以太网端口、4个万兆SFP+,支持基于端口的流量监管,支持双速三色CAR功能,每端口支持8个队列,支持WRR、DRR、SP、WRR+SP、DRR+SP队列调度算法。提供灵活的全千兆接入以及增强的万兆上行端口扩展能力,广泛应用于企业园区接入、汇聚,数据中心千兆接入等多https://m.zol.com.cn/article/8659685.html
19.数据结构&普通CS算法(一)ACBM算法是在AC(Aho-Corasick)自动机(UNIX上的fgrep命令使用的就是AC算法)的基础之上,引入了BM(Boyer-Moore)算法的多模扩展,实现的高效的多模匹配。和AC自动机不同的是,ACBM算法不需要扫描目标文本串中的每一个字符,可以利用本次匹配不成功的信息,跳过尽可能多的字符,实现高效匹配。 https://antkillerfarm.github.io/resource/2020/09/17/data_structure.html
20.超详细解析C++实现归并排序算法C语言三、AC代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 #include <stdio.h> #include <iostream> #includhttps://www.jb51.net/article/263751.htm
21.计算机控制论文(通用6篇)以在工业领域中应用较为广泛的电阻炉为被控对象,采用MCS—52单片机实现电阻炉温度计算机控制系统的设计,介绍电阻炉温度计算机控制系统的组成,并完成系统总体控制方案和达林算法控制器的设计,给出系统硬件原理框图和软件设计流程图等。 1.1电阻炉组成及其加热方式 https://www.360wenmi.com/f/filee6lq4do1.html
22.52ac算法网《算法逻辑与程序设计》补考(计算机23级中新班) 1 命题:jhhdx 2024-03-03 13:30:00 2024-03-03 15:30:00 软件23级《程序设计基础》补考 1 命题:jhhdx 2024-03-03 08:30:00 2024-03-03 10:30:00 软件231班《程序设计基础》期末考试 1 http://www.52ac.net/
23.PPO强调AC如何输出连续型动作区分OnPolicy与OffPolicy52_olicy Gradient 策略梯度 53_Actor Critic (A3C) 54_DDPG、PPO、DPPO算法 DDPG解决DQN不能输出连续型动作的问题_DDPG如何训练Actor和Critic TD3_使用DoubleNetwork优化DDPG PPO_强调AC如何输出连续型动作_区分On-Policy与Off-Policy PPO_通过重要性采样使得PPO可以做Off-Policy学习 PPO_重要性采样的问题_期望矫正https://www.sxt.cn/wiki/12492.html
24.PTA:PTA(拼题A)Ruby基础教程编程语言算法集 / Ruby 2024-12-13 17:23:38 积分:1 自制西游精准矩阵生成器 2024-12-13 16:49:52 积分:1 DS-000451-ICM-42670-P-v1.0陀螺仪手册 2024-12-13 11:11:27 积分:1 矿山数字孪生系统解决方案 2024-12-13 10:00:58 https://www.coder100.com/index/index/content/id/1485410
25.发电并网范文11篇(全文)由单片机89S52和FPGA组成,包含SPWM信号产生、同频同相控制、MPPT跟踪、参数测量和显示、人机交互等部分。系统供电采用强电弱电互相隔离的方式,有效地减小了二者之间的串扰,提高了系统的安全性。 三、硬件电路设计 1. DC-AC主回路设计与器件选择 全桥逆变的SPWM波形的产生由FPGA完成,信号经过光耦隔离由IR2110驱动MOSFEThttps://www.99xueshu.com/w/ikeykd69lfon.html