[发明专利]一种基于有限状态自动机的字符串匹配方法及装置有效
申请号: | 200910167292.7 | 申请日: | 2009-09-02 |
公开(公告)号: | CN101639861A | 公开(公告)日: | 2010-02-03 |
发明(设计)人: | 黄凯明 | 申请(专利权)人: | 福建星网锐捷网络有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 北京同达信恒知识产权代理有限公司 | 代理人: | 郭润湘 |
地址: | 350015福建省福*** | 国省代码: | 福建;35 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 有限 状态 自动机 字符串 匹配 方法 装置 | ||
技术领域
本发明涉及检索技术领域,尤指一种基于有限状态自动机(DeterministicFinite State Automaton,DFA)的字符串匹配方法及装置。
背景技术
Aho-Corasick算法于1975年由贝尔实验室的Aho和Corasick在《EfficientString Matching:An Aid to Bibliographic Search》中提出,其核心是一个涵盖所有查询关键字的有限状态自动机(Deterministic Finite State Automaton,DFA)。待搜索的数据库中的每个字符逐个输入到DFA中,当某个查询关键字命中,DFA输出报告。
通过Aho-Corasick算法得到DFA的过程中,需要构造三个函数:GOTO,FAILURE和OUTPUT。构造这三个函数的流程包括:
1.1构造GOTO函数。
该过程需要输入的是:要查询的关键字集合。例如:输入的关键字集合是K={y1,y2,…,yk}。
输出的是:GOTO函数和部分完成的OUTPUT函数。
1.2构造FAILURE函数
该过程需要输入的是:上述过程1.1中得到的GOTO函数及部分完成的OUTPUT函数。
输出的是:FAILURE函数和完成的OUTPUT函数。
1.3构造OUTPUT函数。
该过程将GOTO函数和FAILURE函数进一步合并,得到DFA。
所以该过程输入的是:上述过程1.1中得到的GOTO函数及过程1.2中得 到的FAILURE函数。
输出的是:构造完成的DFA。
DFA中包含了在当前状态、输入字符后所对应的各种可能的下一状态。以及各个状态和命中的关键字的对应关系。当命中某一关键字时,能够及时的输出命中结果。
应用DFA进行字符匹配时,待搜索数据库中的每个字符在DFA中能够触发一次且仅能够触发一次状态转换。所以,Aho-Corasick的算法应用的优势在于其算法复杂度仅与待搜索数据库的长度有关,而与查询关键字的长度及数目都无关。因此,在字符串匹配的各种已有算法中,Aho-Corasick是迄今为止最快的算法。
在实际应用过程中,DFA通常以一维数组的形式存放在系统主内存中。虽然系统在运行过程中,CPU会把在最近几个时间段内经常访问的内容存入高速缓存(Cache);高速缓存即高速缓冲存储器,位于CPU和主存储器DRAM(主内存)之间的存储容量较小但速度很高的存储器。但由于高速缓存容量有限,DFA与系统中其他频繁访问CPU的数据之间存在竞争关系,不能保证访问频度高的部分(或全部)DFA总能驻留在一级数据缓存中,当不在缓存中时则必须到内存中去获取。
所以当使用DFA搜索数据库或者过滤网络数据流时,最坏情况下,可能会出现每输入一个字节,则必须访问一次主内存,才能得到下一个状态。而访问主内存来获取下一个状态会造成很大的时延,导致字符匹配过程的时延很长,严重影响了匹配的速度和效率。因此,频繁的主内存访问已经成为基于DFA搜索的系统整体性能的瓶颈。
发明内容
本发明实施例提供一种基于有限状态自动机的字符串匹配方法及装置,解决现有技术中存在的字符匹配速度慢、时延长的问题。
一种用于内容过滤设备的基于有限状态自动机的字符串匹配方法,包括:
确定用户输入的关键字在设定的关键字组中时,调用所述关键字组对应的有限状态自动机DFA程序代码;所述程序代码为根据采用Aho-Corasick算法针对所述关键字组确定的当前状态、输入字符和输出状态的对应关系预先生成的;
执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态;
根据所述输出状态输出字符匹配结果。
本发明的上述方法,还包括:根据程序代码的允许大小,选取所述DFA中包含的与初始状态具有衍生关系的部分状态,所选取的部分状态的出现频率之和大于设定的阈值;
生成仅包含已选取的部分状态作为当前状态时,输入字符后所对应的输出状态的程序代码。
根据本发明的上述方法,所述程序代码仅包含已选取的部分状态作为当前状态,输入字符后所对应的输出状态时;其余未被选取的状态作为当前状态时,输入字符后所对应的输出状态仍从系统主内存中获取。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于福建星网锐捷网络有限公司,未经福建星网锐捷网络有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910167292.7/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种用实物补偿法控制阻尼的悬臂梁压电结构
- 下一篇:一种牵引型药枕