[发明专利]改进字符串匹配的方法和系统有效
| 申请号: | 201410681087.3 | 申请日: | 2014-11-21 | 
| 公开(公告)号: | CN104462266B | 公开(公告)日: | 2018-10-23 | 
| 发明(设计)人: | 蒋松林 | 申请(专利权)人: | 北京京东尚科信息技术有限公司 | 
| 主分类号: | G06F17/30 | 分类号: | G06F17/30;G06F17/27 | 
| 代理公司: | 中原信达知识产权代理有限责任公司 11219 | 代理人: | 李宝泉;周亚荣 | 
| 地址: | 100080 北京市海淀区杏石口路6*** | 国省代码: | 北京;11 | 
| 权利要求书: | 查看更多 | 说明书: | 查看更多 | 
| 摘要: | |||
| 搜索关键词: | 改进 字符串 匹配 方法 系统 | ||
提供了一种进字符串匹配的方法和系统。所述方法包括:将文本串和模式串的头部对齐,以从右向左开始比较;根据BM算法的坏字符规则计算预移动距离;根据预移动距离来获取预备坏字符;确定是否扩增移动距离;当确定对移动距离进行扩增时,根据BM算法的坏字符规则计算经扩增的移动距离;根据预移动距离或经扩增的移动距离来移动模式串;以及确定是否继续从右向左比较。
技术领域
本发明涉及信息检索、模式识别、文本挖掘、入侵检测等领域,更具体地涉及一种改进字符串匹配的方法和系统。
背景技术
在当今的信息化时代,网络资源飞速膨胀,在海量数据中找到需要的信息是亟待决绝的问题。字符串匹配是信息检索的核心,匹配的速度直接影响系统检索的性能。因此提高字符串匹配的速度尤为重要。
现有的匹配算法主要有以下三种算法:
顺序匹配算法BF(Brute-Force)。BF算法也称蛮力匹配算法,其采用一个二重循环,顺序匹配模式串。该算法需要将模式串逐一与文本串进行比较,导致产生大量冗余操作,包含过多不必要的比较,效率极低。
前缀匹配算法KMP(Knuth-Morris-Pratt)。KMP算法采用从左至右的匹配方式,通过一个辅助函数跳过失配串,以实现优化。在字符失配时,取消机械的从头比对的方式,而是依据之前的检测信息进行计算,直接跳过不必要的检测,从而减少冗余。
BM(Boyer-Moore)算法。BM算法在进行模式串比对时,采用从右至左的方式,当发现不匹配时,将模式串向右移动。BM不需要对文本串中的字符进行逐一比较,而会跳过其中的某些部分,对于每一次匹配失败,BM算法都能使用失败信息来排除尽可能多的无法匹配的位置。
BM算法的匹配性能优于其余两种算法,因此在实际中最常使用。BM算法采用坏字符和好后缀规则来处理模式串的移动。
坏字符的定义为:如果待搜索的模式串的最后一个字符与字符串中的相对应字符不匹配,则该相对应字符被称为坏字符。
好后缀的定义为:假设两个字符串分别为L、R,R左对齐L能完全匹配,同时R右对齐L也能完全匹配,此时称R是L的一个好后缀。如模式串“EXAMPLE”,其中“E”就是模式串的好后缀。
在BM算法的坏字符规则中,如下来计算后移位数shiftbadcha:
shiftbadcha=m-1-f-S(T[k+m-1-f])
其中,m表示待搜索的模式串的长度;f表示已匹配的字符的数目;k表示模式串头部与文本串的相对位置;S(T[k+m-1-f])表示坏字符上一次在模式串P中出现的位置,并且如果坏字符不存在于模式串中,则S(T[k+m-1-f])值为-1。
在BM算法的好后缀规则中,如下来计算后移的位数shiftgoodsuf:
shiftgoodsuf=P[k+m-1-f]-G(T[k+m-1-f])
其中G是预处理数据,G(T[k+m-1-f])表示好后缀最后出现在模式串中的位置,以及P[k+m-1-f]表示好后缀第一次出现在模式串中的位置。
下面通过一个案例来说明BM算法的过程,假定长度为n=24的字符串T为“HERE ISA SIMPLE EXAMPLE”,待搜索的模式串P为“EXAMPLE”,其长度为m=7。
如图1(a)所示,首先将文本串T和模式串P的头部对齐,从右向左开始比较。
从右向左比较的最大优势是,当最右端的字符不匹配时,剩下的字符可以不用再比较。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京京东尚科信息技术有限公司,未经北京京东尚科信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410681087.3/2.html,转载请声明来源钻瓜专利网。





