[发明专利]一种后缀数组的正确性验证方法及系统有效
申请号: | 201710183201.3 | 申请日: | 2017-03-24 |
公开(公告)号: | CN107015951B | 公开(公告)日: | 2020-08-18 |
发明(设计)人: | 韩凌波;农革;徐文涛 | 申请(专利权)人: | 广东顺德中山大学卡内基梅隆大学国际联合研究院;中山大学 |
主分类号: | G06F40/194 | 分类号: | G06F40/194 |
代理公司: | 广州粤高专利商标代理有限公司 44102 | 代理人: | 林丽明 |
地址: | 528300 广东省佛山市顺德区大良*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 后缀 数组 正确性 验证 方法 系统 | ||
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。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于广东顺德中山大学卡内基梅隆大学国际联合研究院;中山大学,未经广东顺德中山大学卡内基梅隆大学国际联合研究院;中山大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710183201.3/1.html,转载请声明来源钻瓜专利网。