CN107015951B - 一种后缀数组的正确性验证方法及系统 - Google Patents

一种后缀数组的正确性验证方法及系统 Download PDF

Info

Publication number
CN107015951B
CN107015951B CN201710183201.3A CN201710183201A CN107015951B CN 107015951 B CN107015951 B CN 107015951B CN 201710183201 A CN201710183201 A CN 201710183201A CN 107015951 B CN107015951 B CN 107015951B
Authority
CN
China
Prior art keywords
lms
suffix
array
character
module
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
Application number
CN201710183201.3A
Other languages
English (en)
Other versions
CN107015951A (zh
Inventor
韩凌波
农革
徐文涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SYSU CMU Shunde International Joint Research Institute
National Sun Yat Sen University
Original Assignee
SYSU CMU Shunde International Joint Research Institute
National Sun Yat Sen University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SYSU CMU Shunde International Joint Research Institute, National Sun Yat Sen University filed Critical SYSU CMU Shunde International Joint Research Institute
Priority to CN201710183201.3A priority Critical patent/CN107015951B/zh
Publication of CN107015951A publication Critical patent/CN107015951A/zh
Application granted granted Critical
Publication of CN107015951B publication Critical patent/CN107015951B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/194Calculation of difference between files

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种后缀数组的正确性验证方法和系统,所述方法包括:从右向左扫描一遍T,按照后缀类型的定义比较当前扫描的字符T[i]与后继字符T[i+1]的大小,计算T的字符T[i]和suf(T,i)的类型,记录于t[i]中;从左向右扫描一遍T,找出其中所有LMS字符出现的位置,从而获取所有LMS子串的首字符指针,用数组P1来记录;根据数组P1、B和SA,使用归纳排序的方法对T的LMS子串进行排序,结果保存在数组SA1;从左向右扫描SA,如果SA[i]为LMS类型,将SA[i]保存至SA1中;判断T1中的字符是否唯一,若是则直接根据T1的名字计算出SA1,且用SA1更新C数组;根据T1和SA1归纳计算T的后缀数组SA,计算过程中使用C数组验证SA的正确性,如果SA正确,用SA更新C数组。

Description

一种后缀数组的正确性验证方法及系统
技术领域
本发明涉及后缀数组的验证领域,更具体地,涉及一种后缀数组的正确性验证方法及系统。
背景技术
后缀数组是指可以在更小的空间内实现等同后缀树的数据结构,是后缀树的紧凑型替代,广泛应用于字符串处理、生物信息检索、数据压缩和模式匹配等诸多领域。任意给定一个字符串,从其中的任意位置开始至其结尾的所有字符组成的字符子串称为字符串的后缀(suffix)。显然,长度为n的字符串包含n个后缀,对这n个后缀按字典顺序排序,将其地址保存在一个整型数组中,该数组则称为字符串的后缀数组。
现有的后缀数组正确性验证方法是在后缀数组构造完成以后,执行两轮整数排序来验证后缀数组的正确性。随着数据集规模的不断增长,后缀数组的正确性验证时间甚至会超过构造时间,现有的验证方法已经不再完全适用。
发明内容
本发明为克服上述现有技术所述的至少一种缺陷,提供一种后缀数组的正确性验证方法及系统。
本发明旨在至少在一定程度上解决上述技术问题。
为了达到上述技术效果,本发明的技术方案如下:
一种后缀数组的正确性验证方法,包括:从右向左扫描一遍T,按照后缀类型的定义比较当前扫描的字符T[i]与后继字符T[i+1]的大小,计算T的字符T[i]和suf(T,i)的类型,记录于t[i]中;从左向右扫描一遍T,找出其中所有LMS字符出现的位置,从而获取所有LMS子串的首字符指针,用数组P1来记录;根据数组P1、B和SA,使用归纳排序的方法对T的LMS子串进行排序,结果保存在数组SA1;从左向右扫描SA,如果SA[i]为LMS类型,将SA[i]保存至SA1中;判断T1中的字符是否唯一。若是则直接根据T1的名字计算出SA1,且用SA1更新C数组;根据T1和SA1归纳计算T的后缀数组SA,计算过程中使用C数组验证SA的正确性,如果SA正确,用SA更新C数组;其中C数组保存的是当前递归层已有序的LMS后缀地址。
优选地,根据数组P1、B和SA,使用归纳排序的方法对T的LMS子串进行排序,结果保存在数组SA1的步骤包括:初始化SA所有元素的值为-1。计算SA中各字符桶的结束位置,保存在数组B。从右向左扫描P1,将P1的值保存至SA中B[T[P1[i]]]指向的位置,将B[T[P1[i]]]更新为B[T[P1[i]]]-1。扫描结束后,SA中各字符桶尾部记录了T中相同LMS字符的地址;计算SA中各字符桶的开始位置,保存在数组B。从左向右扫描SA一次,如果当前扫描到的元素SA[i]的值为-1或在T中的前继T[SA[i]-1]的类型是S类型,则继续扫描下一个元素,否则将SA[i]-1保存至SA中B[T[SA[i]-1]]所指向的位置,然后将B[T[SA[i]-1]]更新为B[T[SA[i]-1]]+1;计算SA中各字符桶的结束位置,保存在数组B。从右向左扫描SA,判断当前元素SA[i]在T中的前继T[SA[i]-1]是否是L型,若是则继续扫描下一个元素,否则将SA[i]-1保存至SA中B[T[SA[i]-1]]所指向的位置,然后将B[T[SA[i]-1]]更新为B[T[SA[i]-1]]-1。
优选地,根据SA1中保存的LMS子串的地址信息,对LMS子串进行比较和命名,用新的名字替换T中LMS子串,形成新的字符串T1的步骤包括:从左向右扫描SA1中已排序的LMS子串,第一个扫描到的LMS子串命名为0,依次比较相邻的LMS子串是否相同,相同则命名不变,不同则命名加1;其中,相邻LMS子串的比较过程为:先比较两个LMS子串的字符是否相同,然后比较字符类型是否相同。如果字符和字符类型完全相同,则相邻LMS字串相同,否则不同;扫描字符串T,将扫描到的LMS子串用步骤41)中新的命名替换,形成新的字符串T1。
优选地,归纳计算和验证T的后缀数组SA的步骤包括:初始化SA所有元素的值为-1。计算SA中各字符桶的结束位置,保存在数组B。从右向左扫描SA1,将SA1的值保存至SA中B[T[SA1[i]]]指向的位置,将B[T[SA1[i]]]更新为B[T[SA1[i]]]-1。扫描结束后,SA中各字符桶尾部记录了T中有序LMS后缀的地址;计算SA中各字符桶的开始位置,保存在数组B。从左向右扫描SA一次,如果当前扫描到的元素SA[i]的值为-1或T[SA[i]-1]的类型是S型,则继续扫描下一个元素,否则将SA[i]-1保存至SA中B[T[SA[i]-1]]所指向的位置,然后将B[T[SA[i]-1]]更新为B[T[SA[i]-1]]+1;计算SA中各字符桶的结束位置,保存在数组B。定义临时指针cp指向C数组的尾部。从右向左扫描SA,判断SA[i]是否为LMS后缀,若是则将SA[i]与C数组中的元素C[cp]进行比较,如果两者相同,则将cp更新为cp-1,否则SA不正确,程序返回。若程序无返回,接着判断当前扫描元素SA[i]在T中的前继T[SA[i]-1]是否是L型,若是则继续扫描下一个元素,否则将SA[i]-1保存至SA中B[T[SA[i]-1]]所指向的位置,然后将B[T[SA[i]-1]]更新为B[T[SA[i]-1]]-1。
其中,C数组保存的是当前递归层已计算出的有序的LMS后缀地址。因为LMS后缀是最左S类型后缀,也就是说LMS后缀属于S类型后缀,所以在推导S类型后缀的过程中,LMS后缀也会被推导出,如果新推导出的LMS后缀和C数组中的已有序的LMS后缀顺序一致,则SA正确,否则错误。
一种后缀数组的正确性验证系统,包括:字符串读取模块、L/S后缀识别模块、LMS后缀识别模块、LMS子串排序模块、LMS子串命名模块、字符串收缩模块、L型后缀排序模块和S型后缀排序以及LMS后缀验证模块;所述字符串读取模块,用于读取字符串;所述L/S后缀识别模块,用于识别字符串后缀类型是L型或S型;所述LMS后缀识别模块,用于识别S型后缀中的LMS后缀;所述LMS子串排序模块,用归纳排序的方法对LMS子串进行排序;所述LMS子串命名模块,对LMS子串进行命名。对有序的LMS子串中相邻的LMS子串进行比较,如果二者相同其命名也相同,否则命名加1;所述字符串收缩模块,根据LMS子串在T中的位置,用LMS子串名替换LMS子串形成新的字符串T1;所述L型后缀排序模块,用有序的LMS后缀归纳排序L型后缀;所述S型后缀排序以及LMS后缀验证模块,用有序的L型后缀归纳排序S型后缀,同时对LMS型后缀正确性进行验证;其中,所述对LMS型后缀正确性进行验证的过程为:在从右向左扫描SA,如果扫描到的后缀为LMS类型,则将该后缀与验证信息模块中对应的LMS后缀进行比较,如果所有扫描到的LMS型后缀顺序与验证信息模块中保存的LMS型后缀顺序一致,说明归纳排序计算出的SA正确。
优选地,还包括:后缀数组存取模块;所述后缀数组存取模块,用于存取后缀数组。
优选地,还包括:验证信息存取模块;所述验证信息存取模块,用于存取回溯过程中高层计算出的LMS后缀的地址。
优选地,还包括:判定器A和判定器B;所述判定器A,用于判断字符串收缩模块生成的T1中的字符是否唯一,若是则直接计算其后缀,否则对T1执行递归;所述判定器B,用于判断当前递归层是否是第0层,若是则不更新C数组,否则更新C数组。
优选地,还包括:后缀直接计算模块;所述后缀直接计算模块,用于直接根据字符大小来计算字符串后缀。
与现有技术相比,本发明技术方案的有益效果是:
在后缀数组构建的过程中,同时实现了后缀数组的正确性验证;降低了后缀数组正确性验证的时间和空间开销。
附图说明
图1为一实施例的一种后缀数组的正确性验证方法的示意性流程图;
图2为一实施例的一种后缀数组的正确性验证系统的示意性结构图。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;
为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;
对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
下面结合附图和实施例对本发明的技术方案做进一步的说明。
实施例1
图1为一实施例的一种后缀数组的正确性验证方法的示意性流程图。如图1所示,一种后缀数组的正确性验证方法,包括:
S101:从右向左扫描一遍T,按照后缀类型的定义比较当前扫描的字符T[i]与后继字符T[i+1]的大小,计算T的字符T[i]和suf(T,i)的类型,记录于t[i]中;
S102:从左向右扫描一遍T,找出其中所有LMS字符出现的位置,从而获取所有LMS子串的首字符指针,用数组P1来记录;
S103:根据数组P1、B和SA,使用归纳排序的方法对T的LMS子串进行排序,结果保存在数组SA1;
所述步骤S103中对T的LMS子串排序的具体步骤如下:
31)初始化SA所有元素的值为-1。计算SA中各字符桶的结束位置,保存在数组B。从右向左扫描P1,将P1的值保存至SA中B[T[P1[i]]]指向的位置,将B[T[P1[i]]]更新为B[T[P1[i]]]-1。扫描结束后,SA中各字符桶尾部记录了T中相同LMS字符的地址;
32)计算SA中各字符桶的开始位置,保存在数组B。从左向右扫描SA一次,如果当前扫描到的元素SA[i]的值为-1或在T中的前继T[SA[i]-1]的类型是S类型,则继续扫描下一个元素,否则将SA[i]-1保存至SA中B[T[SA[i]-1]]所指向的位置,然后将B[T[SA[i]-1]]更新为B[T[SA[i]-1]]+1;
33)计算SA中各字符桶的结束位置,保存在数组B。从右向左扫描SA,判断当前元素SA[i]在T中的前继T[SA[i]-1]是否是L型,若是则继续扫描下一个元素,否则将SA[i]-1保存至SA中B[T[SA[i]-1]]所指向的位置,然后将B[T[SA[i]-1]]更新为B[T[SA[i]-1]]-1;
34)从左向右扫描SA,如果SA[i]为LMS类型,将SA[i]保存至SA1中。
S104:根据SA1中保存的LMS子串的地址信息,对LMS子串进行比较和命名,用新的名字替换T中LMS子串,形成新的字符串T1;
所述步骤S104中,计算新字符串T1的具体步骤如下:
41)从左向右扫描SA1中已排序的LMS子串,第一个扫描到的LMS子串命名为0,依次比较相邻的LMS子串是否相同,相同则命名不变,不同则命名加1;
其中,相邻LMS子串的比较过程为:先比较两个LMS子串的字符是否相同,然后比较字符类型是否相同。如果字符和字符类型完全相同,则相邻LMS字串相同,否则不同。
42)扫描字符串T,将扫描到的LMS子串用步骤41)中新的命名替换,形成新的字符串T1。
S105:判断T1中的字符是否唯一。若是则直接根据T1的名字计算出SA1,且用SA1更新C数组,否则以T1和SA1作为输入跳转到步骤S101执行递归;
S106:根据T1和SA1归纳计算T的后缀数组SA,计算过程中使用C数组验证SA的正确性,如果SA正确,用SA更新C数组,用SA更新C数组;其中C数组保存的是当前递归层已有序的LMS后缀地址。否则跳出程序;
所述步骤S106中,归纳计算和验证T的后缀数组SA的具体步骤如下:
61)初始化SA所有元素的值为-1。计算SA中各字符桶的结束位置,保存在数组B。从右向左扫描SA1,将SA1的值保存至SA中B[T[SA1[i]]]指向的位置,将B[T[SA1[i]]]更新为B[T[SA1[i]]]-1。扫描结束后,SA中各字符桶尾部记录了T中有序LMS后缀的地址;
62)计算SA中各字符桶的开始位置,保存在数组B。从左向右扫描SA一次,如果当前扫描到的元素SA[i]的值为-1或T[SA[i]-1]的类型是S型,则继续扫描下一个元素,否则将SA[i]-1保存至SA中B[T[SA[i]-1]]所指向的位置,然后将B[T[SA[i]-1]]更新为B[T[SA[i]-1]]+1;
63)计算SA中各字符桶的结束位置,保存在数组B。定义临时指针cp指向C数组的尾部。从右向左扫描SA,判断SA[i]是否为LMS后缀,若是则将SA[i]与C数组中的元素C[cp]进行比较,如果两者相同,则将cp更新为cp-1,否则SA不正确,程序返回。若程序无返回,接着判断当前扫描元素SA[i]在T中的前继T[SA[i]-1]是否是L型,若是则继续扫描下一个元素,否则将SA[i]-1保存至SA中B[T[SA[i]-1]]所指向的位置,然后将B[T[SA[i]-1]]更新为B[T[SA[i]-1]]-1。
其中,C数组保存的是当前递归层已计算出的有序的LMS后缀地址。因为LMS后缀是最左S类型后缀,也就是说LMS后缀属于S类型后缀,所以在推导S类型后缀的过程中,LMS后缀也会被推导出,如果新推导出的LMS后缀和C数组中的已有序的LMS后缀顺序一致,则SA正确,否则错误。
实施例2
图2为一实施例的一种后缀数组的正确性验证系统的示意性结构图。如图2所示,一种后缀数组的正确性验证系统,包括:字符串读取模块1、L/S后缀识别模块2、LMS后缀识别模块3、LMS子串排序模块4、LMS子串命名模块5、字符串收缩模块6、L型后缀排序模块7和S型后缀排序以及LMS后缀验证模块8;字符串读取模块1,用于读取字符串;L/S后缀识别模块2,用于识别字符串后缀类型是L型或S型;LMS后缀识别模块3,用于识别S型后缀中的LMS后缀;LMS子串排序模块4,用归纳排序的方法对LMS子串进行排序;LMS子串命名模块5,对LMS子串进行命名。对有序的LMS子串中相邻的LMS子串进行比较,如果二者相同其命名也相同,否则命名加1;字符串收缩模块6,根据LMS子串在T中的位置,用LMS子串名替换LMS子串形成新的字符串T1;L型后缀排序模块7,用有序的LMS后缀归纳排序L型后缀;S型后缀排序以及LMS后缀验证模块8,用有序的L型后缀归纳排序S型后缀,同时对LMS型后缀正确性进行验证;其中,所述对LMS型后缀正确性进行验证的过程为:在从右向左扫描SA,如果扫描到的后缀为LMS类型,则将该后缀与验证信息模块中对应的LMS后缀进行比较,如果所有扫描到的LMS型后缀顺序与验证信息模块中保存的LMS型后缀顺序一致,说明归纳排序计算出的SA正确,否则错误。
作为一优选实施例,还包括:后缀数组存取模块9,用于存取后缀数组;
作为一优选实施例,还包括:验证信息存取模块10,存取回溯过程中高层计算出的LMS后缀的地址;
作为一优选实施例,还包括:判定器A 11,判断字符串收缩模块生成的T1中的字符是否唯一,若是则直接计算其后缀,否则对T1执行递归;
作为一优选实施例,还包括:判定器B 12,判断当前递归层是否是第0层,若是则不更新C数组,否则更新C数组;
作为一优选实施例,还包括:后缀直接计算模块13,直接根据字符大小来计算字符串后缀。
相同或相似的标号对应相同或相似的部件;
附图中描述位置关系的用于仅用于示例性说明,不能理解为对本专利的限制;
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

