[发明专利]一种后缀数组和最长公共前缀的正确性验证方法及系统有效
申请号: | 201710183737.5 | 申请日: | 2017-03-24 |
公开(公告)号: | CN107015952B | 公开(公告)日: | 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]中;
将SA1和LCPA1中的元素初始化为-1,从左到右扫描一遍SA,根据数组t找出SA中所有LMS后缀及其LCP值,分别依次记录在SA1和LCPA1中;
根据字符串T、数组t、SA1和LCPA1,对SA1中相邻LMS后缀及其LCP值进行正确性验证;
根据字符串T、数组t、B、C、SA1和LCPA1,归纳排序T的L型后缀及其LCP值;
根据字符串T、数组t、B、C、SA1和LCPA1,归纳排序T的S型后缀及其LCP值;
顺序扫描SA、SA1、LCPA和LCPA1一次,比较SA与SA1和LCPA与LCPA1是否相同,如果两组比较全部相同则T的SA和LCPA正确,否则错误;
根据字符串T、数组t、SA1和LCPA1,对SA1中相邻LMS后缀及其LCP值进行正确性验证,包括:
计算FP(SA1[i],SA1[i]+LCPA1[i+1]-1)的指纹值,其中i∈[0,n1-2],并保存字符T[SA1[i]+LCPA1[i+1]];
计算FP(SA1[j],SA1[j]+LCPA1[j]-1)的指纹值,其中j∈[1,n1-1],并保存字符T[SA1[j]+LCPA1[j]];
逐次将指纹值FP(SA1[i],SA1[i]+LCPA1[i+1]-1)与FP(SA1[j],SA1[j]+LCPA1[j]-1)和字符T[SA1[i]+LCPA1[i+1]]与T[SA1[j]+LCPA1[j]]进行比较,如果指纹值相同且字符不同,说明LMS后缀及其LCP值正确。
2.根据权利要求1所述的后缀数组和最长公共前缀的正确性验证方法,其特征在于,根据字符串T、数组t、B、C、SA1和LCPA1,归纳排序T的L型后缀及其LCP值,包括:
计算SA1中各字符桶的结束位置,保存在B数组中;从右向左扫描SA1,如果当前元素SA1[i]为-1,则继续扫描1下一个元素,否则将SA1[i]保存至SA1中B[T[SA1[i]]]所指向的位置,同时将LCPA1[i]保存至LCPA1中B[T[SA1[i]]]所指向的位置,然后将SA1[i]字符桶的结束位置左移一步,将B[T[SA1[i]]]更新为B[T[SA[i]]]-1,最后将SA1[i]和LCPA1[i]设置为-1;
其中,SA1和LCPA1都是整型数组,分别保存了有序的LMS后缀及其LCP值,SA1与LCPA1的元素之间存在一一对应的关系;由于LMS后缀个数小于n,SA1和LCP1数组中只有部分空间有数据,其余空间的元素为-1,在从右向左扫描过程中,如果SA1元素不为-1,则将该元素填入SA1中对应字符桶的尾部,同时将该元素置为-1,该元素对应的LCPA1中的值也执行相同的移动和修改操作;
计算SA1中各字符桶的开始位置,保存在B数组中,从左向右扫描SA1,如果当前元素SA1[i]在T中的前继T[SA1[i]-1]为S型或SA1[i]为-1,继续扫描下一个,否则将SA1[i]-1保存在SA1中B[T[SA1[i]-1]]指向的位置;接着计算SA1[B[T[SA1[i]-1]]]与其左侧最近的非-1元素SA1[j](0≤j<B[T[SA1[i]-1]])的LCP值,如果两者指向的T中的字符不同则LCPA1[B[T[SA1[i]-1]]]=0,如果两者指向的T中的字符和字符类型都相同则LCPA1[B[T[SA1[i]-1]]]=C[T[SA1[i]-1]]+1;最后将B[T[SA1[i]-1]]更新为B[T[SA1[i]-1]]+1,即指向T[SA1[i]-1]字符桶的后一个位置;
其中,C数组保存的是当前元素SA1[i]与其左侧非-1元素SA1[k](k∈[0,i-1])的最长公共前缀,即LCPA1在区间[k+1,i]的RMQ值,其中k满足条件是:
T[SA1[k]-1]与T[SA1[i]-1]相同,且在SA1的区间[k+1,i-1]中,没有元素在T中的前缀字符与T[SA1[i]-1]相同。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于广东顺德中山大学卡内基梅隆大学国际联合研究院;中山大学,未经广东顺德中山大学卡内基梅隆大学国际联合研究院;中山大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710183737.5/1.html,转载请声明来源钻瓜专利网。
- 上一篇:双层单手用键盘
- 下一篇:一种防水性且具有发热功能的计算机机械键盘