多模匹配算法之Aho-Corasick

原创 2016年05月30日 20:40:25

背景

除剔除那些含有敏感词的文本,由于有大量的敏感词,所以通过简单的正则表达式和字符串查找的方式效率太低,每次都有遍历一次字符串。而AC算法的核心思想就是避免不必要的回溯使搜索一直沿着向前的方向,最大可能的减小了时间复杂度,时间复杂度O(N),N为所有的字符串的长度,而且关键字的字数和长度无关。

基本思路

该算法核心:字典树的构建及搜索路径的确定
算法动画示例:确实很给力
1. 字典树的构造
就是把你要匹配的敏感词,用树结构来进行表示,树边就是单词中的字符,如下图所示,在单词的最后位置添加连接节点也就是下图中的0。
h

  1. 搜索路径的确定
    1)当前字符匹配,表示从当前节点沿着树边有一条路径可以到达目标字符,此时只需沿该路径走向下一个节点继续匹配即可,目标字符串指针移向下个字符继续匹配

    2) 当前字符无匹配,表示当前节点的任何一条边都无法达到要匹配的字符,此时不能沿现有路径前进,只能回溯,回溯到存在的最长的后缀字符串处,如果没有任何后缀字符串匹配则回溯到树根处。然后从当前回溯节点判断是否可以到达目标字符串字符
    (未完待续)

版权声明:本文为博主原创文章,未经博主允许不得转载。

基于Trie树的多模匹配算法实现和及优化

1.多模匹配算法简介     多模式匹配在这里指的是在"一个字符串"中寻找"多个模式字符字串"的问题。一般来说,给出一个长字串和很多短模式字符串,如何最快最省的求出哪些模式字符串出现在长字串中是我...
  • u010189459
  • u010189459
  • 2014年06月20日 20:47
  • 2760

【模式匹配】之——多模匹配 上篇(AC算法)

from : http://blog.csdn.net/sun2043430/article/details/8821089 前言多模匹配之二维数组法代码多模匹配之二维数组法...
  • yan420523
  • yan420523
  • 2013年05月15日 22:24
  • 1989

计算机网络(第二版)--清华大学出版社课后习题答案

计算机网络(第二版)清华大学出版社课后习题答案 第一章 1.计算机网络的发展可以划分为几个阶段?每个阶段各有什么特点? 答:可以划分为四个阶段: 第一阶段:20世纪50年代-------面向终端   ...
  • ceasar11
  • ceasar11
  • 2013年10月03日 16:47
  • 3296

[转]多模匹配算法与dictmatch实现

来源:http://stblog.baidu-tech.com/?p=418多模式匹配在这里指的是在一个字符串中寻找多个模式字符字串的问题。一般来说,给出一个长字符串和很多短模式字符串,如何最快最省的...
  • heiyeshuwu
  • heiyeshuwu
  • 2013年08月01日 21:21
  • 5144

[转载]多模匹配算法(C++)

  • 2009年07月08日 15:56
  • 390KB
  • 下载

AC多模匹配算法小结

 AC多模匹配算法小结1.AC算法的原理本程序采用了AC的多模匹配方法。Aho_Corasick自动机匹配算法是最著名的多模匹配算法之一。该算法在1975年产生于贝尔实验室。AC自动机匹配算法基于一种...
  • lindan1984
  • lindan1984
  • 2006年12月20日 12:34
  • 7682

C/C++——朴素的模式匹配算法和KMP模式匹配算法

朴素的模式匹配算法其实就是一个一个往下匹配,没有任何优化,在好的情况下时间复杂度为O(n+m),在最求的情况下时间复杂度为O((n-m+1)*m)。 代码实现://在主串s中找子串t,若找到返回字串...
  • sinat_36053757
  • sinat_36053757
  • 2017年04月30日 16:44
  • 355

AC多模匹配算法-测试效率

总结:AC算法对无规则匹配数据和有关联匹配数据影响不是很明显。 无论是有匹配还是无关匹配,大概遍历1G文件都需要10s左右。1G文件中都是0到9的字符。无匹配操作时,单纯遍历1G文件耗时情况[roo...
  • ccy365263452
  • ccy365263452
  • 2016年11月08日 19:16
  • 507

Trie树实现多模匹配算法的进一步优化

之前写过一篇关于Trie树实现多模匹配算法的文章
  • u010189459
  • u010189459
  • 2014年06月20日 23:45
  • 1051

Python算法实践——AC自动机

初来乍到CSDN,如果要说写博客的原因,想想平日学习编程语言看了那么多别人的博客,也该试着自己写一写了。第一次写博客写不知从何下笔,就从最近写的一个自动机开始吧。...
  • backkom_lory
  • backkom_lory
  • 2016年12月26日 23:01
  • 1265
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多模匹配算法之Aho-Corasick
举报原因:
原因补充:

(最多只允许输入30个字)