Claims (8)

1.一种后缀数组的正确性验证方法,其特征在于,包括:
从右向左扫描一遍字符串T,按照后缀类型的定义比较当前扫描的字符T[i]与后继字符T[i+1]的大小,计算字符串T的字符T[i]和suf(T,i)的类型,记录于t[i]中;
从左向右扫描一遍字符串T,找出其中所有LMS字符出现的位置,从而获取所有LMS子串的首字符指针,用数组P1来记录;
根据数组P1、B和SA,使用归纳排序的方法对字符串T的LMS子串进行排序,结果保存在数组SA1;
从左向右扫描SA,如果SA[i]为LMS类型,将SA[i]保存至SA1中;
判断T1中的字符是否唯一;若是则直接根据T1的名字计算出SA1,且用SA1更新C数组;
根据T1和SA1归纳计算字符串T的后缀数组SA,计算过程中使用C数组验证SA的正确性,如果SA正确,用SA更新C数组,其中C数组保存的是当前递归层已有序的LMS后缀地址;
根据数组P1、B和SA,使用归纳排序的方法对字符串T的LMS子串进行排序,结果保存在数组SA1;具体步骤包括:
初始化SA所有元素的值为-1;计算SA中各字符桶的结束位置,保存在数组B;从右向左扫描P1,将P1的值保存至SA中B[T[P1[i]]]指向的位置,将B[T[P1[i]]]更新为B[T[P1[i]]]-1;扫描结束后,SA中各字符桶尾部记录了T中相同LMS字符的地址;
计算SA中各字符桶的开始位置,保存在数组B;从左向右扫描SA一次,如果当前扫描到的元素SA[i]的值为-1或在T中的前继T[SA[i]-1]的类型是S类型,则继续扫描下一个元素,否则将SA[i]-1保存至SA中B[T[SA[i]-1]]所指向的位置,然后将B[T[SA[i]-1]]更新为B[T[SA[i]-1]]+1;
计算SA中各字符桶的结束位置,保存在数组B;从右向左扫描SA,判断当前元素SA[i]在T中的前继T[SA[i]-1]是否是L型,若是则继续扫描下一个元素,否则将SA[i]-1保存至SA中B[T[SA[i]-1]]所指向的位置,然后将B[T[SA[i]-1]] 更新为B[T[SA[i]-1]]-1。
2.根据权利要求1所述的后缀数组的正确性验证方法,其特征在于,根据SA1中保存的LMS子串的地址信息,对LMS子串进行比较和命名,用新的名字替换T中LMS子串,形成新的字符串T1的步骤包括:
从左向右扫描SA1中已排序的LMS子串,第一个扫描到的LMS子串命名为0,依次比较相邻的LMS子串是否相同,相同则命名不变,不同则命名加1;其中,相邻LMS子串的比较过程为:先比较两个LMS子串的字符是否相同,然后比较字符类型是否相同;如果字符和字符类型完全相同,则相邻LMS字串相同,否则不同;
扫描字符串T,将扫描到的LMS子串中新的命名替换,形成新的字符串T1。
3.根据权利要求1所述的后缀数组的正确性验证方法,其特征在于,归纳计算和验证T的后缀数组SA的步骤包括:
初始化SA所有元素的值为-1;计算SA中各字符桶的结束位置,保存在数组B;从右向左扫描SA1,将SA1的值保存至SA中B[T[SA1[i]]]指向的位置,将B[T[SA1[i]]]更新为B[T[SA1[i]]]-1;扫描结束后,SA中各字符桶尾部记录了T中有序LMS后缀的地址;
计算SA中各字符桶的开始位置,保存在数组B;从左向右扫描SA一次,如果当前扫描到的元素SA[i]的值为-1或T[SA[i]-1]的类型是S型,则继续扫描下一个元素,否则将SA[i]-1保存至SA中B[T[SA[i]-1]]所指向的位置,然后将B[T[SA[i]-1]]更新为B[T[SA[i]-1]]+1;
计算SA中各字符桶的结束位置,保存在数组B;定义临时指针cp指向C数组的尾部;从右向左扫描SA,判断SA[i]是否为LMS后缀,若是则将SA[i]与C数组中的元素C[cp]进行比较,如果两者相同,则将cp更新为cp-1,否则SA不正确,程序返回;若程序无返回,接着判断当前扫描元素SA[i]在T中的前继T[SA[i]-1]是否是L型,若是则继续扫描下一个元素,否则将SA[i]-1保存至SA中B[T[SA[i]-1]]所指向的位置,然后将B[T[SA[i]-1]]更新为B[T[SA[i]-1]]-1。
4.一种后缀数组的正确性验证系统,其特征在于,包括:字符串读取模块、L/S后缀识别模块、LMS后缀识别模块、LMS子串排序模块、LMS子串命名模块、字符串收缩模块、L型后缀排序模块和S型后缀排序以及LMS后缀验证模块;
所述字符串读取模块,用于读取字符串;
所述L/S后缀识别模块,用于识别字符串后缀类型是L型或S型;
所述LMS后缀识别模块,用于识别S型后缀中的LMS后缀;
所述LMS子串排序模块,用归纳排序的方法对LMS子串进行排序;
所述LMS子串命名模块,对LMS子串进行命名;对有序的LMS子串中相邻的LMS子串进行比较,如果二者相同其命名也相同,命名加1;
所述字符串收缩模块,根据LMS子串在T中的位置,用LMS子串名替换LMS子串形成新的字符串T1;
所述L型后缀排序模块,用有序的LMS后缀归纳排序L型后缀;
所述S型后缀排序以及LMS后缀验证模块,用有序的L型后缀归纳排序S型后缀,同时对LMS型后缀正确性进行验证;其中,所述对LMS型后缀正确性进行验证的过程为:在从右向左扫描SA,如果扫描到的后缀为LMS类型,则将该后缀与验证信息模块中对应的LMS后缀进行比较,如果所有扫描到的LMS型后缀顺序与验证信息模块中保存的LMS型后缀顺序一致,说明归纳排序计算出的SA正确。
5.根据权利要求4所述的后缀数组的正确性验证系统,其特征在于,还包括:后缀数组存取模块;
所述后缀数组存取模块,用于存取后缀数组。
6.根据权利要求5所述的后缀数组的正确性验证系统,其特征在于,还包括:验证信息存取模块;
所述验证信息存取模块,用于存取回溯过程中高层计算出的LMS后缀的地址。
7.根据权利要求6所述的后缀数组的正确性验证系统,其特征在于,还包括:判定器A和判定器B;
所述判定器A,用于判断字符串收缩模块生成的T1中的字符是否唯一,若是则直接计算其后缀,否则对T1执行递归;
所述判定器B,用于判断当前递归层是否是第0层,若是则不更新C数组,否则更新C数组。
8.根据权利要求7所述的后缀数组的正确性验证系统,其特征在于,还包括:后缀直接计算模块;
所述后缀直接计算模块,用于直接根据字符大小来计算字符串后缀。
CN201710183201.3A 2017-03-24 2017-03-24 一种后缀数组的正确性验证方法及系统 Active CN107015951B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710183201.3A CN107015951B (zh) 2017-03-24 2017-03-24 一种后缀数组的正确性验证方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710183201.3A CN107015951B (zh) 2017-03-24 2017-03-24 一种后缀数组的正确性验证方法及系统

