AC算法

AC(Aho—Corasiek) 多模式匹配算法

纵然是瞬间 提交于 2019-12-03 15:57:09
简介: AC多模式匹配算法产生于1975年的贝尔实验室,最早使用于图书馆的书目查询程序中。该算法以有限状态自动机(FSA),以及KMP前缀算法 为基础.(有说法: ac自动机是KMP的多串形式,是一个有限自动机) AC定义: AC有限自动机 M 是1个6元组:M =(Q,∑,g,f,qo,F)其中: 1、Q是有限状态集(模式树上的所有节点). 2、∑是有限的输入字符表(模式树所有边上的字符). 3、g是转移函数. 4、f是失效函数,不匹配时自动机的状态转移. 5、qo∈Q是初态(根节点); 6、F量Q是终态集(以模式为标签的节点集). AC有限状态自动机实现: 首先假设模式集合{he,she his,hers}, 输入字符串"ushers": AC自动机算法主要建立三个函数,转向函数goto,失效函数failure和输出函数output(output 构造间杂在goto 构造以及failure构造中); 1、AC有限状态自动机M 操作循环框架: a> 如果g(s,a) = s', 则自动机M 继续调用goto函数,以新状态s',以及新字符x为输入;如果状态s',匹配了某个模式,则输出; b> 如果f(s,a) = failure, 则自动机M 调用failure状态转移f(s) = s',并以状态s',字符a 调用步骤1; 构造M伪代码: 2、构造goto函数及输出函数output