改进字符串匹配的方法和系统技术方案

技术编号:11182986 阅读:82 留言:0更新日期:2015-03-25 12:09
提供了一种进字符串匹配的方法和系统。所述方法包括:将文本串和模式串的头部对齐,以从右向左开始比较;根据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 IS A SIMPLE EXAMPLE”,待搜索的模式串P为“EXAMPLE”,其长度为m=7。如图1(a)所示,首先将文本串T和模式串P的头部对齐,从右向左开始比较。从右向左比较的最大优势是,当最右端的字符不匹配时,剩下的字符可以不用再比较。从图1(a)可以看出,带下划线的“S”与“E”不匹配,这时“S”就被称为坏字符。坏字符“S”不存在于模式串P中,根据坏字符规则shiftbadcha=m-1-f-S(T[k+m-1-f])可确定要后移的位数shiftbadcha=7-1-0-(-1)=7,意味着可将模式串直接移动到“S”的后一位。因此,将变成图1(b)所示的情况。依然从最末位开始比较,发现带下划线的“P”与“E”不匹配。但与之前不同,“P”包含在模式串P中。此时根据坏字符规则shiftbadcha=m-1-f-S(T[k+m-1-f])可确定要后移的位数shiftbadcha=7-1-0-(4)=2,因此将模式串后移两位,使得坏字符“P”与模式串中的“P”对齐。因此,将变成图1(c)所示的情况,继续比较。“MPLE”四个字符匹配,“I”与“A”不匹配,根据坏字符规则,此时根据坏字符规则shiftbadcha=m-1-f-S(T[k+m-1-f])可确定要后移的位数shiftbadcha=7-1-4-(-1)=3,因此向右移动3位,将变成图1(d)所示的情况。然而,由于字符“E”是模式串P的好后缀,因此根据好后缀规则shiftgoodsuf=P[k+m-1-f]-G(T[k+m-1-f]),可以确定要移动的位数shiftgoodsuf=6-0=6。在坏字符规则与好后缀规则两者之间取移动的位数相对大的一个,因此模式串应移动6位,将变成图1(e)所示的情况。继续从尾部比较,发现“P”和“E”不匹配,根据坏字符规则坏字符规则shiftbadcha=m-1-f-S(T[k+m-1-f])可确定要后移的位数shiftbadcha=7-1-0-(4)=2,将变成图1(f)所示的情况。继续比较,最后找到匹配的字符串。BM算法与BF算法、KMP算法相比,匹配效率明显提高,但其仍有缺陷。BM算法需要做坏字符和好后缀的预处理。其中好后缀的预处理开销较大,尤其当模式串很长时,会影响匹配的性能。在进行匹配时,模式串的移动距离影响匹配的速度,所以加快模式串的移动速度是提高匹配效率的关键。因此,期望提供一种改进字符串匹配的方法和系统。
技术实现思路
为了解决现有技术中的上述缺点和问题中的至少一个而提出本发明。基于现有技术存在的缺点,本专利技术提供了一种改进字符串匹配的方法和系统。在本专利技术的方法和系统中,根据BM算法的不足提出了改进,取消了好后缀的预处理过程,仅采用坏字符来作为模式串移动的依据。提出了预备坏字符,预移动处理过程和移动距离扩增的概念。为了增加模式串的移动距离,引进了预移动处理过程,将模式串的匹配过程分为两个阶段:预移动处理过程和移动距离扩增。根据本专利技术的方法和系统不仅节省了好后缀预处理的开销,而且能大幅度的提升匹配效率。根据一个方面,本专利技术提出了一种进字符串匹配的方法,包括:将文本串和模式串的头部对齐,以从右向左开始比较;根据BM算法的坏字符规则计算预移动距离;根据预移动距离来获取预备坏字符;确定是否扩增移动距离;当确定对移动距离进行扩增时,根据BM算法的坏字符规则计算经扩增的移动距离;根据预移动距离或经扩增的移动距离来移动模式串;以及确定是否继续从右向左比较。可选地,可以通过以下公式来计算预移动距离shiftpre:shiftpre=m-1-f-S(T[k+m-1-f])其中,m表示待搜索的模式串的长度;f表示已匹配的字符的数目;k表示模式串头部与文本本文档来自技高网
...

【技术保护点】
一种改进字符串匹配的方法,包括:将文本串和模式串的头部对齐,以从右向左开始比较;根据BM算法的坏字符规则计算预移动距离;根据预移动距离来获取预备坏字符;确定是否扩增移动距离;当确定对移动距离进行扩增时,根据BM算法的坏字符规则计算经扩增的移动距离;根据预移动距离或经扩增的移动距离来移动模式串;以及确定是否继续从右向左比较。

【技术特征摘要】
1.一种改进字符串匹配的方法,包括:
将文本串和模式串的头部对齐,以从右向左开始比较;
根据BM算法的坏字符规则计算预移动距离;
根据预移动距离来获取预备坏字符;
确定是否扩增移动距离;
当确定对移动距离进行扩增时,根据BM算法的坏字符规则计算
经扩增的移动距离;
根据预移动距离或经扩增的移动距离来移动模式串;以及
确定是否继续从右向左比较。
2.根据权利要求1所述的方法,其中通过以下公式来计算预移动
距离shiftpre:
shiftpre=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。
3.根据权利要求1所述的方法,其中通过以下公式来获取预备坏
字符PREbadchar:
PREbadchar=T[(k+m-1-f)+m-1-S(T[k+m-1-f])]
其中,m表示待搜索的模式串的长度;f表示已匹配的字符的数目;
k表示模式串头部与文本串的相对位置;T(n)表示待匹配的文本串,长
度为n;S(T[k+m-1-f])表示坏字符上一次在模式串P中出现的位置,
并且如果坏字符不存在于模式串中,则S(T[k+m-1-f])值为-1。
4.根据权利要求1所述的方法,其中确定是否扩增移动距离包括:
将预备坏字符PREbadchar与字符P[m-1]进行比较;
当二者匹配时,确定不扩增移动距离;以及
当二者不匹配时,确定对移动距离进行扩增。
5.根据权利要求1所述的方法,其中通过以下公式来计算经扩增
的移动距离shift:
shift=shiftpre+(m-1)-S(PREbadchar),
其中shiftpre表示预移动距离,S(PREbadchar)表示预备坏字符PREbadchar上一次在模式串中出现的位置。
6.一种改进字符串匹配的系统,包括:
初始化模块,用于将文本串和模式串的头部对齐以从右向左开始...

【专利技术属性】
技术研发人员:蒋松林
申请(专利权)人:北京京东尚科信息技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1