资料介绍
提出了改进的AC-BM算法,将待匹配的字符串集合转换为一个类似于Aho-Corasick算法的树状有限状态自动机。匹配时,采取自后向前的方法,并借用BM算法的坏字符跳转和好前缀跳转技术。改进的AC-BM算法借助BMH算法思想,取消了原AC-BM算法的好前缀跳转,并对坏字符跳转部分的计算进行优化。新算法修改了skip的计算方法,不再保留每个节点的好前缀跳转参数及坏字符跳转参数,因此匹配只与当前匹配字符有关,而与当前节点无关,可以实现大小写正文的识别。
关 键 词 算法; 字符串匹配; 内容分析; 入侵检测
Abstract ACBM is a Boyer-Moore like algorithm applied to a set of keywords held in an Aho-Corassick like keyword tree that overlays common prefixes of the keywords. The algorithm takes the best characteristics of both the Boyer-Moore and Aho-Corasick. Based on the idea of Boyer-Moore-Horspool, we make an improvement to AC-BM algorithm. In the improved version, the Good Prefix Shift is not performed, the Bad Character Shift function is improved, the Goto procedure is also modified which do not keep the parameters of Good Prefix Shift and Bad Character Shift.
Key words algorithm; string matching; content analysis; intrusion detection
字符串匹配是指在文本Textt=t1t2…tn中检索子串Patp=p1p2…pm的所有出现。字符串匹配可分为单字符串匹配和字符串集合匹配两种。单字符串匹配算法最著名的是KMP(Knuth-Morris-Pratt)算法和BM(Boyer-Moore)算法。KMP算法实现了无回溯匹配,字符串中的每个字符只匹配一次,时间复杂度为O(n+m)[1];BM算法采用跳跃方式,匹配时跳过不需匹配的字符,最优情况下的时间复杂度为O(n/m),平均情况下也大大优于KMP算法[2];文献[3]取掉BM算法的好后缀试探(Good Suffix Heuristic),形成BMH(Boyer-Moore-Horspool)算法,实验证明BMH算法性能在自然语言环境下比原始BM算法还要好。
字符串集合匹配是从文本Text中一次查找多个字符串P1,P2,…,Pm的所有出现,最经典的是AC(Aho and Corasick)算法。该算法将待匹配的多个字符串转换为树状有限状态自动机,然后进行扫描匹配,最优情况和平均情况的时间复杂度都为O(n)[4];文献[5]提出了一种类似于AC和BM的算法,即Aho-Corasick_Boyer-Moore(AC_BM)混合算法。该算法根据包过滤的规则前缀共同信息较多的特点,采取自后向前的搜索方法,因此在速度方面具有较高的优越性[6]。
本文对AC-BM算法提出改进,并根据BMH算法的思想,取消好前缀跳转(Good Prefix Shift),测试结果表明,该算法在数据包过滤、内容分析与审计等应用中,优于AC-BM算法。
1 AC-BM算法描述
AC-BM算法将待匹配的字符串集合转换为一个类似于Aho-Corasick算法的树状有限状态自动机,但构建时不是基于字符串的后缀而是前缀。匹配时,采取自后向前的方法,并借用BM算法的坏字符跳转(BadCharacter Shift)和好前缀跳转(Good Prefix Shift)技术。
坏字符跳转即当字符串树中的字符与被匹配内容x失配时,将字符串树跳转到下一个x的出现位置,如果x的字符串树不存在,则将字符串树向左移动字符串树的最小字符串长度。好前缀跳转即当字符串树中的字符与被匹配内容x失配时,将字符串树跳转到字符串树中一个与被测正文部分等同的位置。这个等同部分可以是字符串树中某字符串的子串(子串跳转),也可以是一个字符串的后缀(后缀跳转)。
例如,设有规则ethernetmovesme,ethernetisking,ethernetisdead和ethernetforever,要检查的数据包内容为nothingtoworryaboutinthis。首先,构造字符串有限状态自动机,如图1a。匹配从字符r开始,显然r与e不匹配,由于字符串树中下一个r出现在深度5的位置,字符串树的最小字符串长度为14,根据坏字符跳转,字符串树可以安全向左移动5个字符,如图1b。
- 字符串操作 2次下载
- strtok拆分字符串
- Labview中字符串和ASCII之间的相互转换的VI源码分享 98次下载
- 利用STM32单片机串口发送字符串
- 串口屏LUA教程6-运算和字符串处理
- C语言编程字符串函数汇总资源下载 9次下载
- LabVIEW的常用字符串操作教程免费下载 26次下载
- 用指针实现字符串拷贝的程序和字符型指针变量与字符数组的区别说明 2次下载
- C语言中的字符串的使用方法详细说明 1次下载
- C语言的字符串处理函数
- 读取字符串的C语言程序免费下载 10次下载
- BM模式匹配算法的研究和改进 0次下载
- 字符串函数测试学习工程
- 信息过滤系统中字符串匹配算法的研究
- 基于网络入侵模式匹配的BM 算法研究与优化The Optim
- 字符串在编程中的应用实例 118次阅读
- 字符串反转的实现方式 169次阅读
- C语言字符串编译函数介绍 532次阅读
- 字符串的相关知识 1173次阅读
- 什么是字符串 6408次阅读
- C语言字符数组和字符串有什么区别 3811次阅读
- 一文详解JavaScript字符串 1234次阅读
- 探究字符串模式匹配的高级数据结构和算法 1000次阅读
- 平化字符串处理方法简介 2294次阅读
- 字符串函数重写练习 2014次阅读
- 什么是复制字符串?Python如何复制字符串 3036次阅读
- 学习Tcl来这里:字符串匹配 5612次阅读
- python字符串拼接方式了解 1041次阅读
- 字符串移位包含的问题解决方案 1054次阅读
- 字符串的KMP算法和BM算法 2442次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1490次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 93次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 11次下载 | 免费
- 6100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 7基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
- 8基于单片机的红外风扇遥控
- 0.23 MB | 3次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30320次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537791次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
评论