Aho-Corasick自动机算法
Aho-Corasick算法是多模式匹配中的经典算法,目前在实际应用中较多,Aho-Corasick算法对应的数据结构是Aho-Corasick自动机,简称AC自动机。确定性有限状态自动机(DFA)和非确定性有限状态自动机NFA。普通的自动机不能进行多模式匹配,AC自动机增加了失败转移,转移到已经输入成功的文本的后缀来实现。是著名的多模匹配算法之一。
1.多模式匹配
多模式匹配就是有多个模式串P1,P2,P3...,Pm,求出所有这些模式串在连续文本T1....n中的所有可能出现的位置。
例如:求出模式集合{"nihao","hao","hs","hsr"}在给定文本"sdmfhsgnshejfgnihaofhsrnihao"中所有可能出现的位置。
2.Aho-Corasick算法
使用Aho-Corasick算法需要三步:
1.建立模式的Trie,也称构造tree树
2.给Trie添加失败指针
构造失败指针的过程概括起来就一句话:设这个节点上的字母为C,沿着他父亲的失败指针走,直到走到一个节点,他的儿子中也有字母为C的节点。然后把当前节点的失败指针指向那个字母也为C的儿子。如果一直走到了root都没找到,那就把失败指针指向root。如果与当前节点的关键字不能继续匹配的时候,就应该去当前节点的失败指针所指向的节点继续进行匹配。
3.根据AC自动机,搜索待处理的文本
从root节点开始,每次根据读入的字符沿着自动机向下移动。当读入的字符,在分支中不存在时,递归走失败路径。如果走失败路径走到了root节点,则跳过该字符,处理下一个字符。因为AC自动机是沿着输入文本的最长后缀移动的,所以在读取完所有输入文本后,最后递归走失败路径,直到到达根节点,这样可以检测出所有的模式。
Aho-Corasick自动机算法相关推荐
- ac自动机 匹配最长前缀_Aho Corasick自动机结合DoubleArrayTrie极速多模式匹配
本文使用Double Array Trie实现了一个性能极高的Aho Corasick自动机,应用于分词可以取得1400万字每秒,约合27MB/s的分词速度.其中词典为150万词,构建耗时1801 m ...
- TypeScript:Aho–Corasick算法实现敏感词过滤
敏感词过滤应该是许多后端同事经常会遇到的需求,无论是评论.弹幕.文章,都需要做敏感词过滤处理来规避风险.在前端开发中,使用replace函数来替换字符串是我们的常规操作,在这之前我思考过如果用Java ...
- KMP算法、AC自动机算法的原理介绍以及Python实现
KMP算法 要弄懂AC自动机算法,首先弄清楚KMP算法. 这篇文章讲的很好: http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E ...
- AC自动机算法详解以及Java代码实现
详细介绍了AC自动机算法详解以及Java代码实现. 文章目录 1 概念和原理 2 节点定义 3 构建Trie前缀树 3.1 案例演示 4 构建fail失配指针 4.1 案例演示 5 匹配文本 5.1 ...
- AC自动机算法及模板
AC自动机算法及模板 2016-05-08 18:58 226人阅读 评论(0) 收藏 举报 分类: AC自动机(1) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 关于 ...
- 【机器学习】通俗的元胞自动机算法解析和应用
[机器学习]通俗的元胞自动机算法解析和应用 文章目录 1 元胞自动机的定义 2 元胞自动机的组成 3 元胞自动机的特征 4 Python实现元胞自动机(生命游戏) 5 总结 6 Github(华盛顿州 ...
- 深入理解Aho-Corasick自动机算法
0.前言 我总是对那些具有状态转移过程的算法,心怀敬意. 例如:递归.递推.动规.DAT 以及现在要说的 AC 自动机算法. 数学真是优美! ...
- 理解Aho-Corasick自动机算法
1.版权说明 商业转载请联系作者获得授权,非商业转载请注明出处. 本文作者:Q-WHai 发表日期: 2015年10月24日 本文链接:http://blog.csdn.net/lemon_tree1 ...
- ac自动机 匹配最长前缀_AC自动机算法
AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段包 ...
- 极限定律 My Algorithm Space AC自动机算法详解
转载自:http://www.cppblog.com/mythit/archive/2009/04/21/80633.html 首先简要介绍一下AC自动机:Aho-Corasick automatio ...
最新文章
- 表单高级应用和语义化
- python编码问题无法复现_Python编码问题详解
- 八皇后问题python实现_八皇后问题的python实现
- 前端学习(2186):知识回顾
- Juqery Html(),append()等方法的Bug
- SQL事务控制语言(TCL)
- ta-lib依赖安装问题
- 那个准点下班的人,比我先升职了...
- WPF 自定义BarChartControl(可左右滑动的柱状图)
- 安装过程中检测数据库是否已经存在
- ubuntu20.04安装MySQL、卸载MySQL命令
- gallery3d 代码分析之 glsurfaceview
- 150.1 go语言开发实战慕课版
- 对象转为json形式
- TF-IDF mapreduce实现
- 1.1 认识Word 2010操作界面
- linaro软件源更新问题
- python立方根求解_python – 如何获得立方根的整数?
- gluster容量显示处理
- 虚拟动力数字人技术亮相第六届文创产业大会,探见元宇宙 驱动新文创
热门文章
- Jquery+SpringMVC实现上传Excel文件,并批量导入
- IOS 公司开发者账号申请详细教程-13810208661
- web-log-parser 安装记录
- 分布式、高并发、高性能场景(抢购、秒杀、抢票、限时竞答)数据一致性解决方案...
- Surface Pro 3 的 USB 和蓝牙设备无法使用的处理方法
- 今日头条校招2017.7.21编程3,PM、idea、程序员
- 面试了十个应届生九个都是秒杀系统,你确定你们那是秒杀?
- 图片择优算法(模糊图片筛选出最清楚的图片) 没有使用第三方库
- 牛客网赛码网 输入输出格式 pythonC++
- stl如果开o2_打开STL文件的四种最佳方法