Publications (2)

Publication Number Publication Date
CN107015951A CN107015951A (zh) 2017-08-04
CN107015951B true CN107015951B (zh) 2020-08-18

Family

ID=59444907

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710183201.3A Active CN107015951B (zh) 2017-03-24 2017-03-24 一种后缀数组的正确性验证方法及系统

Country Status (1)

Country Link
CN (1) CN107015951B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108804204A (zh) * 2018-04-17 2018-11-13 佛山市顺德区中山大学研究院 多线程并行构造后缀数组的方法及系统
CN108763170A (zh) * 2018-04-17 2018-11-06 佛山市顺德区中山大学研究院 常数工作空间并行构造后缀数组的方法及系统
CN109375989B (zh) * 2018-09-10 2022-04-08 中山大学 一种并行后缀排序方法及系统
CN110852046B (zh) * 2019-10-18 2021-11-05 中山大学 一种文本后缀索引的分块归纳排序方法及系统
CN115982310B (zh) * 2023-03-21 2023-05-16 广东海洋大学 一种自带验证功能的链表生成方法及电子设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073740A (zh) * 2011-01-27 2011-05-25 农革 基于基数排序的字符串后缀数组构造方法
CN102081673A (zh) * 2011-01-27 2011-06-01 农革 后缀数组构造方法
CN105335481A (zh) * 2015-10-14 2016-02-17 广东顺德中山大学卡内基梅隆大学国际联合研究院 一种大规模字符串文本的后缀索引构造方法及装置
CN105574344A (zh) * 2015-12-22 2016-05-11 常州信息职业技术学院 一种金字塔排序算法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9390163B2 (en) * 2005-04-22 2016-07-12 New York University Method, system and software arrangement for detecting or determining similarity regions between datasets
GB2523495A (en) * 2013-01-17 2015-08-26 Edico Genome Corp Bioinformatics systems, apparatuses, and methods executed on an integrated circuit processing platform

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073740A (zh) * 2011-01-27 2011-05-25 农革 基于基数排序的字符串后缀数组构造方法
CN102081673A (zh) * 2011-01-27 2011-06-01 农革 后缀数组构造方法
CN105335481A (zh) * 2015-10-14 2016-02-17 广东顺德中山大学卡内基梅隆大学国际联合研究院 一种大规模字符串文本的后缀索引构造方法及装置
CN105574344A (zh) * 2015-12-22 2016-05-11 常州信息职业技术学院 一种金字塔排序算法

