CN108920483B - 基于后缀数组的字符串快速匹配方法 - Google Patents
基于后缀数组的字符串快速匹配方法 Download PDFInfo
- Publication number
- CN108920483B CN108920483B CN201810398497.5A CN201810398497A CN108920483B CN 108920483 B CN108920483 B CN 108920483B CN 201810398497 A CN201810398497 A CN 201810398497A CN 108920483 B CN108920483 B CN 108920483B
- Authority
- CN
- China
- Prior art keywords
- string
- character
- pattern
- text
- suffix
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种基于后缀数组的字符串快速匹配方法。该方法包括两个阶段,第一个阶段首先利用二分查找将模式串在文本串中的出现位置限定在以模式串的首字符为起始字符的后缀数组可能存在的区间内;第二个阶段再在这个区间上进一步限定查找条件,排除长度小于模式串以及末位字符与模式串末位字符不同的后缀,以减少字符的比较次数同时缩小了字符串匹配的范围,进而快速地得到模式串在文本串中的出现位置。
Description
技术领域
本发明涉及计算机技术领域下的自然语言处理技术领域。尤其涉及一种文本中时间信息的处理方法。
背景技术
字符串匹配又叫模式匹配,是广泛应用于信息检索、入侵检测、计算生物学、搜索引擎、数据压缩等领域的一项关键技术。所谓模式匹配问题,指的是查找某个特定模式串P=p1p2…pm在文本串T=t1t2…tn中的所有出现位置及出现的次数。根据研究领域和研究对象的不同,模式匹配问题可以分为大致分为以下四种:精确字符串匹配、扩展字符串匹配、正则表达式匹配和近似字符串匹配。后缀数组是一个有序的整型数组,是字符串处理中的有力工具,并以其实现简单,空间占用量小等优点而比后缀树更为实用。
给定一个长度为n的字符串T=t1t2…tn,位置i上文本记作T[i]=ti,后缀是指从某个位置i开始到整个串结尾的一个特殊子串,即为T[i,n]=titi+1…tn,亦表示为Suffix(i)。后缀数组SA是一个一维整型数组,保存了1到n的某个排列SA[1],SA[2],…SA[n],并且保证Suffix(SA[i])<Suffix(SA[i+1]),其中i<n。相对于传统的字符串匹配方法而言,基于后缀数组的模式匹配方法是另一种解决字符串匹配问题的思路。现有的基于后缀数组的字符串匹配方法,一般通过对后缀数组进行两次折半查找来确定模式串在文本串中的出现位置。在将模式串与文本串中子串进行匹配的过程中,现有方法直接对整个模式串进行匹配,这样对于字符串中前缀相同而后缀不同、后缀相同而前缀不同的情况而言,会造成大量无效的字符比较,增加了匹配时间。
在中国发明专利说明书CN 2201410725893.6中公开了一种文本序列数据中快速查找特征字符串的方法,在查找过程中在后缀数组中搜索时通过二分查找进行分解,按照后缀矩阵的行数,每行进行查找,若某个字段在二分查找的结果集中出现了指定次数之后,通过计算两个字段的相似度,最接近的字段就认为是个候选字段。但是该发明没有利用后缀数组文本的特征来减少字符串匹配时间。
在中国发明专利说明书CN 201410368238.X中公开了一种基于后缀数组的模糊串联重复序列识别方法,在CN 201710224648.0中公开了一种基于后缀数组的短信查找方法及***,与本发明的目的及方法都不相似。
发明内容
本发明所要解决的技术问题是现有的基于后缀数字的字符串匹配方法搜索效率不高的问题,提出一种基于后缀数组的字符串快速匹配方法,即快速找到模式P在文本T中出现的次数。
为实现上述目的,本发明提供了一种基于后缀数组的字符串快速匹配方法,该方法包括如下步骤:
1)建立关于文本串T的后缀数组SA,然后再对后缀数组SA进行二分查找将模式串P在文本串T中的出现位置限定在以模式串P的首字符为起始字符的后缀数组区间内[sp,ep],其中sp表示文本串T中与模式串P首字符相同的后缀的可能的起始位置,ep表示文本串T中与模式串P首字符相同的后缀的可能结束的位置;
2)在步骤1)所得到的区间上排除长度小于模式串P以及末位字符与模式串P末位字符不同的后缀,进而得到模式串P在文本串T中的出现位置。
进一步地,所述步骤1)包括如下步骤:
101)输入长度为m的模式文本P,长度为n的文本T,后缀数组SA;
102)初始化临时变量sp=1,st=n+1,其中sp表示文本串T中与模式串P首字符相同的后缀的可能的起始位置;
103)如果sp不小于st则执行步骤106);
104)进行折半定位,临时变量s=(sp+st)/2;
105)判断模式P的第一个字符是否小于T中第SA[s]个字符,如果小于则sp=s+1,否则st=s;然后执行步骤103);
106)初始化临时变量ep=sp-1,et=n,其中ep表示文本串T中与模式串P首字符相同的后缀的可能结束的位置;
107)如果ep不小于et则执行步骤110);
108)进行折半定位,临时变量e=(ep+et)/2;
109)判断模式P的第一个字符是否小于T中第SA[e]个字符,如果小于则ep=e,否则et=e–1,然后执行步骤107);
110)输出[sp,ep]。
进一步地,所述步骤2)包括如下步骤:
201)输入长度为m的模式文本P,长度为n的文本T,后缀数组SA和步骤1)获取的sp及ep;
202)初始化临时变量i=sp,计数器occ=0;
203)如果i不小于ep则执行步骤209);
204)判断当前位置i相关的字符串长度是否小于模式串P或者末位字符与模式串末位字符是否同的后缀,即是否满足n-SA[i]<m或者T[SA[i]+m]≠P[m],如果满足则执行步骤208);
205)判断当前位置i相关的字符串是否与模式P相等,即判断P是否与T[SA[i],SA[i]+m]相等,如果相等则执行步骤207);
206)判断当前位置i相关的字符串是否大于模式P,即判断P是否小于T[SA[i],SA[i]+m],如果满足条件,满足条件则执行步骤210),否则执行步骤208);
207)找到一个匹配,匹配计数器occ加1;
208)临时循环变量i加1,然后执行步骤203);
209)输出匹配数量occ。
本发明的有益效果:本发明首先将模式串P在文本串T中的出现位置限定在以模式串的首字符为起始字符的后缀数组区间内,然后在这个区间上进一步限定查找条件,排除长度小于模式串以及末位字符与模式串末位字符不同的后缀,可以减少字符的比较次数同时缩小了字符串匹配的范围,进而快速地得到模式串在文本串中的出现位置。本发明的匹配速度优与现有的方法,本发明近似匹配搜索的时间复杂度为O(logn),精确匹配搜索的时间复杂度为O(m*occ),其中occ指的是P在T中的出现次数,所以本发明的总时间复杂度为O(m*occ+logn)。
附图说明
图1是本发明实施例基于后缀数组的字符串快速匹配方法的流程图;
图2是本发明实施例基于后缀数组的字符串快速匹配方法的近似匹配方法流程图;
图3是本发明实施例基于后缀数组的字符串快速匹配方法的精确匹配方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,下面将结合发明实施例中的附图,对发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是发明一部分实施例,而非全部的实施例。基于发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于发明保护的范围。
图1是本发明基于后缀数组的字符串快速匹配方法的流程图。
本发明目的是快速找到模式P在文本T中出现的次数,首先采用现有技术建立关于文本T的后缀数组SA,然后查找P在后缀数组SA中出现的次数,即完成搜索。如图1所示,本发明实施例分为两个步骤,101步骤为近似搜索,102步骤为精确匹配。
为了进行匹配,在步骤101中首先采用现有技术建立关于文本T的后缀数组SA,再对后缀数组进行二分搜索求得模式串P在文本串T中出现位置范围。然后在步骤102中利用文本中大量前缀相同而后缀不同,或后缀相同而前缀不同的规律,加强匹配条件,过滤掉文本串中首末字符与模式串首末字符不完全匹配的字符,同时对于长度小于模式串长度的后缀也予以排除来进行快速匹配。
本发明实施例发现所有以模式文本P为前缀的后缀在后缀数组SA中是字典顺序连续的,这样就可以在后缀数组的某个区间中通过二分搜索方法来搜索以P为前缀的后缀,进而完成匹配搜索。匹配方法分为两个步骤,步骤101为近似匹配,利用二分搜索算法对后缀数组进行搜索,确定P在T中可能出现的范围。正向的二分搜索确定文本串T中与模式串P首字符相同的后缀的起始位置sp,反向的二分搜索确定以P为前缀的后缀在后缀数组SA中的结束位置ep。则区间SA[sp,ep]会包含所有以P为前缀的后缀,第一个阶段输出模式文本P可能存在的区间[sp,ep]。
步骤102为精确匹配,利用步骤101的结果,在后缀数组的区间[sp,ep]中排除长度小于模式串长度以及末尾字符与P末尾字符不相同的后缀,进而精确确定P在T中每一次出现的位置,即再在首字符相同的前提下过滤掉长度和末位字符不符合条件的后缀,进一步缩小查找范围。在搜索过程中,一旦发现大于P的子串,则搜索立即停止。在精确匹配中每找到一个匹配则计数器occ加1,最后输出匹配的数量。
图2是本发明实施例基于后缀数组的字符串快速匹配方法中第一阶段的流程图,第一阶段用来找到模式P在后缀数组SA中的可能的范围。其步骤如下:
201)输入长度为m的模式文本P,长度为n的文本T,后缀数组SA;
202)初始化临时变量sp=1,st=n+1,其中sp表示文本串T中与模式串P首字符相同的后缀的可能的起始位置;
203)如果sp不小于st则执行步骤206);
204)进行折半定位,临时变量s=(sp+st)/2;
205)判断模式P的第一个字符是否小于T中第SA[s]个字符,如果小于则sp=s+1,否则st=s;然后执行步骤203);
206)初始化临时变量ep=sp-1,et=n,其中ep表示文本串T中与模式串P首字符相同的后缀的可能结束的位置;
207)如果ep不小于et则执行步骤210);
208)进行折半定位,临时变量e=(ep+et)/2;
209)判断模式P的第一个字符是否小于T中第SA[e]个字符,如果小于则ep=e,否则et=e–1,然后执行步骤207);
210)输出[sp,ep]。
第一个阶段找到了模式串P在后缀数组SA中的范围,然后进行第二阶段的精确匹配。
图3是本发明实施例基于后缀数组的字符串快速匹配方法中第二阶段的精确匹配过程,其步骤如下:
301)输入长度为m的模式文本P,长度为n的文本T,后缀数组SA和第一阶段的结果sp及ep;
302)初始化临时变量i=sp,计数器occ=0;
303)如果i不小于ep则执行步骤309);
304)判断当前位置i相关的字符串长度是否小于模式串P或者末位字符与模式串末位字符是否同的后缀,即是否满足n-SA[i]<m或者T[SA[i]+m]≠P[m],如果满足则执行步骤308);
305)判断当前位置i相关的字符串是否与模式P相等,即判断P是否与T[SA[i],SA[i]+m]相等,如果相等则执行步骤307);
306)判断当前位置i相关的字符串是否大于模式P,即判断P是否小于T[SA[i],SA[i]+m],如果满足条件,满足条件则执行步骤310),否则执行步骤308);
307)找到一个匹配,匹配计数器occ加1;
308)临时循环变量i加1,然后执行步骤303);
309)输出匹配数量occ。
本发明首先将模式串P在文本串T中的出现位置限定在以模式串的首字符为起始字符的后缀数组区间内,然后在这个区间上进一步限定查找条件,排除长度小于模式串以及末位字符与模式串末位字符不同的后缀,可以减少字符的比较次数同时缩小了字符串匹配的范围,进而快速地得到模式串在文本串中的出现位置。本发明的匹配速度优于现有的方法,本发明近似匹配搜索的时间复杂度为O(logn),精确匹配搜索的时间复杂度为O(m*occ),其中occ指的是P在T中的出现次数,所以本发明的总时间复杂度为O(m*occ+logn),具有匹配速度快和匹配精度高的优点。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (2)
1.基于后缀数组的字符串快速匹配方法,其特征在于,包括如下步骤:
1)建立关于文本串T的后缀数组SA,然后再对后缀数组SA进行二分查找将模式串P在文本串T中的出现位置限定在以模式串P的首字符为起始字符的后缀数组区间内[sp,ep],其中sp表示文本串T中与模式串P首字符相同的后缀的可能的起始位置,ep表示文本串T中与模式串P首字符相同的后缀的可能结束的位置;
2)在步骤1)所得到的区间上排除长度小于模式串P或者末位字符与模式串P末位字符不同的后缀,进而得到模式串P在文本串T中的出现位置;
所述步骤2)包括如下步骤:
201)输入长度为m的模式文本P,长度为n的文本T,后缀数组SA和步骤1)获取的sp及ep;
202)初始化临时变量i=sp,计数器occ=0;
203)如果i不小于ep则执行步骤209);
204)判断当前位置i相关的字符串长度是否小于模式串P或者末位字符与模式串末位字符是否同的后缀,即是否满足n-SA[i]<m或者T[SA[i]+m]≠P[m],如果满足则执行步骤208);
205)判断当前位置i相关的字符串是否与模式P相等,即判断P是否与T[SA[i],SA[i]+m]相等,如果相等则执行步骤207);
206)判断当前位置i相关的字符串是否大于模式P,即判断P是否小于T[SA[i],SA[i]+m],如果满足条件,满足条件则执行步骤209),否则执行步骤208);
207)找到一个匹配,匹配计数器occ加1;
208)临时变量i加1,然后执行步骤203);
209)输出匹配数量occ。
2.根据权利要求1所述的基于后缀数组的字符串快速匹配方法,其特征在于,所述步骤1)包括如下步骤:
101)输入长度为m的模式文本P,长度为n的文本T,后缀数组SA;
102)初始化临时变量sp=1,st=n+1,其中sp表示文本串T中与模式串P首字符相同的后缀的可能的起始位置;
103)如果sp不小于st则执行步骤106);
104)进行折半定位,临时变量s=(sp+st)/2;
105)判断模式P的第一个字符是不小于T中第SA[s]个字符,如果小于则sp=s+1,否则st=s;然后执行步骤103);
106)初始化临时变量ep=sp-1,et=n,其中ep表示文本串T中与模式串P首字符相同的后缀的可能结束的位置;
107)如果ep不小于et则执行步骤110);
108)进行折半定位,临时变量e=(ep+et)/2;
109)判断模式P的第一个字符是不小于T中第SA[e]个字符,如果小于则ep=e,否则et=e–1,然后执行步骤107);
110)输出[sp,ep]。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810398497.5A CN108920483B (zh) | 2018-04-28 | 2018-04-28 | 基于后缀数组的字符串快速匹配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810398497.5A CN108920483B (zh) | 2018-04-28 | 2018-04-28 | 基于后缀数组的字符串快速匹配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108920483A CN108920483A (zh) | 2018-11-30 |
CN108920483B true CN108920483B (zh) | 2022-02-01 |
Family
ID=64403484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810398497.5A Active CN108920483B (zh) | 2018-04-28 | 2018-04-28 | 基于后缀数组的字符串快速匹配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108920483B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110597855B (zh) * | 2019-08-14 | 2022-03-29 | 中山大学 | 一种数据查询方法、终端设备及计算机可读存储介质 |
CN111476037B (zh) * | 2020-04-14 | 2023-03-31 | 腾讯科技(深圳)有限公司 | 文本处理方法、装置、计算机设备和存储介质 |
CN112100455B (zh) * | 2020-08-18 | 2022-09-20 | 北京理工大学 | 基于字符串并行搜索的lzw字典搜索方法 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3672242B2 (ja) * | 2001-01-11 | 2005-07-20 | インターナショナル・ビジネス・マシーンズ・コーポレーション | パターン検索方法、パターン検索装置、コンピュータプログラム及び記憶媒体 |
US8788522B2 (en) * | 2009-04-13 | 2014-07-22 | Hitachi, Ltd. | Pair character string retrieval system |
CN102073740A (zh) * | 2011-01-27 | 2011-05-25 | 农革 | 基于基数排序的字符串后缀数组构造方法 |
CN102081673A (zh) * | 2011-01-27 | 2011-06-01 | 农革 | 后缀数组构造方法 |
CN103412858B (zh) * | 2012-07-02 | 2016-09-21 | 清华大学 | 用于文本或网络内容分析的大规模特征匹配的方法 |
US9740798B2 (en) * | 2013-03-15 | 2017-08-22 | Micron Technology, Inc. | Inexact search acceleration |
CN105468588A (zh) * | 2014-05-30 | 2016-04-06 | 华为技术有限公司 | 字符串匹配方法和装置 |
CN105653567A (zh) * | 2014-12-04 | 2016-06-08 | 南京理工大学常熟研究院有限公司 | 一种文本序列数据中快速查找特征字符串的方法 |
CN105141583B (zh) * | 2015-07-28 | 2019-02-15 | 中国电子科技集团公司第三十六研究所 | 一种字符串匹配方法和*** |
CN105335481B (zh) * | 2015-10-14 | 2019-01-22 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种大规模字符串文本的后缀索引构造方法及装置 |
CN107341224A (zh) * | 2017-06-30 | 2017-11-10 | 北方工业大学 | 一种字符串的匹配方法及装置 |
CN107229759B (zh) * | 2017-07-27 | 2020-08-11 | 深圳市乐宜科技有限公司 | 一种字符串模式匹配的方法 |
-
2018
- 2018-04-28 CN CN201810398497.5A patent/CN108920483B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108920483A (zh) | 2018-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108920483B (zh) | 基于后缀数组的字符串快速匹配方法 | |
US10009372B2 (en) | Method for compressing matching automata through common prefixes in regular expressions | |
CN108846016B (zh) | 一种面向中文分词的搜索算法 | |
Vinga et al. | Pattern matching through Chaos Game Representation: bridging numerical and discrete data structures for biological sequence analysis | |
Andoni et al. | Efficient algorithms for substring near neighbor problem | |
CN116562297B (zh) | 基于HTrie树的中文敏感词变形体识别方法及*** | |
CN106599097B (zh) | 海量特征串集合的匹配方法和装置 | |
CN107220333B (zh) | 一种基于Sunday算法的字符搜索方法 | |
Rezaei et al. | Malware detection using opcodes statistical features | |
CN107229759B (zh) | 一种字符串模式匹配的方法 | |
CN110362606B (zh) | 一种时间序列变长模体挖掘方法 | |
JP7412935B2 (ja) | ソースコードを数値識別子に変換しデータセットに対して比較する方法 | |
CN109977298B (zh) | 一种从正则表达式中抽取最长精确子串的方法 | |
Muhaya et al. | Polymorphic malware detection using hierarchical hidden markov model | |
Navarro et al. | Fast fully-compressed suffix trees | |
CN108304467B (zh) | 用于文本间匹配的方法 | |
Duvvuri et al. | Comparative analysis of pattern matching algorithms using DNA sequences | |
CN113010882B (zh) | 一种适用于缓存丢失攻击的自定义位置顺序模式匹配方法 | |
Hu et al. | A fast algorithm for multi-string matching based on automata optimization | |
Deusdado et al. | GRASPm: an efficient algorithm for exact pattern-matching in genomic sequences | |
Moeini et al. | Improved Rabin-Karp Algorithm Using Bloom Filter | |
Hirota et al. | Efficient algorithms for enumerating maximal common subsequences of two strings | |
Zhu et al. | An improved O (Rlog log n+ n) time algorithm for computing the longest common subsequence | |
CN110851679A (zh) | 一种基于正文节点特征的提取网页正文的方法和*** | |
KR20190139227A (ko) | K-부정합 검색을 위한 필터를 생성하는 시스템 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |