基于特征值的模式匹配算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
宜宾学院学报 Journal of Yibin University
优先数字出版
—————————————————————— 收稿日期:2014-07-03 2014-09-05 基金项目:安徽电子信息职业技术学院教科研项目“基于数据挖掘技术的高职院校招生决策系统研究与应用”
(ADZX1306)
作者简介:余飞(1983-),男,硕士,讲师,研究方向为计算机网络安全、数据挖掘、分布式操作系统 网络出版时间: 网络出版地址: 基于特征值的模式匹配算法
余 飞,刘思宏
(安徽电子信息职业技术学院 软件学院,安徽蚌埠233060)
摘 要:模式匹配算法广泛应用于防火墙、入侵检测等网络安全领域,其算法效能直接影响到系统的工作效率.本文首次提出了一种基于特征值的模式匹配算法——FLC (First-Last-Characters )算法.该算法打破了经典算法有序偏移的思想,突破了BMHS (Boyer-Moore-Horspool-Sunday )算法最大偏移量(m+1)的上限,从而增大了偏移距离,减
则匹配成功;若有一个字符不同,则匹配不成功,模式串向右移动一个字符的位置,继续比较,直到将文本串的所有位都比较过来.BF 算法实现简单,但模式串每次仅偏移一个字符,这导致模式串几乎要与文本串中的每一个字符进行比较,运行效率极其低下.
KMP 算法[2]是BF 的一种改进算法,该算法由Knuth 等人提出.KMP 算法根据给定的模式串,定义一个next 函数.模式串与文本串按顺序进行从左到右匹配,
2014-09-12 13:00
/kcms/detail/51.1630.Z.20141211.1054.008.html
若匹配不成功,next函数将给出模式串向右移动的位置,即模式串与文本串重新开始比较的起始位.KMP算法的创新之处在于,利用next函数能够科学的计算出模式串偏移距离,解决了BF算法中模式串偏移的盲目性,实现了其大幅度的有序偏移,提高了匹配效率,这为后续研究奠定了基础.
1977年,Boyer和Moore提出了一种著名的单模式匹配算法——BM算法[3-4],该算法使用坏字符规则(Bad Character)和好后缀规则(Good Suffix)来计算模式串右移距离,实现模式串的跳跃式偏移.BM算法效率较BF和KMP算法有显著的提高,也开始投入实用,应用于入侵检测系统,防火墙系统[5]等.此后,对BM算法的改进成为该领域的热门,重要的改进算法有1980年Horspool提出的BMH(Boyer-Moore-Horspool)算法[6]和1990年Sunday提出的BMHS(Boyer-Moore-Horspool-Sunday)算法[7].BMH与BMHS算法的改进集中在模式串与文本串失配后模式串偏移量的计算,减少了匹配次数和消耗时间,匹配效率得到提升.
近几年对模式匹配算法的研究主要集中在对算法的改进与应用上.陈瀛等将数理统计的方法带入模式匹配算法[8],运用抽样统计理论从文本串中采集可能与模式串匹配成功的抽样点,在其周围进行精确匹配.姚亚锋等提出了AC-BM算法[9],该算法结合了AC算法与BM算法两种经典算法的优长,显著提高了效率.刘胜飞,张云泉在BMH算法的基础上提出BMH2算法[10],该算法增加了一个移动距离的特征数组,来辅助模式串进行最大幅度的偏移.
本文在探讨经典算法的基础上,提出一种基于特征值的模式匹配算法——FLC(First-Last-Characters)算法,该算法打破经典算法有序偏移的思想,突破最大偏移量的限制,实现跳跃式偏移,从而减少偏移次数,有效提升匹配效率.1BMHS算法
Horspool提出的BMH算法是对BM算法的简化与改进,而BMHS算法是对BMH算法进一步的改进和优化.BMH和BMHS算法的共同点是,简化了BM算法的好后缀规则,只使用其坏字符规则.而BMHS算法则对坏字符规则进行了进一步的改进与优化,它根据当前与模式串尾字符对齐的文本串中字符的下一个字
设文本串为T[0,1,2……n-1],长度为n;模式串P[0,1,2……m-1],长度为m.BMHS算法的匹配过程:文本串T保持不动,模式串P从左向右移动,移动至T[j]处进行匹配,匹配的顺序是自右向左进行的,即先匹配T[j+m-1]和P[m-1],再比较T[j+m-2]与P[m-2]是否相等……直到比较至T[j]和P[0]处.如果全部相同,则匹配成功;如果在T[i+j]和P[i]处不相等,则使用坏字符规则(设坏字符T[j+m]的值为d):
(1)如果在模式串P中,找到P[k]处值为d.则模式串P向右偏移,让T[j+m]与P[k]对齐,并从模式串末端开始,从右向左继续比较.如图1所示.
图1BMHS算法找到坏字符的偏移情况[11]
Fig.1The deviation case of the bad characters found by the BMHS algorithm[11]
(2)如果在模式串P中,没有找到值为d的字符.则模式串P直接向右偏移m+1位,并从模式串末端开始,从右向左开始新的一轮比较.如图2所示.
图2BMHS算法未找到坏字符的偏移情况[11]
Fig.2The deviation case of the bad characters not found by The BMHS algorithm[11]
BMHS是所有经典算法中,匹配效率较高的算法,其应用成熟而广泛.但BMHS算法也有以下缺陷:
(1)最大偏移量是m+1(未找到坏字符时的偏移量),即偏移量上限是m+1,这意味着,该算法的任何偏移都无法超越该值.
(2)偏移之后,必须进行逐个字符的匹配,这将造成系统资源和时间的浪费,影响匹配效率.
(3)模式串长度越长,在模式串中寻找坏字符的时间消耗就越多,这将延长匹配时间,降低匹配效率.