Also Published As

Publication number Publication date
CN107015951A (zh) 2017-08-04

Similar Documents

Publication Publication Date Title
CN107015951B (zh) 一种后缀数组的正确性验证方法及系统
CN107015952B (zh) 一种后缀数组和最长公共前缀的正确性验证方法及系统
US8849841B2 (en) Memory circuit for Aho-corasick type character recognition automaton and method of storing data in such a circuit
CN111552693B (zh) 一种标签布谷鸟过滤器
US9009655B2 (en) Code string search apparatus, search method, and program
Zhang et al. Aligning a DNA sequence with a protein sequence
CN104036187A (zh) 计算机病毒类型确定方法及其系统
CN107368513B (zh) 客户端数据库更新的方法及装置
CN109411020B (zh) 利用长测序读段进行全基因组序列补洞的方法
US11150993B2 (en) Method, apparatus and computer program product for improving inline pattern detection
CN115563409A (zh) 一种地址行政区划识别方法、装置、设备及介质
JP2001527240A (ja) データ構造内の管理
CN117940894A (zh) 用于检测代码克隆的系统和方法
CN115982310B (zh) 一种自带验证功能的链表生成方法及电子设备
US20030084031A1 (en) System and method for searching a signature set for a target signature
WO2011073680A1 (en) Improvements relating to hash tables
CN114895885B (zh) 在三维检测软件基于特征的重计算方法
US8886677B1 (en) Integrated search engine devices that support LPM search operations using span prefix masks that encode key prefix length
CN115828803A (zh) 网表缩减方法、芯片验证方法及计算机存储介质
CN112765136B (zh) 医学编码词典的存储方法、升级方法和装置
CN111814781A (zh) 用于对图像块识别结果进行校正的方法、设备和存储介质
CN102591941B (zh) 一种SQLite空闲链表节点的解析方法和装置
CN109460495B (zh) 一种基于改进bm算法与后缀数组的冗余字段过滤方法
JP3534471B2 (ja) マージソート方法及びマージソート装置
CN113946365A (zh) 页面识别方法、装置、计算机设备和存储介质

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