[发明专利]一种分块并行构造后缀数组的方法及系统有效
申请号: | 201910992637.6 | 申请日: | 2019-10-18 |
公开(公告)号: | CN110837584B | 公开(公告)日: | 2022-10-04 |
发明(设计)人: | 解静仪;农革 | 申请(专利权)人: | 中山大学 |
主分类号: | G06F16/901 | 分类号: | G06F16/901;G06F16/903 |
代理公司: | 深圳中一联合知识产权代理有限公司 44414 | 代理人: | 杜锴健 |
地址: | 510275 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 分块 并行 构造 后缀 数组 方法 系统 | ||
1.一种分块并行构造后缀数组的方法,其特征在于,包括:
针对任一字符串,将用于存储所述字符串的后缀数组的存储单元划分为多个数据块,所述字符串包括多个LMS字符,各个LMS字符分别对应一个以所述LMS字符为起始的LMS子串和LMS后缀;
获取各个数据块的定位信息,根据所述定位信息将所述各个LMS字符对应的LMS子串分别存入所述各个数据块;
并行地归纳排序所述各个数据块中的各个LMS子串;
重命名归纳排序后的所述各个LMS子串,获得目标字符串,所述目标字符串包括多个目标字符,任一目标字符与所述字符串的一个LMS子串对应;
若所述目标字符串中至少存在一个目标字符不唯一,则以所述目标字符串作为输入的字符串,返回执行所述将用于存储所述字符串的后缀数组的存储单元划分为多个数据块的步骤;
若所述目标字符串中各个目标字符均唯一,则计算所述目标字符串的后缀数组,根据所述目标字符串的后缀数组将所述字符串的LMS后缀存入所述各个数据块;根据所述各个数据块中的LMS后缀,并行地归纳排序得到所述字符串的后缀数组;
其中,所述并行地归纳排序所述各个数据块中的各个LMS子串的步骤包括:
先从左向右、再从右向左扫描所述各个数据块,在扫描过程中确定当前数据块,以及所述当前数据块的多个相邻数据块;
并行地对所述当前数据块中的各个子串和所述多个相邻数据块中的各个子串执行数据处理任务,所述各个子串包括各个LMS子串,所述数据处理任务包括前继字符读取任务、块内子串稳定排序任务、块内子串归纳排序任务和排序结果写回任务;
当所述当前数据块中的各个子串和所述多个相邻数据块中的各个子串均完成全部所述数据处理任务时,停止执行所述数据处理任务;
所述重命名归纳排序后的所述各个LMS子串,获得目标字符串的步骤包括:
确定任意相邻两个LMS子串中各个字符的位置顺序;
逐一比较所述相邻两个LMS子串中具有相同位置顺序的两个字符的字典序大小;
若所述相邻两个LMS子串的各相同位置顺序的字符的字典序大小均相同,则将后一LMS子串的名称重命名为与前一LMS子串的名称相同;
若所述相邻两个LMS子串的各相同位置顺序的字符的字典序大小存在不相同的情况,则采用预设命名算法重命名后一LMS子串的名称,得到目标字符串,所述预设命名算法包括串行命名、并行命名再用前缀和算法整合各块的局部名字中的至少一种。
2.根据权利要求1所述的方法,其特征在于,所述针对任一字符串,将用于存储所述字符串的后缀数组的存储单元划分为多个数据块的步骤包括:
针对任一字符串,为所述字符串和所述字符串的后缀数组分配存储单元;
根据预设的划分方式,将所述后缀数组的存储单元划分为多个数据块。
3.根据权利要求1所述的方法,其特征在于,所述定位信息包括边界字符信息,所述获取各个数据块的定位信息的步骤包括:
统计所述字符串中各个字符出现的次数;
根据所述各个字符出现的次数,采用前缀和算法计算所述各个数据块的边界字符信息。
4.根据权利要求1所述的方法,其特征在于,所述根据所述定位信息将所述各个LMS字符对应的LMS子串分别存入所述各个数据块的步骤包括:
对所述各个数据块进行初始化处理,使所述各个数据块的块尾位置指向所述数据块的末尾;
并行从右向左扫描所述字符串,若当前扫描到的字符为LMS字符,则确定以所述LMS字符为起始的目标LMS子串,根据所述定位信息将所述目标LMS子串存入其所属的目标数据块的块尾位置并更新所述块尾位置。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中山大学,未经中山大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910992637.6/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种燃气热水器的负荷测试方法
- 下一篇:一种可降解液态防冻剂及其制备方法