改进AC算法用于多模式匹配和检测非连续子序列

Posted xiaojieshisilang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了改进AC算法用于多模式匹配和检测非连续子序列相关的知识,希望对你有一定的参考价值。

一、背景

AC算法进行多模式匹配的原理文章是1975年的Efficient string matching: an aid to bibliographic search一文。

对该算法进行比较好解释的网络文章是:https://blog.csdn.net/lemon_tree12138/article/details/49335051

但是,该算法无法完成非连续子序列的多模式匹配查找

AC算法的优势是降低计算复杂度,对目标序列进行一次扫描,即可查找所有匹配到的模式。

二、我的改进算法:

以字符串“uhiteeceh”为例,设定需要匹配的模式串为“it/hit/ice/itch”,传统的AC算法构造的自动机如下图所示。具体过程可以见前述背景中的论文和网文。由于检测的是连续子序列,可以在“uhiteeceh”中检测到两种模式“it/hit”。而对于另外两种模式“ice/itch”,则无法查找。

技术图片

 

为了检测非连续子序列,我提出了改进算法。保留AC算法的Success表,去除AC算法的Failure表。算法流程图如下:

技术图片

仍以字符串“uhiteeceh”为例,设定需要匹配的模式串为“it/hit/ice/itch”,但是查找非连续子序列,过程如下:

技术图片

以上是关于改进AC算法用于多模式匹配和检测非连续子序列的主要内容,如果未能解决你的问题,请参考以下文章

字符串处理:布鲁特--福斯算法

算法AC自动机/AC算法 - 多模式串快速匹配

数据结构与算法简记--多模式字符串匹配AC自动机

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

AC算法—有限自动机的多模式匹配

c_cpp 编写一个函数来检查给定字符串是否与给定模式匹配为非连续子字符串:即,模式中的所有字符