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自动机算法相关推荐

  1. ac自动机 匹配最长前缀_Aho Corasick自动机结合DoubleArrayTrie极速多模式匹配

    本文使用Double Array Trie实现了一个性能极高的Aho Corasick自动机,应用于分词可以取得1400万字每秒,约合27MB/s的分词速度.其中词典为150万词,构建耗时1801 m ...

  2. TypeScript:Aho–Corasick算法实现敏感词过滤

    敏感词过滤应该是许多后端同事经常会遇到的需求,无论是评论.弹幕.文章,都需要做敏感词过滤处理来规避风险.在前端开发中,使用replace函数来替换字符串是我们的常规操作,在这之前我思考过如果用Java ...

  3. KMP算法、AC自动机算法的原理介绍以及Python实现

    KMP算法 要弄懂AC自动机算法,首先弄清楚KMP算法. 这篇文章讲的很好: http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E ...

  4. AC自动机算法详解以及Java代码实现

    详细介绍了AC自动机算法详解以及Java代码实现. 文章目录 1 概念和原理 2 节点定义 3 构建Trie前缀树 3.1 案例演示 4 构建fail失配指针 4.1 案例演示 5 匹配文本 5.1 ...

  5. AC自动机算法及模板

    AC自动机算法及模板 2016-05-08 18:58 226人阅读 评论(0) 收藏 举报  分类: AC自动机(1)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 关于 ...

  6. 【机器学习】通俗的元胞自动机算法解析和应用

    [机器学习]通俗的元胞自动机算法解析和应用 文章目录 1 元胞自动机的定义 2 元胞自动机的组成 3 元胞自动机的特征 4 Python实现元胞自动机(生命游戏) 5 总结 6 Github(华盛顿州 ...

  7. 深入理解Aho-Corasick自动机算法

    0.前言   我总是对那些具有状态转移过程的算法,心怀敬意.   例如:递归.递推.动规.DAT 以及现在要说的 AC 自动机算法.   数学真是优美!                         ...

  8. 理解Aho-Corasick自动机算法

    1.版权说明 商业转载请联系作者获得授权,非商业转载请注明出处. 本文作者:Q-WHai 发表日期: 2015年10月24日 本文链接:http://blog.csdn.net/lemon_tree1 ...

  9. ac自动机 匹配最长前缀_AC自动机算法

    AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段包 ...

  10. 极限定律 My Algorithm Space AC自动机算法详解

    转载自:http://www.cppblog.com/mythit/archive/2009/04/21/80633.html 首先简要介绍一下AC自动机:Aho-Corasick automatio ...

最新文章

  1. 表单高级应用和语义化
  2. python编码问题无法复现_Python编码问题详解
  3. 八皇后问题python实现_八皇后问题的python实现
  4. 前端学习(2186):知识回顾
  5. Juqery Html(),append()等方法的Bug
  6. SQL事务控制语言(TCL)
  7. ta-lib依赖安装问题
  8. 那个准点下班的人,比我先升职了...
  9. WPF 自定义BarChartControl(可左右滑动的柱状图)
  10. 安装过程中检测数据库是否已经存在
  11. ubuntu20.04安装MySQL、卸载MySQL命令
  12. gallery3d 代码分析之 glsurfaceview
  13. 150.1 go语言开发实战慕课版
  14. 对象转为json形式
  15. TF-IDF mapreduce实现
  16. 1.1 认识Word 2010操作界面
  17. linaro软件源更新问题
  18. python立方根求解_python – 如何获得立方根的整数?
  19. gluster容量显示处理
  20. 虚拟动力数字人技术亮相第六届文创产业大会,探见元宇宙 驱动新文创

热门文章

  1. Jquery+SpringMVC实现上传Excel文件,并批量导入
  2. IOS 公司开发者账号申请详细教程-13810208661
  3. web-log-parser 安装记录
  4. 分布式、高并发、高性能场景(抢购、秒杀、抢票、限时竞答)数据一致性解决方案...
  5. Surface Pro 3 的 USB 和蓝牙设备无法使用的处理方法
  6. 今日头条校招2017.7.21编程3,PM、idea、程序员
  7. 面试了十个应届生九个都是秒杀系统,你确定你们那是秒杀?
  8. 图片择优算法(模糊图片筛选出最清楚的图片) 没有使用第三方库
  9. 牛客网赛码网 输入输出格式 pythonC++
  10. stl如果开o2_打开STL文件的四种最佳方法