一种字符串模式匹配的方法与流程

文档序号:11177441阅读:535来源:国知局
一种字符串模式匹配的方法与流程

本发明涉及字符串检索技术领域,具体为一种字符串模式匹配的方法。



背景技术:

字符串检索在现实生活中有广泛的应用。如何高效的从一大段文本中定位到自己想查找的内容是很有必要的。如今也有一些算法,如kmp算法、horspool算法、boyer-moore算法等为大家熟知。而每种算法的时间复杂度根据具体情况的不同而不同,但最终的目的都是用最少的步骤,检索到内容。也就是当每次没有匹配到要检索的字符串时,尽可能忽略更多的字符继续向后检索。

kmp算法是从左到右的匹配过程,在很多情况下不如从右到左的匹配高效。从右到左的匹配过程中有很大的概率第一个字符就不匹配,这时就可以移动模式串长度+1个位置继续匹配。

boyer-moore算法的好后缀方法具体实现的时候比较繁琐。

horspool算法改进了boyer-moore算法的坏字符方法,但是比较单一,有时不能达到较好的移动模式串的效果。



技术实现要素:

本发明的目的在于提供一种字符串模式匹配的方法,高效的检索字符串,提升用户体验,以解决上述背景技术中提出的问题。

为实现上述目的,本发明提供如下技术方案:一种字符串模式匹配的方法,包括以下步骤:

s1:假设:文本串x为:x1x2x3……xn,模式串y为:y1y2y3……ym,其m、n均为正整数;

s2:分析y在x中首次出现的位置p,若y没有出现在x中,则结果p=0,否则p应该应满足条件:p>=1且p<n-m+1;

s3:由s2得:

s2.1:若n<m则p=0;

s2.2:若n=m,依次比较xn与ym,xn-1与ym-1……x1与y1,出现有比较不相等,则可停止比较;p=1当且仅当所有的比较都相等,否则p=0;

s2.3:若n>m,假设此时y与x的子集x’:xk-m+1xk-m+2……xk对齐,如下:

x1x2……xk-mxk-m+1xk-m+2……xkxk+1……xn

y1y2……ym

其中k>=m且k<=n,依次比较xk与ym,xk-1与ym-1……xk-m+1与y1;

s2.4:由s2.3得:

s2.3.1:若xk!=ym,其xk与ym不相等,设y的子串y’:y1y2……ym-1,从右到左查找xk在y’中的位置p’,找到后即可停止查询;分为以下分析步骤:

s2.3.1.1:若p’=0,即xk不在y’中,则可使y右移m个位置,使y与x的子集x”:xk+1xk+2……xk+m对齐,如下:

x1x2……xk-1xkxk+1xk+2……xk+mxk+m+1……xn

y1y2……ym

若k+m>n,则p=0;

若k+m=n,则依次比较xn与ym,xn-1与ym-1……xk+1与y1,若有比较不相等,则可停止比较,p=n-m+1当且仅当所有的比较都相等,否则p=0;

若k+m<n,则令x’=x”,k=k+m,重复步骤s2.3.1;

s2.3.1.2:若p’!=0,即xk在y中,从ym-1开始,从右到左查找xk,找到即可停止查询;设xk==yj,j>=1且j<m,此时可右移y,使得xk与yj对齐,如下:

x1x2……xk-j+1xk-j+2……xkxk+1xk+2……xk+m-j……xn

y1y2……yjyj+1yj+2……ym

此时可移动y的位置为m-j个字符,令x’:xk-j+1xk-j+2……xkxk+1xk+2……xk+m-j,k=k+m-j,重复步骤s2.3.1;

s2.3.2:若x’与y从右到左比较有i,其i为正整数且i<=m个字符相等;

s2.3.2.1:若i=m,则p=k-m+1;

s2.3.2.2:若i<m,即x1+k-ix2+k-i……xk==y1+m-iy2+m-i……ym且xk-i!=ym-i,则y中剩余为比较的字符串为:y’:y1y2……ym-i-1。;

s2.3.2.2.1:若m-i=1,则y’不存在,此时设y”:y1y2……ym-1,从右到左查找xk在y”中的位置;

s2.3.2.2.1.1:如果xk不在y”中则可移动y串m个字符的位置,使得y1与xk+1对齐,结果如下:

x1x2……xkxk+1xk+2……xk+m-1……xn

y1y2……ym

若k+m-1>n,则p=0,否则令x’:xkxk+1xk+2……xk+m-1,k=k+m-1,重复步骤s2.3.1:

s2.3.2.2.1.2:如果xk在y”中,在y”中从右到左查询xk,找到即停止查寻,假设xk=yj,则可向右移动y串m-j个字符的位置,使得yj与xk对齐,如下:

x1x2……xk-j+1xk-j+2……xkxk+1……xk+m-j……xn

y1y2……yjyj+1……ym

若k+m-j>n,则p=0,否则令x’:xk-j+1xk-j+2……xkxk+1……xk+m-j,k=k+m-j,重复步骤s2.3.1;

s2.3.2.2.2:若m-i>1,则y’存在,令y”:y1y2……ym-i-1;

s2.3.2.2.2.1:首先从右到左查找xk-i在y”中的位置,找到即停止查询;若xk-i不在y”中,则y可向右移动的距离为m1=m-i+1,使得y1与xk-i+1对齐,如下:

x1x2……xk-i-1xk-i+1xk-i+2……xk-1xkxk+1……xk+m-i……xn-1xn

y1y2……yi-1yiyi+1……ym

若在y”找到yj,其j>=1且j<=m-i-1,使得xk-i=yj,则y可向右移动的距离为m1=m-i-j,使得xk-i与yj对齐,如下:

x1x2……xk-i-j+1xk-i-j+2……xk-i-1xk-ixk-i+1……xk-i-j+mxk-i-j+m+1……xn

y1y2……yj-1yjyj+1……ym

s2.3.2.2.2.2:其次从右到左查找xk在y”’:y1y2……ym-1中的位置,找到即停止查询;同从右到左查找xk-i在y”中的位置一样,此时设y可向右移动的距离为m2,取m=max(m1,m2),即为y可向右移动的距离;

若k+m>n,则p=0,否则向右移动ym个字符的距离,即有如下对齐方式:

x1x2……xk+m-mxk+m-m+1xk+m-m+2……xk+mxk+m+1……xn

y1y2……ym

令x’:xk+m-m+1xk+m-m+2……xk+m,k=k+m,重复执行步骤s2.3.1。

优选的,所述方法用于检索模式串首次出现在文本串中的位置,其与文本串中检索出所有模式串的方法一样。

优选的,所述步骤s2.3.2.2.2.2中,m1为坏字符移动规则取得,m2为尾字符移动规则取得,m1与m2的最大值即为模式串可移动的最大距离。

与现有技术相比,本发明的有益效果是:

本字符串模式匹配的方法,相比于传统的kmp算法、horspool算法和boyer-moore算法,能够更快速的定位模式串在文本串中出现的位置,具有高效的检索字符串功能,从而提升用户体验。

附图说明

图1为本发明整体结构流程图;

图2为本发明a部放大图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1-2,本发明实施例中:一种字符串模式匹配的方法,该方法只检索模式串首次出现在文本串中的位置,要从文本串中检索出所有的模式串,方法一样;完整的方案如下:

第一步:假设:文本串x为:x1x2x3……xn,模式串y为:y1y2y3……ym,其m、n均为正整数;

第二步:分析y在x中首次出现的位置p,若y没有出现在x中,则结果p=0,否则p应该应满足条件:p>=1且p<n-m+1;

第三步:由第二步得:

(2.1):若n<m则p=0;

(2.2):若n=m,依次比较xn与ym,xn-1与ym-1……x1与y1,出现有比较不相等,则可停止比较;p=1当且仅当所有的比较都相等,否则p=0;

(2.3):若n>m,假设此时y与x的子集x’:xk-m+1xk-m+2……xk对齐,如下:

x1x2……xk-mxk-m十1xk-m+2……xkxk+1……xn

y1y2……ym

其中k>=m且k<=n,依次比较xk与ym,xk-1与ym-1……xk-m+1与y1;

(2.4):由(2.3)得:

(2.3.1):若xk!=ym,其xk与ym不相等,设y的子串y’:y1y2……ym-1,从右到左查找xk在y’中的位置p’,找到后即可停止查询;分为以下分析步骤:

