资料介绍
提出了改进的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拆分字符串
- 利用STM32单片机串口发送字符串
- 串口屏LUA教程6-运算和字符串处理
- C语言编程字符串函数汇总资源下载 9次下载
- LabVIEW的常用字符串操作教程免费下载 27次下载
- 用指针实现字符串拷贝的程序和字符型指针变量与字符数组的区别说明 2次下载
- C语言中的字符串的使用方法详细说明 1次下载
- 如何发送字符串数据详细资料和程序说明
- C语言的字符串处理函数
- 读取字符串的C语言程序免费下载 10次下载
- BM模式匹配算法的研究和改进 0次下载
- 字符串函数测试学习工程
- 信息过滤系统中字符串匹配算法的研究
- 基于网络入侵模式匹配的BM 算法研究与优化The Optim
- 字符串在编程中的应用实例 1.2k次阅读
- 字符串反转的实现方式 1.3k次阅读
- C语言字符串编译函数介绍 1k次阅读
- 字符数组和字符串有没有区别? 1.4k次阅读
- 字符串的相关知识 1.7k次阅读
- 什么是字符串 9.2k次阅读
- C语言字符数组和字符串有什么区别 5.1k次阅读
- 一文详解JavaScript字符串 1.8k次阅读
- 探究字符串模式匹配的高级数据结构和算法 1.6k次阅读
- 平化字符串处理方法简介 3.1k次阅读
- 字符串函数重写练习 2.6k次阅读
- 什么是复制字符串?Python如何复制字符串 3.4k次阅读
- 学习Tcl来这里:字符串匹配 6.4k次阅读
- 字符串移位包含的问题解决方案 1.2k次阅读
- 字符串的KMP算法和BM算法 2.7k次阅读
下载排行
本周
- 1MDD品牌三极管MMBT3906数据手册
- 2.33 MB | 次下载 | 免费
- 2MDD品牌三极管S9012数据手册
- 2.62 MB | 次下载 | 免费
- 3联想flex2-14D/15D说明书
- 4.92 MB | 次下载 | 免费
- 4收音环绕扩音机 AVR-1507手册
- 2.50 MB | 次下载 | 免费
- 524Pin Type-C连接器设计报告
- 1.06 MB | 次下载 | 免费
- 6新一代网络可视化(NPB 2.0)
- 3.40 MB | 次下载 | 免费
- 7MS1000TA 超声波测量模拟前端芯片技术手册
- 0.60 MB | 次下载 | 免费
- 8MS1022高精度时间测量(TDC)电路数据手册
- 1.81 MB | 次下载 | 免费
本月
- 1爱华AIWA HS-J202维修手册
- 3.34 MB | 37次下载 | 免费
- 2PC5502负载均流控制电路数据手册
- 1.63 MB | 23次下载 | 免费
- 3NB-IoT芯片厂商的资料说明
- 0.31 MB | 22次下载 | 1 积分
- 4H110主板CPU PWM芯片ISL95858HRZ-T核心供电电路图资料
- 0.63 MB | 6次下载 | 1 积分
- 5UWB653Pro USB口测距通信定位模块规格书
- 838.47 KB | 5次下载 | 免费
- 6技嘉H110主板IT8628E_BX IO电路图资料
- 2.61 MB | 4次下载 | 1 积分
- 7苏泊尔DCL6907(即CHK-S007)单芯片电磁炉原理图资料
- 0.04 MB | 4次下载 | 1 积分
- 8100W准谐振反激式恒流电源电路图资料
- 0.09 MB | 2次下载 | 1 积分
总榜
- 1matlab软件下载入口
- 未知 | 935137次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420064次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233089次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191439次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183353次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81602次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73822次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65991次下载 | 10 积分
电子发烧友App





创作
发文章
发帖
提问
发资料
发视频
上传资料赚积分
评论