AC自动机增量更新算法

本文介绍了Aho-Corasick算法,用于多模式匹配,构建AC自动机以提高效率。文章探讨了在模式串数据库频繁更新的情况下,如何通过增量更新算法来避免每次重建自动机,从而减少性能消耗。内容包括模式添加和删除的详细算法过程。
摘要由CSDN通过智能技术生成

AC自动机算法概述

Aho-Corasick算法[1]是多模式匹配中的经典算法,目前在实际应用中较多。Aho-Corasick算法通过将模式串预处理为确定有限状态自动机,这个数据结构是Aho-Corasick自动机,简称AC自动机。模式匹配的时候,只需要扫描文本一遍就能得到所有匹配该文本的模式串,其时间复杂度为O(n),即只跟输入文本长度线性相关,与模式串的数量和长度无关。

在Aho-Corasick算法的原始论文中,描述了自动机构建的过程,包含两个步骤:(1)、首先扫描所有的模式串,构建goto状态转换函数,在实际的程序实现中goto函数实际上是一颗Trie树结构;(2)、利用上一步构建的Trie树,构建failure函数。在模式匹配的过程中,一个个字符的方式扫描待匹配的输入文本,在Trie树中从根节点进行搜索,一旦遇到字符匹配失败的节点,就跳转到failure函数指向的下一个节点继续匹配,直到输入文本扫描完毕,得到匹配的所有模式串。因为failure函数的构建使得匹配失败时可以利用之前匹配的结果,无需从头开始匹配,因此匹配的性能比较好。在实际的应用中,模式串数据库可能量非常巨大,而且会频繁的变化,例如对于网络爬虫的URL黑白名单会频繁更新,在匹配的同时,需要不断重构自动机。显然,一种可行的方案是依照作者在论文中介绍的那样,每次模式串更新,就对自动机从0开始重建,这种方案对于模式库比较小的场景下是可行的,但是模式库数量比较大的时候就不可能,每次重建的性能消耗会比较大。如果能有一种算法能增量式地进行构建,而不是每次推倒重来,将会极大减少模式库更新的性能消耗,也更加符合实际应用场景。

针对AC自动机的动态更新模式库的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值