第一步:若p’=0,即xk不在y’中,则可使y右移m个位置,使y与x的子集x”:xk+1xk+2……xk+m对齐,如下:

x1x2……xk-1xkxk+1xk+2……xk+mxk+m+1……xn

y1y2……ym

若k+m>n,则p=0;

若k+m=n,则依次比较xn与ym,xn-1与ym-1……xk+1与y1,若有比较不相等,则可停止比较,p=n-m+1当且仅当所有的比较都相等,否则p=0;

若k+m<n,则令x’=x”,k=k+m,重复步骤(2.3.1);

第二步:若p’!=0,即xk在y中,从ym-1开始,从右到左查找xk,找到即可停止查询;设xk==yj,j>=1且j<m,此时可右移y,使得xk与yj对齐,如下:

x1x2……xk-j+1xk-j+2……xkxk+1xk+2……xk+m-j……xn

y1y2……yjyj+1yj+2……ym

此时可移动y的位置为m-j个字符,令x’:xk-j+1xk-j+2……xkxk+1xk+2……xk+m-j,k=k+m-j,重复步骤s2.3.1;

(2.3.2):若x’与y从右到左比较有i,其i为正整数且i<=m个字符相等;

若i=m,则p=k-m+1;

若i<m,即x1+k-ix2+k-i……xk==y1+m-iy2+m-i……ym且xk-i!=ym-i,则y中剩余为比较的字符串为:y’:y1y2……ym-i-1。;分为以下分析步骤:

第一步:若m-i=1,则y’不存在,此时设y”:y1y2……ym-1,从右到左查找xk在y”中的位置;

如果xk不在y”中则可移动y串m个字符的位置,使得y1与xk+1对齐,结果如下:

x1x2……xkxk+1xk+2……xk+m-1……xn

y1y2……ym

若k+m-1>n,则p=0,否则令x’:xkxk+1xk+2……xk+m-1,k=k+m-1,重复步骤s2.3.1:

如果xk在y”中,在y”中从右到左查询xk,找到即停止查寻,假设xk=yj,则可向右移动y串m-j个字符的位置,使得yj与xk对齐,如下:

x1x2……xk-j+1xk-j+2……xkxk+1……xk+m-j……xn

y1y2……yjyj+i……ym

若k+m-j>n,则p=0,否则令x’:xk-j+1xk-j+2……xkxk+1……xk+m-j,k=k+m-j,重复步骤s2.3.1;

第二步:若m-i>1,则y’存在,令y”:y1y2……ym-i-1;

首先从右到左查找xk-i在y”中的位置,找到即停止查询;若xk-i不在y”中,则y可向右移动的距离为m1=m-i+1,使得y1与xk-i+1对齐,如下:

x1x2……xk-i-1xk-i+1xk-i+2……xk-1xkxk+1……xk+m-i……xn-1xn

y1y2……yi-1yiyi+1……ym

若在y”找到yj,其j>=1且j<=m-i-1,使得xk-i=yj,则y可向右移动的距离为m1=m-i-j,使得xk-i与yj对齐,如下:

x1x2……xk-i-j+1xk-i-j+2……xk-i-1xk-ixk-i+1……xk-i-j+mxk-i-j+m+1……xn

y1y2……yj-1yjyj+i……ym

其次从右到左查找xk在y”’:y1y2……ym-1中的位置,找到即停止查询;同从右到左查找xk-i在y”中的位置一样,此时设y可向右移动的距离为m2,取m=max(m1,m2),即为y可向右移动的距离;m1为坏字符移动规则取得,m2为尾字符移动规则取得,m1与m2的最大值即为模式串可移动的最大距离;

若k+m>n,则p=0,否则向右移动ym个字符的距离,即有如下对齐方式:

x1x2……xk+m-mxk+m-m+1xk+m-m+2……xk+mxk+m+1……xn

y1y2……ym

令x’:xk+m-m+1xk+m-m+2……xk+m,k=k+m,重复执行步骤(2.3.1)。

由上述步骤可得,本发明的字符串模式匹配的方法,相比于传统的kmp算法、horspool算法和boyer-moore算法,能够更快速的定位模式串在文本串中出现的位置,具有高效的检索字符串功能,从而提升用户体验。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1