CN105264522A - 后缀数组的构造方法及装置 - Google Patents

后缀数组的构造方法及装置 Download PDF

Info

Publication number
CN105264522A
CN105264522A CN201480000232.5A CN201480000232A CN105264522A CN 105264522 A CN105264522 A CN 105264522A CN 201480000232 A CN201480000232 A CN 201480000232A CN 105264522 A CN105264522 A CN 105264522A
Authority
CN
China
Prior art keywords
suffix
array
unsorted
clustering
order
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.)
Pending
Application number
CN201480000232.5A
Other languages
English (en)
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN105264522A publication Critical patent/CN105264522A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Algebra (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种后缀数组的构造方法及装置,其中,所述方法包括:根据字符串的后缀数组SA0和第一名次数组R0,获取后缀数组SA0的h-次序后缀数组SAh,及第二名次数组Rh,h为初始值为1的变量;根据h-次序后缀数组SAh,获取h-次序后缀数组SAh中未排序后缀的集合UGh;对集合UGh中的所有后缀进行排序,得到2h-次序后缀数组SA2h;根据名次数组Rh、2h-次序后缀数组SA2h,获取另一个未排序的后缀的集合UG2h;在集合UG2h为空集合时,得到排序的后缀数组SA。上述方法可实现后缀数据处理过程中加速后缀数组的构成。

Description

后缀数组的构造方法及装置
技术领域
本发明涉及通信技术, 尤其涉及一种字符串后缀数组的构造方法及装 置。 背景技术
后缀数组是指一个字符串的所有后缀按字典顺序排列的数组, 广泛应 用于字符串匹配、 序列分析及文本压缩等领域。
目前, 前缀倍增算法 (Prefix Doubling算法) 是一种较为常用的后缀 数组构造算法。其工作原理是,先以第一个字符为比较键将所有后缀排序, 得到 1-次序后缀数组及其对应的名次数组。 然后从 h=l开始, 以前次计算 结果为基础递归计算 2h-次序后缀数组, 直至所有的后缀都具有唯一的名 次。 其核心思想是利用已求得的每个后缀 Si的 h-次序作为主键 (记为 Rh[i] ) , 以 [i+h]作为辅键, 推导出 2h-次序后缀数组及对应的名次数组。
基于图形处理器 (Graphics Processing Unit, 简称 GPU) 的前缀倍增 算法充分利用了 GPU基数排序的优势, 使得排序过程极大并行化从而提 升算法性能。
然后, 前缀倍增算法在每次迭代时不区分已经找到最终名次的后缀和 未找到最终名次的后缀, 因此存在对已经找到最终名次的后缀重复排序的 问题。 发明内容
为解决现有技术中的缺陷, 本发明提供一种后缀数组的构造方法及装 置, 解决了现有技术中对已经找到最终名次的后缀重复排序的问题, 同时 可实现后缀数组的快速构成。
第一方面, 本发明实施例提供一种后缀数组的构造方法, 包括: 根据字符串的后缀数组 SAQ和第一名次数组 RQ, 获取所述后缀数组 SAQ的 h-次序后缀数组 SAh, 及第二名次数组 Rh, h为变量, 初始值为 1 ; 根据所述 h-次序后缀数组 SAh,获取所述 h-次序后缀数组 SAh中未排 序后缀的集合 UGh;
对所述集合 UGh中的所有后缀进行排序,得到 2h-次序后缀数组 SA2h; 根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取另一个 未排序的后缀的集合 UG2h; 若所述集合 UG2h为空集合, 则得到排序的后 缀数组 SA。
结合第一方面, 在第一种可能的实现方式中,
所述根据所述第二名次数组 RH、 所述 2h-次序后缀数组 SA2H, 获取另 一个未排序的后缀的集合 UG2H, 包括:
根据所述第二名次数组 RH、 所述 2h-次序后缀数组 SA2H, 获取第三名 次数组 R2H和另一个未排序的后缀的集合 UG2H ;
所述方法还包括:
若所述集合 UG2H不为空集合, 则更新所述变量 h的值, 根据第三名 次数组 R2H对未排序后缀的集合 UG2H进行排序, 用于获取第 N个未排序 的后缀的集合 UG2,. , 直至最后获取的第 N 个未排序的后缀的集合 UG^^ 为空集合, 得到排序的后缀数组 SA; N为大于 2的自然数。
结合第一放面及第一种可能的实现方式, 在第二种可能的实现方式 中, 所述更新所述变量 h的值, 包括:
将所述变量 h的值更新为 2h。
结合第一放面及第一方面上述可能的实现方式, 在第三种可能的实现 方式, 所述根据字符串的后缀数组 SAQ和第一名次数组 RQ, 获取所述后缀 数组 SAQ的 h-次序后缀数组 SAh的歩骤之前, 所述方法还包括:
初始化输入的字符串, 得到字符串的后缀数组 SAQ ;
将所述后缀数组 SAQ中的后缀 Si的起始字符位置进行调整,得到所述 字符串的名次数组 RQ
结合第一放面及第一方面上述可能的实现方式,在第四种可能的实现 方式,所述根据字符串的后缀数组 SAQ和名次数组 RQ,获取所述后缀数组 SAQ的 h-次序后缀数组 SAh, 及第二名次数组 Rh, 包括:
h为初始值时, 以所述后缀数组 SAQ中每个后缀 Si的第一个字符为比 较键, 将所述后缀数组 SAQ中的每个后缀 Si进行排序, 得到所述 h-次序后 缀数组 SAh和所述第二名次数组 Rh
结合第一方面及第一方面的第四种可能的实现方式,在第五种可能的 实现方式中,
所述根据所述 h-次序后缀数组 SAh, 获取所述 h-次序后缀数组 SAh 中未排序后缀的集合 UGh, 包括:
确定所述 h-次序后缀数组 SAh中有大于一个的连续后缀的第一个字 符相同;
将所述 h-次序后缀数组 SAh中具有一个以上连续后缀的第一个字符 相同的后缀组成一个以上的未排序后缀段 [a, b] ; a 为未排序后缀段中的 起始后缀的位置, b为未排序后缀段中的结束后缀的位置;
所述一个以上的未排序后缀段 [a, b]组成未排序后缀的集合 UGh。 结合第一方面及第一方面的上述可能的实现方式,在第六种可能的实 现方式中, 对所述集合 UGh中的所有后缀进行排序, 得到 2h-次序后缀数 组 SA2h, 包括:
采用所述集合 UGh中任一后缀 Si的 h-名次数组元素 Rh[i]为主比较键, 所述集合 UGh中后缀 81+11的 h-名次数组元素 Rh[i+h]为辅比较键, 对所述 集合 UGh中的后缀进行排序, 得到 2h-次序后缀数组 SA2h
结合第一方面及第一方面的上述可能的实现方式, 在第七种可能的实 现方式中, 根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取 另一个未排序的后缀的集合 UG2h;
根据相邻元素比较规则对所述 2h-次序后缀数组 8 211中的后缀进行比 较, 得到第一辅助数组 NC2h;
对所述第一辅助数组 NC21^A行前缀求和, 得到第二辅助数组 NS2h; 如果所述第二辅助数组 NS2h中的一个以上连续后缀有相同的值, 则 所述一个以上连续后缀组成一个未排序后缀段;
将一个以上的未排序后缀段组成未排序后缀的集合 UG2h
结合第一方面及第一方面的上述可能的实现方式, 在第八种可能的实 现方式中, 所述 2h-次序后缀数组 8 211所占用的空间为所述后缀数组 SAo 所占用的空间。
结合第一方面及第一方面的上述可能的实现方式,在第九种可能的实 现方式中, 对所述集合 UGh中的所有后缀进行排序, 得到 2h-次序后缀数 组 SA2h, 包括:
根据预设长度 T将所述集合 UGh的后缀段划分为 S型后缀段和 L型 后缀段;
采用一个线程块对所述 S型后缀段进行排序,采用两个以上线程块对 所述 L型后缀段进行排序, 得到 2h-次序后缀数组 SA2h
结合第一方面的第九种可能的实现方式, 在第十种可能的实现方式 中, 所述预设长度 T将所述集合 UGh的后缀段划分为 S型后缀段和 L型 后缀段, 包括: 将所述集合 UGh的任一后缀段的长度与所述预设长度 T 进行比较, 将所述集合 UGh中后缀段长度小于等于所述预设长度 T, 则将 小于等于所述预设长度 τ的后缀作为 S型后缀段, 将大于所述预设长度 T 的后缀作为 L型后缀段。
第二方面, 本发明实施例提供一种后缀数组的构造装置, 包括: 第一获取单元, 用于根据字符串的后缀数组 SA(^n第一名次数组 RQ, 获取所述后缀数组 SAQ的 h-次序后缀数组 SAh, 及第二名次数组 Rh, h为 变量, 初始值为 1 ;
第二获取单元, 用于根据所述 h-次序后缀数组 SAh, 获取所述 h-次序 后缀数组 SAh中未排序后缀的集合 UGh;
排序单元, 用于对所述集合 UGh中的所有后缀进行排序, 得到 2h-次 序后缀数组 SA2h;
第三获取单元, 用于根据所述第二名次数组 Rh、 所述 2h-次序后缀数 组 SA2h, 获取另一个未排序的后缀的集合 UG2h; 若所述集合 UG2h为空集 合, 则得到排序的后缀数组 SA。
结合第二方面, 在第一种可能的实现方式中,
所述第三获取单元, 还用于
用于根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取第 三名次数组 R2h;
在所述集合 110211不为空集合时, 所述装置还包括: 变量更新单元; 所述变量更新单元, 用于更新所述变量 h的值;
所述排序单元, 还用于 结合所述第三获取单元获取的第三名次数组 R2h和所述变量更新单元 更新的变量 h的值对未排序后缀的集合 UG2H进行排序, 用于获取第 N个 未排序的后缀的集合 直至所述第三获取单元最后获取的第 N个 未排序的后缀的集合 UG^ )为空集合, 得到排序的后缀数组 SA; N为大 于 2的自然数。
结合第二方面的第一种可能的实现方式, 在第二种可能的实现方式 中,
所述变量更新单元, 具体用于将所述变量 h的值更新为 2h。
结合第二方面或第二方面的第一或第二种可能的实现方式, 在第三种 可能的实现方式中, 所述装置还包括:
第四获取单元, 用于在所述第一获取单元获取所述 h-次序后缀数组 SAh之前, 初始化输入的字符串, 得到字符串的后缀数组 SAQ ;
将所述后缀数组 SAQ中的后缀 Si的起始字符位置进行调整,得到所述 字符串的名次数组 RQ
结合第二方面或第二方面的上述可能的实现方式, 在第四种可能的实 现方式中, 所述第一获取单元, 具体用于
h为初始值时, 以所述后缀数组 SAQ中每个后缀 的第一个字符为比 较键, 将所述后缀数组 SAQ中的每个后缀 进行排序, 得到所述 h-次序 后缀数组 SAh和第二名次数组 Rh
结合第二方面的第四种可能的实现方式, 在第五种可能的实现方式 中,
所述第二获取单元, 具体用于
确定所述 h-次序后缀数组 SAh中有大于一个的连续后缀的第一个字 符相同;
将所述 h-次序后缀数组 SAh中具有一个以上连续后缀的第一个字符 相同的后缀组成一个以上的未排序后缀段 [a, b] ; a 为未排序后缀段中的 起始后缀的位置, b为未排序后缀段中的结束后缀的位置;
所述一个以上的未排序后缀段 [a, b]组成未排序后缀的集合 UGH。 结合第二方面或第二方面的上述可能的实现方式, 在第六种可能的实 现方式中, 所述排序单元, 具体用于 采用所述集合 UGh中任一后缀 Si的 h-名次数组元素 Rh[i]为主比较键, 所述集合 UGh中后缀 81+11的 h-名次数组元素 Rh[i+h]为辅比较键, 对所述 集合 UGh中的后缀进行排序, 得到 2h-次序后缀数组 SA2h
结合第二方面或第二方面的上述可能的实现方式, 在第七种可能的实 现方式中, 所述第三获取单元, 具体用于
根据相邻元素比较规则对所述 2h-次序后缀数组 8 211中的后缀进行比 较, 得到第一辅助数组 NC2h;
对所述第一辅助数组 NC21^A行前缀求和, 得到第二辅助数组 NS2h; 如果所述第二辅助数组 NS2h中的一个以上连续后缀有相同的值, 则 所述一个以上连续后缀组成一个未排序后缀段;
将一个以上的未排序后缀段组成未排序后缀的集合 UG2h
结合第二方面或第二方面的上述可能的实现方式, 在第八种可能的实 现方式中, 所述 2h-次序后缀数组 8 211所占用的空间为所述后缀数组 SA0 所占用的空间。
结合第二方面或第二方面的上述可能的实现方式, 在第九种可能的实 现方式中, 所述排序单元, 具体用于
根据预设长度 T将所述集合 UGh的后缀段划分为 S型后缀段和 L型 后缀段;
分别对所述 S型后缀段和 L型后缀段进行排序, 得到 2h-次序后缀数 组 SA2h
结合第二方面的第九种可能的实现方式, 在第十种可能的实现方式 中, 所述排序单元, 具体用于
将所述集合 UGh的任一后缀段的长度与所述预设长度 T进行比较,将 所述集合 UGh中后缀段长度小于等于所述预设长度 T , 则将小于等于所述 预设长度 T的后缀作为 S型后缀段,将大于所述预设长度 T的后缀作为 L 型后缀段。
第三方面, 本发明实施例提供一种后缀数组的构造装置, 包括: 处理 器和和存储器; 所述存储器用于存储指令;
所述处理器执行所述存储器中存储的指令, 用于:
根据字符串的后缀数组 SAQ和第一名次数组 RQ, 获取所述后缀数组 SAQ的 h-次序后缀数组 SAh, 及第二名次数组 Rh, h为变量, 初始值为 1 ; 根据所述 h-次序后缀数组 SAh,获取所述 h-次序后缀数组 SAh中未排 序后缀的集合 UGh;
对所述集合 UGh中的所有后缀进行排序,得到 2h-次序后缀数组 SA2h; 根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取另一个 未排序的后缀的集合 UG2h; 若所述集合 UG2h为空集合, 则得到排序的后 缀数组 SA。
结合第三方面, 在第一种可能的实现方式中, 所述处理器, 还用于 根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取第三名 次数组 R2h和另一个未排序的后缀的集合 UG2h;
若所述集合 UG2h不为空集合, 则更新所述变量 h的值, 根据第三名 次数组 R2h对未排序后缀的集合 UG2h进行排序, 用于获取第 N个未排序 的后缀的集合 UG2,. , 直至最后获取的第 N 个未排序的后缀的集合 UG^^ 为空集合, 得到排序的后缀数组 SA; N为大于 2的自然数。
结合第三方面的第一种可能的实现方式中,在第二种可能的实现方式 中, 所述处理器, 具体用于将所述变量 h的值更新为 2h。
结合第三方面或第三方面的上述可能的实现方式,在第三种可能的实 现方式中, 所述处理器, 还用于
初始化输入的字符串, 得到字符串的后缀数组 SAQ ;
将所述后缀数组 SAQ中的后缀 Si的起始字符位置进行调整,得到所述 字符串的名次数组 RQ
结合第三方面或第三方面的上述可能的实现方式, 在第四种可能的实 现方式中, 所述处理器, 具体用于
h为初始值时, 以所述后缀数组 SAQ中每个后缀 的第一个字符为比 较键, 将所述后缀数组 SAQ中的每个后缀 Si进行排序, 得到所述 h-次序 后缀数组 SAh和所述第二名次数组 Rh
结合第三方面的第四种可能的实现方式, 在第五种可能的实现方式 中, 所述处理器, 具体用于
确定所述 h-次序后缀数组 SAh中有大于一个的连续后缀的第一个字 符相同; 将所述 h-次序后缀数组 SAh中具有一个以上连续后缀的第一个字符 相同的后缀组成一个以上的未排序后缀段 [a, b] ; a 为未排序后缀段中的 起始后缀的位置, b为未排序后缀段中的结束后缀的位置;
所述一个以上的未排序后缀段 [a, b]组成未排序后缀的集合 UGh。 结合第三方面或第三方面的上述可能的实现方式, 在第六种可能的实 现方式中, 所述处理器, 具体用于
采用所述集合 UGh中任一后缀 Si的 h-名次数组元素 Rh[i]为主比较键, 所述集合 UGh中后缀 81+11的 h-名次数组元素 Rh[i+h]为辅比较键, 对所述 集合 UGh中的后缀进行排序, 得到 2h-次序后缀数组 SA2h
结合第三方面或第三方面的上述可能的实现方式, 在第七种可能的实 现方式中, 所述处理器, 具体用于
根据相邻元素比较规则对所述 2h-次序后缀数组 8 211中的后缀进行比 较, 得到第一辅助数组 NC2h;
对所述第一辅助数组 NC21^A行前缀求和, 得到第二辅助数组 NS2h; 如果所述第二辅助数组 NS2h中的一个以上连续后缀有相同的值, 则 所述一个以上连续后缀组成一个未排序后缀段;
将一个以上的未排序后缀段组成未排序后缀的集合 UG2h
结合第三方面或第三方面的上述可能的实现方式, 在第八种可能的实 现方式中, 所述 2h-次序后缀数组 8 211所占用的空间为所述后缀数组 SAo 所占用的空间。
结合第三方面或第三方面的上述可能的实现方式, 在第九种可能的实 现方式中, 所述处理器具体用于
根据预设长度 T将所述集合 UGh的后缀段划分为 S型后缀段和 L型 后缀段;
采用一个线程块对所述 S型后缀段进行排序,采用两个以上线程块对 所述 L型后缀段进行排序, 得到 2h-次序后缀数组 SA2h
结合第三方面的第九种可能的实现方式, 在第十种可能的实现方式 中,
所述处理器, 具体用于
将所述集合 UGh的任一后缀段的长度与所述预设长度 T进行比较,将 所述集合 UGh中后缀段长度小于等于所述预设长度 T, 则将小于等于所述 预设长度 T的后缀作为 S型后缀段,将大于所述预设长度 T的后缀作为 L 型后缀段。
由上述技术方案可知, 本发明实施例的后缀数组的构造方法及装置, 通过字符串的后缀数组 SAQ获取字符串的后缀数组的 h-次序后缀数组 SAh 和第二名次数组 Rh, 进而获取所述 h-次序后缀数组 SAh中未排序后缀的 集合 UGh, 对所述集合 UGh中的所有后缀进行排序, 得到 2h-次序后缀数 组 SA2h; 根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取另 一个未排序的后缀的集合 UG2h; 在所述集合 UG2h为空集合时, 得到排序 的后缀数组 SA, 由此可解决了现有技术中对已经找到最终名次的后缀重 复排序的问题, 同时可实现后缀数组的快速构成。 附图说明
图 1为本发明一实施例提供的实现后缀数组的构造方法的系统架构 图;
图 2A为本发明一实施例提供的后缀数组的构造方法的流程示意图; 图 2B为本发明一实施例提供的后缀字符串表的示意图;
图 3A为本发明另一实施例提供的后缀数组的构造方法的流程示意 图;
图 3B为本发明一实施例提供的 S型后缀段和 L型后缀段在 GPU中调 度的示意图;
图 4为本发明一实施例提供的后缀数组的构造装置的结构示意图; 图 5为本发明另一实施例提供的后缀数组的构造装置的结构示意图; 图 6为本发明另一实施例提供的后缀数组的构造装置的结构示意图。 具体实施方式
当前, 随着 GPU计算能力的不断增强, 将 GPU作为协处理器同中央 处理器 (Central Processing Unit, 简称 CPU) 协作以提高系统计算能力已 成为应用性能提升的一种重要手段。 由于 GPU具有大规模线程并发、 高 内存带宽等优势,可极大缓解计算密集 /数据密集型应用的计算速度瓶颈问 题。本发明实施例便提出了一种基于 GPU (或类似的高数据并发性的处理 器) 的后缀数组的构造方法。
图 1 示出了本发明实施例中提供的一种实现后缀数组的构造方法的 系统架构图, 如图 1所示, 本实施例的系统可包括: CPU、 GPU和主机存 储器; 其中, CPU分别与主机存储器、 GPU通过数据总线连接, 而主机 存储器与 GPU通过数据总线连接。
本实施例中的 GPU的执行受 CPU调度。 CPU根据业务特点, 选择合 适的方式进行处理, 比如简单业务由 CPU 自身处理, 数据并发的业务可 由 GPU处理。
GPU不能直接访问主机存储器保存的数据,而需先通过数据总线将主 机存储器的数据复制到 GPU的全局存储器中再访问。 在 GPU内部存在多 个线程块, 每个线程块具有相同数目的线程, 以及自有的共享存储器。 每 个线程拥有私有的计算资源 (如寄存器、 本地存储器等等) 。 GPU全局存 储器可被所有线程块的所有线程访问, 线程块的共享存储器只能被本线程 块的所有线程访问, 而线程的寄存器和本地存储器只能被本线程访问。
在数据处理前, 数据存储于磁盘设备中 (HDD) 。 一旦处理程序启动 时, 数据先由磁盘读取至 Memory, 继而由 CPU调度至自身或 GPU执行。
为表述方便,下面对本发明实施例中出现的一些符号 /术语给出相关说 明。
字符集: 一个字符集∑是一个建立了全序关系的集合, 即∑中的任意 两个不同元素 a和 b都具备确定的大小关系, 不是 a<b, 就是 a>b。 字符 集的元素称为字符。字符集中有个特殊字符' $ ',它只出现在字符串的末尾, 且为字符集中的最小元素。
字符串: 一个长度为 n的字符串是由 n个字符组成的数组 S[0,n-1]。 其中, S的最后一个元素即结束符固定为' $'。
子串: 字符串 S的子串 K[i, j] (i<j)是指由字符串 S中从位置 1开始 到位置 J结束的字符(包括位置 j)组成的子串,即 K[i,」]=S[i] S[i+l]...S[j]o 后缀: 字符串 S的后缀 是指由字符串 S中从位置工的字符开始到结 束符' $ '为止组成的子串, 即 Si=S[i]S[i+l]...$。
后缀数组: 后缀数组 SA为一个字符串 S的所有后缀按照字典顺序排 列形成的数组。 其包含的后缀由其起始位置表示。 即 1表示后缀 Si。
其中, SAW 表示后缀 是所有后缀中第 1小的后缀。
名次数组: 名次数组 R又称逆后缀数组 ISA。 其保存每个后缀的名次 值, ISA[i]=R[i]=j表示后缀 Si是所有后缀中第 j小的后缀。 因此, R、 SA 与 ISA具有以下关系: R=ISA=SA—
h-次序后缀数组: h-次序后缀数组 SAh是将一个字符串 S的所有后缀 按其起始的 h个字符为比较键而得到的数组。
另外, 下述的未排序后缀段是由未排序后缀组成的。 未排序后缀根据 其前 h个字符是否相同组成未排序后缀段。
图 2A示出了本发明实施例提供的一种后缀数组的构造方法的流程示 意图。 如图 2A所示, 本发明实施例的后缀数组的构造方法如下所述。
201、 根据字符串的后缀数组 SAQ和名次数组 RQ, 获取所述后缀数组 SAQ的 h-次序后缀数组 SAh, 及第一名次数组 Rh。 其中, h为变量, 初始 值为 1。
在本实施例中, h为初始值时, 可以将所述后缀数组 SAQ中每个后缀
S,的第一个字符为比较键,对所述后缀数组 SAQ中的每个后缀 进行排序, 得到所述 h-次序后缀数组 SAi和所述第二名次数组 。具体的,如果 SAJi]
= J, 则^ ] = 1。
202、 根据所述 h-次序后缀数组 SAh, 获取所述 h-次序后缀数组 SAh 中未排序后缀的集合 UGh;
当然, h为初始值时, 该未排序后缀的集合即为 UG^
203、 对所述集合 UGh中的所有后缀进行排序, 得到 2h-次序后缀数 组 SA2h
可选地, 还可根据第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获 取获取第三名次数组 R2h
举例来说, 采用所述集合 UGh中任一后缀 Si的 h-名次数组元素 Rh[i] 为主比较键, 所述集合 UGh中后缀 81+11的 h-名次数组元素 Rh[i+h]为辅比 较键, 对所述集合 UGh中的后缀进行排序, 得到 2h-次序后缀数组 SA2h
上述的 h-名次数组元素 Rh[i]和 h-名次数组元素 Rh[i+h]为第二名次数 组 Rh中的元素。 204、 根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取 另一个未排序的后缀的集合 UG2h;
205、 判断所述集合 1;0211是否为空集合。
206、 若所述集合 UG2h为空集合, 得到排序的后缀数组 SA。
可选地, 若所述集合 UG2h不为空集合, 更新所述变量 h的值, 重复 对未排序后缀的集合 UG2h进行排序, 直至最后获取的未排序的后缀的集 合为空集合, 得到排序的后缀数组 SA。
也就是说, 根据第三名次数组 R2h对未排序后缀的集合 UG2h进行排 序, 用于获取第 N个未排序的后缀的集合 UG^^ , 直至最后获取的第 N 个未排序的后缀的集合 UG^^ 为空集合, 得到排序的后缀数组 SA; N 为大于 2的自然数。
举例来说, 前述的更新所述变量 h的值, 可具体为: 将所述变量 h的 值更新为 2h。
也就是说, 判断新的未排序后缀集合 UG2h是否为空。 如不为空, 更 新 h值, g卩 h=2 X h。 回到前述的歩骤 203, SP , 对所述集合 UG2h中的所 有后缀进行排序, 得到 4h-次序后缀数组 SA4h
相应地, 歩骤 204 ' 、 根据所述第三名次数组 R2h、 所述 4h-次序后缀 数组 SA4h, 获取一个未排序的后缀的集合 UG4h;
判断新的未排序后缀集合 UG4h是否为空。 如不为空, 重复上述的过 程, 若在最后的 UG4h为空, 则得到最终的后缀数组, 记为 SA。
在迭代过程中,后缀数组及名次数组均可利用初始后缀数组及名次数 组的空间, 从而节省存储开销。 此外, 未排序后缀集合 UG也可以用数组 来保存, 因此也不对其在计算系统中的表示方式做限制。
也就是说, 在上述实施例中, 所述 2h-次序后缀数组 SA2h所占用的空 间可为所述后缀数组 SAQ所占用的空间, 以及名次数组 R2h所占用的空间 可为名次数组 RQ所占用的空间。 由此, 上述后缀数组的构造方法可节省 占用空间。
本实施例的后缀数组的构造方法,通过字符串的后缀数组 SAQ获取字 符串的后缀数组的 h-次序后缀数组 SAh和第二名次数组 Rh, 进而获取所 述 h-次序后缀数组 SAh中未排序后缀的集合 UGh, 对所述集合 UGh中的 所有后缀进行排序, 得到 2h-次序后缀数组 SA2h; 根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取另一个未排序的后缀的集合 UG2h; 在所述集合 UG2h为空集合时, 得到排序的后缀数组 SA, 由此可实现后缀 数据处理过程中加速后缀数组的构成, 同时解决了现有技术中对已经获得 最终名次的后缀进行重复排序的问题。
在一种可选的实现场景中, 在歩骤 201之前, 上述方法还可包括下述 未示出的歩骤 200:
200、 初始化输入的字符串 S , 得到字符串的后缀数组 SAQ ; 将所述后 缀数组 8 ()中的后缀 Si的起始字符位置进行调整,得到所述字符串的名次 数组 R0
举例来说, 将所述后缀数组 SAQ中的后缀 Si的起始字符位置放到 RQ 的第 1个位置, 即 SAQ[i]=RQ[i]=i。
可选地, 前述的歩骤 202可包括下述的图中未示出的子歩骤:
A202K 确定所述 h-次序后缀数组 SAh中有大于一个的连续后缀的第 —个字符相同;
A2022、 将所述 h-次序后缀数组 SAh中具有一个以上连续后缀的第一 个字符相同的后缀组成一个以上的未排序后缀段 [a,b] ; a为未排序后缀段 中的起始后缀的位置, b为未排序后缀段中的结束后缀的位置;
A2023、 所述一个以上的未排序后缀段 [a,b]组成未排序后缀的集合 UGh
以下采用一未排序的后缀数组进行举例说明。
对于输入字符串 τ,首先提取出其所有可能的后缀,比如 T为 g00gol$, 如图 2B的右边一列所示, 继而采用类似于前缀倍增方法对这些后缀进行 排序。 即整个排序过程由多个迭代过程组成, 但与现有技术不同的是, 本 实施例中通过引入已排序后缀的集合(Sorted group )和未排序后缀的集合 ( Unsorted group )的分类, 可避免现有技术中对已经排好名次的后缀进行 重复排序的问题。
具体地, 初始时 (即在第一次迭代计算开始前) , 所有后缀作为一个 后缀段均放置在 Unsorted group中。 而在每次迭代过程本实施例中可仅排 序 Unsorted group中的后缀, 从而避免对已确定好顺序位置的后缀进行重 复排序。 待所有后缀均确定顺序 (即全部后缀都已加入到 Sorted group ) 后, 则表示后缀排序过程完成。 从而, 后缀数组 SA及名次数组 R便可由 排序结果得出。
Unsorted group中的后缀的排序由多次(大于或等于 1 )迭代过程完成。 在每次迭代计算中, 每个后缀只取其前 k个字符用以排序, 且在排序后将 能确定全局顺序的后缀从 Unsorted group中移到 Sorted group中。 即对于 Unsorted group中每个后缀, 若存在其它后缀与之相等 (即它们的前 k个 字符相同) , 则表示这些相等的后缀不能通过它们的前 k个字符得以确定 顺序, 故将这些相等的后缀分别归到一组, 等待下一次迭代的计算;
若不存在其它后缀与之相等, 则该后缀在当前 Unsorted group中的顺 序位置可被确定, 故将它移到 Sorted group。 在一次迭代计算后, 若仍存 在未能确定顺序的后缀, 则增加 k值 (如 k=2k, 该处的 k对应前述图 2A 中所示的变量 h) 并转向下一次迭代过程, 否则整个排序过程完成。
例 1 :对输入字符 T =googol$ 的处理过程 (此处不给出 SA和 ISA的计算)。 步骤 1 : 提取后缀 (如图 2B右侧 suffixes)作为一个后缀段 ugl, 加入到
Unsorted group,
Unsorted group = {ugl= {googol$, oogol$, ogol$, gol$, ol$, 1$, $} },
Sorted grou 为
步骤 2 : 迭代处理 Unsorted group。 假设 k初始为 k=l, 且每次迭代后递增 1
第 1次迭代: 只考虑每个后缀的第一个字符用以排序, 故处理后结果为
Sorted group ={$, 1$}, Unsorted group = {ugl={ googol$, gol$}, ug2={ oogol$, ogol$, ol$} 第 2次迭代: 此时 k=2, 每个后缀的前两个字符用于排序, 处理结果为
Sorted group ={$, 1$, ogol$, ol$, oogol$}, Unsorted group = {ugl={ googol$, gol$} }
第 3次迭代: 此时 k=3, 每个后缀的前两个字符用于排序, 处理结果为
Sorted group ={$, 1$, gol$, googol$, ogol$, ol$, oogol$}, Unsorted group = { }
此时所有后缀已排序, 得到排序的后缀数组 SA。
为了提升 GPU构造后缀数组的速度, 本发明实施例针对 GPU并行数 据处理的特点,提出了一种对未排序后缀集合中的后缀进行并行排序的方 法, 从而提升图 2A中的歩骤 204的处理速度。
例如, 假设当前迭代值是 h, 前述的歩骤 204可包括下述的图中未示 出的子歩骤:
A2041、 根据相邻元素比较规则对所述 2h-次序后缀数组 SA2h中的后 缀进行比较, 得到第一辅助数组 NC2h;
具体的, 对于未排序后缀集合中的每个后缀段 [a, b], 将 NC2h[a]设置 为 a; 对于其他后缀, 与其左侧的相邻后缀以起始的 2h个字符为比较键进 行比较, 相同为 0, 不相同则为 1。
A2042、对所述第一辅助数组 NC21^A行前缀求和, 得到第二辅助数组 NS2h; 具体的, NS2h[i]=NC2h[0]+NC2h[l]+〜+NC2h[i]。
A2043、如果所述第二辅助数组 NS2h中的一个以上连续后缀有相同的 值, 则所述一个以上连续后缀组成一个未排序后缀段。
可选地, 根据第二辅助数组 NS2h, 将 SA2h中的元素分布到新数组的 对应位置, 得到名次数组 R2h; 具体的, 如果 NS2h[i]=」, 则 R2h[j]=i。
A2044、 将一个以上的未排序后缀段组成未排序后缀的集合 UG2h。 具体的, 如果 NS2h中的大于 1 个的连续元素有相同的值, 则这些元 素组成一个未排序后缀段。 未排序后缀集合 1;0211是所有未排序后缀段的 隹人
采 PI o
此外, 对未排序后缀集合 UGh中的每个后缀段 [a, b], 对于每个后缀 SAh[i] ( a«b ) , 以对应的后缀 SAh[i]+h的 h-名次 Rh[SAh[i]+h]为比较 键对该未排序后缀段进行排序, 得到 SA2h
值得注意的是, 在迭代过程中, 辅助数组如 NC, NS等都可以重复使 用, 从而节省存储开销。 因此, 在此不对 NC, NS的空间分配做限制。
为了提升 GPU构造后缀数组的速度,前述的歩骤 203中获取 2h-次序 后缀数组 SA2h可结合 GPU的多线程和高内存优势加速获取, 从而提升图 2A中的歩骤 203的处理速度。如图 3A所示, 本实施例的未排序后缀集合 的后缀并行处理方法如下所述。
301、 根据预设长度 T将所述集合 UGh的后缀段划分为 S型后缀段和 L型后缀段。
例如, 将所述集合 UGh的任一后缀段的长度与所述预设长度 T进行 比较, 所述集合 UGh中, 将不大于所述预设长度 T的后缀作为 S型后缀 段, 将大于所述预设长度 T的后缀作为 L型后缀段。 具体的, 对于一个后缀段 I=[a, b],如果其长度 |1|不大于预设值 t, 则 为 S型后缀段; 反之为 L型后缀段。
应说明的是, 后缀段中长度指后缀段中所包含的后缀个数。
302、 采用一个线程块对所述 S型后缀段进行排序, 采用两个以上线 程块对所述 L型后缀段进行排序, 得到 2h-次序后缀数组 SA2h
对 S型后缀段的处理和 L型后缀段的处理无顺序关系, 可并行执行。 因为 GPU中多个线程块可并行执行, 因此 S型后缀段的多个后缀段可以 同时进行排序。 同样的, L型后缀段的多个后缀段也可以同时进行排序。 因此, 这种方法可以极大的提高 GPU的计算利用率, 从而加快后缀数组 构造的速度。
对 GPU而言, 基数排序是目前效率最高的一种并行排序方法。 因此, 本发明实施例以并行基数排序为例, 阐述如何用 GPU来实现单线程块并 行排序和多线程块并行排序。
对于单线程块并行排序而言, 因为线程块内的所有线程可以访问该线 程块的共享存储器, 所以实现方法比较简单。 本发明实施例采用最低有效 位基数排序方法 (least significant bit radix sort) 。 基数排序的每次迭代的 比特位可以配置, 一般视 GPU的计算能力和存储空间而定。 单线程块并 行基数排序的单次迭代的歩骤如下所示。
举例来说,歩骤 302中的采用一个线程块对所述 S型后缀段进行排序, 包括:
S01、 计算所述 S型后缀段的第一直方图11。
具体的, 对所有元素的当前比较键, 计算每个具体值的元素个数。 第 一直方图 H用数组保存,键值作为数组下标, 而该键值对应的元素个数作 为该下标对应的数组元素。
S02、 对所述第一直方图 H执行前缀求和操作, 得到所述 S型后缀段 的前缀求和结果数组 M。 g卩, M[i] = H[0]+H[l]+〜+H[i]。
S03、 根据前缀求和结果数组 M, 将后缀分布到对应的位置。
具体的, 键值为 1的数组元素的起始位置是 M[i]。 如果有相同键值的 数组元素, 则依次放在后续位置。
以上所述的歩骤由一个独立的并行处理代码 (内核函数, kernel function) 执行。 对于歩骤 S01和歩骤 S02而言, 可以进一歩利用 GPU的 特性来加快计算速度。 比如线程块的每个线程先计算本地的直方图并保持 在寄存器中, 然后将本地直方图复制到线程块的共享存储器中, 然后再对 所有的直方图执行前缀求和操作。
歩骤 302中的采用两个以上线程块对所述 L型后缀段进行排序,包括:
M01、 根据每一线程块所处理的数组长度将所述 L型后缀段分片, 并 将分片后的所述 L型后缀段分配给对应的线程块。
例如, 假设数组长度为 1, 每个线程块负责的数组长度为 t, 则使用 1/t 个线程块。
M02、 获取每个分片后的所述 L型后缀段的直方图, 且将所有线程块 获取的直方图进行前缀求和操作,得到所述 L型后缀段的前缀求和结果数 组 Mg
也就是说, 每个线程块先对所负责的后缀段分片计算直方图, 得到本 线程块的后缀段分片的直方图 Hb,并将该结果复制到 GPU的全局存储器。
在每个线程块完成本线程块的直方图计算后,将所有的线程块直方图 一起执行前缀求和操作, 得到一个全局的前缀求和结果数组 Mg
M03、 根据全局前缀求和结果数组 Mg, 将后缀分布到完成排序的后 缀段对应的位置。
例如, 具体的, 键值为 1的数组元素的起始位置是 Mg[i], 如果有相同 键值的数组元素, 则依次放在后续位置。
也就是说, 根据所述前缀求和结果数组 M和所述全局前缀求和结构 数组 Mg, 得到 2h-次序后缀数组 SA2h
上述方式可以充分发挥 GPU的多线程块处理的优势。
歩骤 M01是由 CPU执行, 而其余歩骤由 GPU执行, 且每个歩骤由 独立的内核函数实现。 歩骤 M02可由多个线程块并发执行。 歩骤 M03只 有在歩骤 M02的所有线程块完成执行后才能执行。 歩骤 M03可需要一个 线程块, 或者多个线程块执行。 每个线程块负责一组独立的键值。
因为 GPU的不同线程块的线程必须通过 GPU全局存储器实现数据共 享, 因此多线程块并行基数排序方法比单线程块并行基数排序方法稍显复 杂。 上述方法在 GPU环境下, 充分利用 GPU的多并发线程及高内存带宽 优势, 加速后缀数组构造过程的运行。
上述实施例中提出了对 Unsorted group中后缀的并行化处理, 进而能 适用于类似于 GPU的高数据并行性环境。如上的歩骤 S01至歩骤 S03 ,歩 骤 M01至歩骤 M03。 上述歩骤均是一个独立的并发处理过程 (即每个歩 骤都可由多个线程并发来处理) 。
以下结合图 1对 GPU的并行处理进行举例说明。
对应前述的歩骤 301, 为充分利用 GPU的并行处理能力, 将 Unsorted group中的各后缀根据其所在组的大小分成两类大小分成两类中的各后缀 段根据其段长度分成两类: 1 ) S类 (小组类, 即 S型后缀段) : S={M& I s i z e(ugi) ^ } , 即该类中各后缀段 包含的后缀个数需小于或等于预定 的阈值 τ, (如上的预设长度 Τ ) ; 2 )否则为 L类(大组类即 L型后缀段) 。
Unsorted group数据在 GPU中的计算执行受 CPU的调度。 且 S类中 的各后缀段的排序由 GPU中的单个 ThreadBlock (线程块) 负责, 而 L类 的各后缀段的排序则由多个 ThreadBlock线程块执行 (如图 3B所示, 其 中后缀段 Mg , Mg2和 属于 S类, 而 Mg4和 Mg5属于 L类) 。
例如, Unsorted group中后缀段的分类。
对于 Unsorted group = { ugl ={ississippi$, issippi$, i$ }, ug2 =
{ssissippi$, sissippi$, ssippi$, sippi$ }, ug3 = {ppi$, pi$} } , 且 τ =3, 贝 ij ugl 和 将被分到 S类, 而 Mg2分到 L类。
S类和 L类中后缀段的排序可采用如下不同的子歩骤实现:
具体地, S类的后缀段的排序: 每个后缀段的排序由一个内核函数负 责, 且分成三个歩骤完成:
S01、 计算该后缀段的直方图 H (只考虑 k个连续比特位) ;
S02、 扫描直方图 H, 获取各线程的散布偏移值;
S03、 将各线程的排序结果写入线程块的共享存储器, 由后者继而传 输到 GPU的全局存储器。
另外, L类的后缀段的排序: 也由三个歩骤组成, 但此处每个歩骤由 一个内核函数负责:
M01、 以线程块为单位计算它们各自的直方图; M02、 扫描各线程块的直方图, 并计算各线程块的散布偏移值;
M03、 同 S类的后缀段的排序, 各线程块处理各自的数据。
特别地, 排序后的结果汇聚到 GPU的全局存储器, 随后由 GPU的各 线程块依次完成余下的歩骤, 且每个歩骤也均并发执行。
例如, 可从全局上比较各后缀段内的各相邻后缀的相对大小; 对各后 缀段的相邻比较结果进行前缀求和操作; 由前面歩骤所得结果, 计算排序 后的后缀数组对应的名次数组及新的 Unsorted group等等。
上述实施例中提出了对 Unsorted group中后缀的并行化处理, 进而能 适用于类似于 GPU的高数据并行性环境。
图 4示出了本发明一实施例提供的后缀数组的构造装置的结构示意 图,如图 4所示,本实施例的后缀数组的构造装置包括:第一获取单元 41、 第二获取单元 42、 排序单元 43和第三获取单元 44;
其中, 第一获取单元 41用于根据字符串的后缀数组 SAQ和第一名次 数组 Ro, 获取所述后缀数组 SAQ的 h-次序后缀数组 SAh, 及第二名次数组 Rh, h为变量, 初始值为 1 ;
第二获取单元 42用于根据所述 h-次序后缀数组 SAh, 获取所述 h-次 序后缀数组 SAh中未排序后缀的集合 UGh;
排序单元 43用于对所述集合 UGh中的所有后缀进行排序, 得到 2h- 次序后缀数组 SA2h;
举例来说, 所述排序单元 43具体用于, 采用所述集合 UGh中任一后 缀 Si的 h-名次数组元素 Rh[i]为主比较键, 所述集合 UGh中后缀 Si+ h- 名次数组元素 Rh[i+h]为辅比较键, 对所述集合 UGh中的后缀进行排序, 得到 2h-次序后缀数组 SA2h
第三获取单元 44用于根据所述第二名次数组 Rh、 所述 2h-次序后缀 数组 SA2h, 获取另一个未排序的后缀的集合 UG2h; 若所述集合 UG2h为空 集合, 则得到排序的后缀数组 SA。
可选地, 所述第三获取单元, 还用于根据所述第二名次数组 Rh、所述 2h-次序后缀数组 SA2h, 获取第三名次数组 R2h
若所述集合 UG2h不为空集合, 则前述的后缀数组的构造装置还可包 括: 变量更新单元 45, 如图 5所示, ; 所述变量更新单元 45用于更新所述变量 h的值; 举例来说, 所述变 量更新单元, 具体用于将所述变量 h的值更新为 2h。
此时, 所述排序单元 43还用于, 结合变量更新单元重复对未排序后 缀的集合 UG2H进行排序, 直至所述第三获取单元最后获取的未排序的后 缀的集合为空集合, 得到排序的后缀数组 SA。 也就是说, 结合所述第三 获取单元获取的第三名次数组 R2h和所述变量更新单元更新的变量 h的值 对未排序后缀的集合 UG2H进行排序, 用于获取第 N个未排序的后缀的集 合 UG2 _D, 直至所述第三获取单元最后获取的第 N个未排序的后缀的集 合 UG2 _D为空集合, 得到排序的后缀数组 SA; N为大于 2的自然数。
在本实施例中, 所述 2h-次序后缀数组 SA2H所占用的空间为所述后缀 数组 SAQ所占用的空间。
在一种可选的实现场景中,前述的后缀数组的构造装置还包括图中未 示出的第四获取单元 46, 该第四获取单元 46用于在所述第一获取单元 41 获取所述 h-次序后缀数组 SAh之前,
初始化输入的字符串, 得到字符串的后缀数组 SAQ ;
将所述后缀数组 SAQ中的后缀 Si的起始字符位置进行调整,得到所述 字符串的名次数组 RQ
举例来说, 所述第一获取单元 41 可具体用于, h为初始值时, 以所 述后缀数组 SAQ中每个后缀 Si的第一个字符为比较键, 将所述后缀数组 SAQ中的每个后缀 Si进行排序,得到所述 h-次序后缀数组 SAh和第二名次 数组 Rh
可选地, 所述第二获取单元 42具体用于, 确定所述 h-次序后缀数组 SAH中有大于一个的连续后缀的第一个字符相同;
将所述 h-次序后缀数组 SAh中具有一个以上连续后缀的第一个字符相 同的后缀组成一个以上的未排序后缀段 [a, b] ; a为未排序后缀段中的起始 后缀的位置, b为未排序后缀段中的结束后缀的位置;
所述一个以上的未排序后缀段 [a, b]组成未排序后缀的集合 UGH。 可选地, 所述第三获取单元 44 具体用于, 根据相邻元素比较规则对 所述 2h-次序后缀数组 SA2H中的后缀进行比较, 得到第一辅助数组 NC2H; 对所述第一辅助数组 NC21^A行前缀求和, 得到第二辅助数组 NS2H; 如果所述第二辅助数组 NS2h中的一个以上连续后缀有相同的值,则所 述一个以上连续后缀组成一个未排序后缀段;
将一个以上的未排序后缀段组成未排序后缀的集合 UG2h
在第二种可选的实现场景中, 前述的排序单元 43具体用于, 根据预设长度 T将所述集合 UGh的后缀段划分为 S型后缀段和 L型 后缀段;
例如,可将所述集合 UGh的任一后缀段的长度与所述预设长度 T进行 比较, 将所述集合 UGh中后缀段长度小于等于所述预设长度 T, 则将小于 等于所述预设长度 T的后缀作为 S型后缀段,将大于所述预设长度 T的后 缀作为 L型后缀段。
分别对所述 S型后缀段和 L型后缀段进行排序, 得到 2h-次序后缀数 组 SA2h
例如, 计算所述 S型后缀段的第一直方图 H;
对所述第一直方图 H执行前缀求和操作,得到所述 S型后缀段的前缀 求和结果数组 M。
此外,可同时根据每一线程块所处理的数组长度将所述 L型后缀段分 片, 并将分片后的所述 L型后缀段分配给每一线程块;
获取每个分片后的所述 L型后缀段的直方图,且将所有线程块获取的 直方图进行前缀求和操作, 得到所述 L型后缀段的前缀求和结果数组 Mg; 根据所述前缀求和结果数组 M和所述全局前缀求和结构数组 Mg, 得 得到 2h-次序后缀数组 SA2h
由上述实施例可知, 本实施例的后缀数组的构造装置, 可避免对已经 找到最终名次的后缀重复排序的问题, 且能够实现后缀数据处理过程中加 速后缀数组的构成。
本实施例的装置, 可以用于执行图 2A、 图 3A所示方法实施例的技术 方案, 其实现原理和技术效果类似, 此处不再赘述。
图 6示出了本发明另一实施例提供的后缀数组的构造装置的结构示意 图, 如图 6所示, 本实施例的后缀数组的构造装置包括: 总线 61 ; 以及连 接到总线 61的处理器 62、 存储器 63和接口 64, 其中该存储器 63用于存 储指令, 该处理器 62用于执行该指令, 用于 根据字符串的后缀数组 SAQ和第一名次数组 RQ, 获取所述后缀数组 SAQ的 h-次序后缀数组 SAh, 及第二名次数组 Rh, h为变量, 初始值为 1 ; 根据所述 h-次序后缀数组 SAh,获取所述 h-次序后缀数组 SAh中未排 序后缀的集合 UGh;
对所述集合 UGh中的所有后缀进行排序,得到 2h-次序后缀数组 SA2h; 根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取另一个 未排序的后缀的集合 UG2h; 若所述集合 UG2h为空集合, 则得到排序的后 缀数组 SA。
处理器 62执行上述指令, 还用于, 根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h,获取第三名次数组 R2h和另一个未排序的后缀的集 合 UG2h;
若所述集合 UG2h不为空集合, 则更新所述变量 h的值, 根据第三名 次数组 R2h对未排序后缀的集合 UG2h进行排序, 用于获取第 N个未排序 的后缀的集合 !; , 直至最后获取的第 N 个未排序的后缀的集合 为空集合, 得到排序的后缀数组 SA; N为大于 2的自然数。
举例来说, 处理器 62执行上述指令, 用于将所述变量 h的值更新为 在本实施例中, 上述 2h-次序后缀数组 SA2h所占用的空间为所述后缀 数组 SAQ所占用的空间。
在一种可选的实现场景中, 所述处理器 62执行上述指令, 还用于, 初始化输入的字符串, 得到字符串的后缀数组 SAQ ;
将所述后缀数组 SAQ中的后缀 Si的起始字符位置进行调整,得到所述 字符串的名次数组 RQ
可选地, 所述处理器 62执行上述指令, 具体用于,
h为初始值时, 以所述后缀数组 SAQ中每个后缀 Si的第一个字符为比 较键, 将所述后缀数组 SAQ中的每个后缀 Si进行排序, 得到所述 h-次序后 缀数组 SAi和所述第二名次数组 (即, 所述 h-次序后缀数组 SAh和所 述第二名次数组 Rh) 。
可选地, 所述处理器 62执行上述指令, 具体用于
确定所述 h-次序后缀数组 SAh中有大于一个的连续后缀的第一个字符 相同;
将所述 h-次序后缀数组 SAh中具有一个以上连续后缀的第一个字符相 同的后缀组成一个以上的未排序后缀段 [a, b] ; a为未排序后缀段中的起始 后缀的位置, b为未排序后缀段中的结束后缀的位置;
所述一个以上的未排序后缀段 [a, b]组成未排序后缀的集合 UGh。 可选地, 所述处理器 62执行上述指令, 具体用于
采用所述集合 UGh中任一后缀 Si的 h-名次数组元素 Rh[i]为主比较键, 所述集合 UGh中后缀 81+11的 h-名次数组元素 Rh[i+h]为辅比较键, 对所述 集合 UGh中的后缀进行排序, 得到 2h-次序后缀数组 SA2h
可选地, 所述处理器 62执行上述指令, 具体用于
根据相邻元素比较规则对所述 2h-次序后缀数组 8 211中的后缀进行比 较, 得到第一辅助数组 NC2h;
对所述第一辅助数组 NC21^A行前缀求和, 得到第二辅助数组 NS2h; 如果所述第二辅助数组 NS2h中的一个以上连续后缀有相同的值,则所 述一个以上连续后缀组成一个未排序后缀段;
将一个以上的未排序后缀段组成未排序后缀的集合 UG2h
在具体的应用过程中, 处理器 62执行上述指令, 对所述集合 UGh中 的所有后缀进行排序, 得到 2h-次序后缀数组 SA2h, 包括:
根据预设长度 T将所述集合 UGh的后缀段划分为 S型后缀段和 L型 后缀段;
例如,将所述集合 UGh的任一后缀段的长度与所述预设长度 T进行比 较, 将所述集合 UGh中后缀段长度小于等于所述预设长度 T, 则将小于等 于所述预设长度 T的后缀作为 S型后缀段,将大于所述预设长度 T的后缀 作为 L型后缀段。
采用一个线程块对所述 S型后缀段进行排序, 采用两个以上线程块对 所述 L型后缀段进行排序, 得到 2h-次序后缀数组 SA2h
例如, 计算所述 S型后缀段的第一直方图 H;
对所述第一直方图 H执行前缀求和操作,得到所述 S型后缀段的前缀 求和结果数组 M。
可与 S型后缀段同时实现的是, 根据每一线程块所处理的数组长度将 所述 L型后缀段分片, 并将分片后的所述 L型后缀段分配给每一线程块; 获取每个分片后的所述 L型后缀段的直方图,且将所有线程块获取的 直方图进行前缀求和操作, 得到所述 L型后缀段的前缀求和结果数组 Mg; 根据所述前缀求和结果数组 M和所述全局前缀求和结构数组 Mg, 得 到 2h-次序后缀数组 SA2h
因此, 本发明实施例的后缀数组的构造装置, 通过存储器存储指令, 处理器执行上述指令, 从而能够避免对已经找到最终名次的后缀重复排序 的问题, 且能够实现加速后缀数组的构成。
本实施例的装置, 可以用于执行图 2A、 图 3A所示方法实施例的技术 方案, 其实现原理和技术效果类似, 此处不再赘述。
本领域普通技术人员可以理解: 实现上述各方法实施例的全部或部分 歩骤可以通过程序指令相关的硬件来完成。 前述的程序可以存储于一计算 机可读取存储介质中。 该程序在执行时, 执行包括上述各方法实施例的歩 骤; 而前述的存储介质包括: ROM、 RAM, 磁碟或者光盘等各种可以存 储程序代码的介质。 最后应说明的是: 以上各实施例仅用以说明本发明的技术方案, 而非 对其限制; 尽管参照前述各实施例对本发明进行了详细的说明, 本领域的 普通技术人员应当理解: 其依然可以对前述各实施例所记载的技术方案进 行修改, 或者对其中部分或者全部技术特征进行等同替换; 而这些修改或 者替换, 并不使相应技术方案的本质脱离本发明各实施例技术方案的范 围。

Claims (1)

  1. 权 利 要 求 书
    1、 一种后缀数组的构造方法, 其特征在于, 包括:
    根据字符串的后缀数组 SAQ和第一名次数组 RQ, 获取所述后缀数组 SAQ的 h-次序后缀数组 SAh, 及第二名次数组 Rh, h为变量, 初始值为 1 ; 根据所述 h-次序后缀数组 SAh,获取所述 h-次序后缀数组 SAh中未排 序后缀的集合 UGH;
    对所述集合 UGH中的所有后缀进行排序,得到 2h-次序后缀数组 SA2H; 根据所述第二名次数组 RH、 所述 2h-次序后缀数组 SA2H, 获取另一个 未排序的后缀的集合 UG2H; 若所述集合 UG2H为空集合, 则得到排序的后 缀数组 SA。
    2、 根据权利要求 1 所述的方法, 其特征在于, 所述根据所述第二名 次数组 RH、 所述 2h-次序后缀数组 SA2H, 获取另一个未排序的后缀的集合 UG2H, 包括:
    根据所述第二名次数组 RH、 所述 2h-次序后缀数组 SA2H, 获取第三名 次数组 R2H和另一个未排序的后缀的集合 UG2H;
    所述方法还包括:
    若所述集合 UG2H不为空集合, 则更新所述变量 h的值, 根据第三名 次数组 R2H对未排序后缀的集合 UG2H进行排序, 用于获取第 N个未排序 的后缀的集合 UG2,. , 直至最后获取的第 N 个未排序的后缀的集合 UG^^ 为空集合, 得到排序的后缀数组 SA; N为大于 2的自然数。
    3、 根据权利要求 2所述的方法, 其特征在于, 所述更新所述变量 h 的值, 包括:
    将所述变量 h的值更新为 2h。
    4、 根据权利要求 1至 3任一所述的方法, 其特征在于, 所述根据字 符串的后缀数组 SAQ和第一名次数组 RQ, 获取所述后缀数组 SAQ的 h-次 序后缀数组 SAH的歩骤之前, 所述方法还包括:
    初始化输入的字符串, 得到字符串的后缀数组 SAQ ;
    将所述后缀数组 SAQ中的后缀 Si的起始字符位置进行调整,得到所述 字符串的名次数组 RQ
    5、 根据权利要求 1至 4任一所述的方法, 其特征在于, 所述根据字 符串的后缀数组 SAQ和名次数组 RQ, 获取所述后缀数组 SAQ的 h-次序后 缀数组 SAh, 及第二名次数组 Rh, 包括:
    h为初始值时, 以所述后缀数组 SAQ中每个后缀 的第一个字符为比 较键, 将所述后缀数组 SAQ中的每个后缀 进行排序, 得到所述 h-次序 后缀数组 SAh和所述第二名次数组 Rh
    6、 根据权利要求 5所述的方法, 其特征在于, 所述根据所述 h-次序 后缀数组 SAh, 获取所述 h-次序后缀数组 SAh中未排序后缀的集合 UGh, 包括:
    确定所述 h-次序后缀数组 SAh中有大于一个的连续后缀的第一个字 符相同;
    将所述 h-次序后缀数组 SAh中具有一个以上连续后缀的第一个字符 相同的后缀组成一个以上的未排序后缀段 [a, b] ; a 为未排序后缀段中的 起始后缀的位置, b为未排序后缀段中的结束后缀的位置;
    所述一个以上的未排序后缀段 [a, b]组成未排序后缀的集合 UGh。 7、 根据权利要求 1至 6任一所述的方法, 其特征在于, 所述对所述 集合 UGh中的所有后缀进行排序, 得到 2h-次序后缀数组 SA2h, 包括: 采用所述集合 UGh中任一后缀 Si的 h-名次数组元素 Rh[i]为主比较键, 所述集合 UGh中后缀 81+11的 h-名次数组元素 Rh[i+h]为辅比较键, 对所述 集合 UGh中的后缀进行排序, 得到 2h-次序后缀数组 SA2h
    8、 根据权利要求 1至 7任一所述的方法, 其特征在于, 所述根据所 述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取另一个未排序的后 缀的集合 UG2h, 包括:
    根据相邻元素比较规则对所述 2h-次序后缀数组 8 211中的后缀进行比 较, 得到第一辅助数组 NC2h;
    对所述第一辅助数组 NC21^A行前缀求和, 得到第二辅助数组 NS2h; 如果所述第二辅助数组 NS2h中的一个以上连续后缀有相同的值, 则 所述一个以上连续后缀组成一个未排序后缀段;
    将一个以上的未排序后缀段组成未排序后缀的集合 UG2h
    9、 根据权利要求 1至 8任一所述的方法, 其特征在于, 所述 2h-次序 后缀数组 8 211所占用的空间为所述后缀数组 SA(^^占用的空间。 10、 根据权利要求 1至 9任一所述的方法, 其特征在于, 所述对所述 集合 UGh中的所有后缀进行排序, 得到 2h-次序后缀数组 SA2h, 包括: 根据预设长度 T将所述集合 UGh的后缀段划分为 S型后缀段和 L型 后缀段;
    采用一个线程块对所述 S型后缀段进行排序,采用两个以上线程块对 所述 L型后缀段进行排序, 得到 2h-次序后缀数组 SA2h
    11、 根据权利要求 10所述的方法, 其特征在于, 所述预设长度 T将 所述集合 UGh的后缀段划分为 S型后缀段和 L型后缀段, 包括:
    将所述集合 UGh的任一后缀段的长度与所述预设长度 T进行比较,将 所述集合 UGh中后缀段长度小于等于所述预设长度 T, 则将小于等于所述 预设长度 T的后缀作为 S型后缀段,将大于所述预设长度 T的后缀作为 L 型后缀段。
    12、 一种后缀数组的构造装置, 其特征在于, 包括:
    第一获取单元, 用于根据字符串的后缀数组 SA(^n第一名次数组 RQ, 获取所述后缀数组 SAQ的 h-次序后缀数组 SAh, 及第二名次数组 Rh, h为 变量, 初始值为 1 ;
    第二获取单元, 用于根据所述 h-次序后缀数组 SAh, 获取所述 h-次序 后缀数组 SAh中未排序后缀的集合 UGh;
    排序单元, 用于对所述集合 UGh中的所有后缀进行排序, 得到 2h-次 序后缀数组 SA2h;
    第三获取单元, 用于根据所述第二名次数组 Rh、 所述 2h-次序后缀数 组 SA2h, 获取另一个未排序的后缀的集合 UG2h; 若所述集合 UG2h为空集 合, 则得到排序的后缀数组 SA。
    13、 根据权利要求 12所述的装置, 其特征在于, 所述第三获取单元, 还用于
    根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取第三名 次数组 R2h;
    在所述集合 110211不为空集合时, 所述装置还包括: 变量更新单元; 所述变量更新单元, 用于更新所述变量 h的值;
    所述排序单元, 还用于 结合所述第三获取单元获取的第三名次数组 R2h和所述变量更新单元 更新的变量 h的值对未排序后缀的集合 UG2H进行排序, 用于获取第 N个 未排序的后缀的集合 直至所述第三获取单元最后获取的第 N个 未排序的后缀的集合 UG^ )为空集合, 得到排序的后缀数组 SA; N为大 于 2的自然数。
    14、 根据权利要求 13所述的装置, 其特征在于, 所述变量更新单元, 具体用于
    将所述变量 h的值更新为 2h。
    15、 根据权利要求 12至 14任一所述的装置, 其特征在于, 所述装置 还包括: 第四获取单元, 用于在所述第一获取单元获取所述 h-次序后缀数 组 SAh之前, 初始化输入的字符串, 得到字符串的后缀数组 SAQ ;
    将所述后缀数组 SAQ中的后缀 Si的起始字符位置进行调整,得到所述 字符串的名次数组 RQ
    16、 根据权利要求 12至 15任一所述的装置, 其特征在于, 所述第一 获取单元, 具体用于
    h为初始值时, 以所述后缀数组 SAQ中每个后缀 的第一个字符为比 较键, 将所述后缀数组 SAQ中的每个后缀 进行排序, 得到所述 h-次序 后缀数组 SAH和第二名次数组 RH
    17、 根据权利要求 16所述的装置, 其特征在于, 所述第二获取单元, 具体用于
    确定所述 h-次序后缀数组 SAh中有大于一个的连续后缀的第一个字 符相同;
    将所述 h-次序后缀数组 SAh中具有一个以上连续后缀的第一个字符 相同的后缀组成一个以上的未排序后缀段 [a, b] ; a 为未排序后缀段中的 起始后缀的位置, b为未排序后缀段中的结束后缀的位置;
    所述一个以上的未排序后缀段 [a, b]组成未排序后缀的集合 UGh
    18、 根据权利要求 12至 17任一所述的装置, 其特征在于, 所述排序 单元, 具体用于
    采用所述集合 UGh中任一后缀 Si的 h-名次数组元素 Rh[i]为主比较键, 所述集合 UGh中后缀 Si+1^ h-名次数组元素 Rh[i+h]为辅比较键, 对所述 集合 UGh中的后缀进行排序, 得到 2h-次序后缀数组 SA2h
    19、 根据权利要求 12至 18任一所述的装置, 其特征在于, 所述第三 获取单元, 具体用于
    根据相邻元素比较规则对所述 2h-次序后缀数组 8 211中的后缀进行比 较, 得到第一辅助数组 NC2h;
    对所述第一辅助数组 NC21^A行前缀求和, 得到第二辅助数组 NS2h; 如果所述第二辅助数组 NS2h中的一个以上连续后缀有相同的值, 则 所述一个以上连续后缀组成一个未排序后缀段;
    将一个以上的未排序后缀段组成未排序后缀的集合 UG2h
    20、 根据权利要求 12至 19任一所述的装置, 其特征在于, 所述 2h- 次序后缀数组 8 211所占用的空间为所述后缀数组 SA(^^占用的空间。
    21、 根据权利要求 12至 20任一所述的装置, 其特征在于, 所述排序 单元, 具体用于
    根据预设长度 T将所述集合 UGh的后缀段划分为 S型后缀段和 L型 后缀段;
    分别对所述 S型后缀段和 L型后缀段进行排序, 得到 2h-次序后缀数 组 SA2h
    22、 根据权利要求 21所述的装置, 其特征在于, 所述排序单元, 具 体用于
    将所述集合 UGh的任一后缀段的长度与所述预设长度 T进行比较,将 所述集合 UGh中后缀段长度小于等于所述预设长度 T, 则将小于等于所述 预设长度 T的后缀作为 S型后缀段,将大于所述预设长度 T的后缀作为 L 型后缀段。
    23、 一种后缀数组的构造装置, 其特征在于, 包括:
    处理器和和存储器; 所述存储器用于存储指令;
    所述处理器执行所述存储器中存储的指令, 用于:
    根据字符串的后缀数组 SAQ和第一名次数组 RQ, 获取所述后缀数组 SAQ的 h-次序后缀数组 SAh, 及第二名次数组 Rh, h为变量, 初始值为 1 ; 根据所述 h-次序后缀数组 SAh,获取所述 h-次序后缀数组 SAh中未排 序后缀的集合 UGh; 对所述集合 UGh中的所有后缀进行排序,得到 2h-次序后缀数组 SA2h; 根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取另一个 未排序的后缀的集合 UG2h; 若所述集合 UG2h为空集合, 则得到排序的后 缀数组 SA。
    24、 根据权利要求 23所述的装置, 其特征在于, 所述处理器, 还用 于
    根据所述第二名次数组 Rh、 所述 2h-次序后缀数组 SA2h, 获取第三名 次数组 R2h和另一个未排序的后缀的集合 UG2h;
    若所述集合 UG2h不为空集合, 则更新所述变量 h的值, 根据第三名 次数组 R2h对未排序后缀的集合 UG2h进行排序, 用于获取第 N个未排序 的后缀的集合 UG2,. , 直至最后获取的第 N 个未排序的后缀的集合 UG^^ 为空集合, 得到排序的后缀数组 SA; N为大于 2的自然数。
    25、 根据权利要求 24所述的装置, 其特征在于, 所述处理器, 具体 用于
    将所述变量 h的值更新为 2h。
    26、 根据权利要求 23至 25任一所述的装置, 其特征在于, 所述处理 器, 还用于
    初始化输入的字符串, 得到字符串的后缀数组 SAQ ;
    将所述后缀数组 SAQ中的后缀 Si的起始字符位置进行调整,得到所述 字符串的名次数组 RQ
    27、 根据权利要求 23至 26任一所述的装置, 其特征在于, 所述处理 器, 具体用于
    h为初始值时, 以所述后缀数组 SAQ中每个后缀 的第一个字符为比 较键, 将所述后缀数组 SAQ中的每个后缀 进行排序, 得到所述 h-次序 后缀数组 SAh和所述第二名次数组 Rh
    28、 根据权利要求 27所述的装置, 其特征在于, 所述处理器, 具体 用于
    确定所述 h-次序后缀数组 SAh中有大于一个的连续后缀的第一个字 符相同;
    将所述 h-次序后缀数组 SAh中具有一个以上连续后缀的第一个字符 相同的后缀组成一个以上的未排序后缀段 [a, b] ; a 为未排序后缀段中的 起始后缀的位置, b为未排序后缀段中的结束后缀的位置;
    所述一个以上的未排序后缀段 [a, b]组成未排序后缀的集合 UGh
    29、 根据权利要求 23至 28任一所述的装置, 其特征在于, 所述处理 器, 具体用于
    采用所述集合 UGh中任一后缀 Si的 h-名次数组元素 Rh[i]为主比较键, 所述集合 UGh中后缀 81+11的 h-名次数组元素 Rh[i+h]为辅比较键, 对所述 集合 UGh中的后缀进行排序, 得到 2h-次序后缀数组 SA2h
    30、 根据权利要求 23至 29任一所述的装置, 其特征在于, 所述处理 器, 具体用于
    根据相邻元素比较规则对所述 2h-次序后缀数组 8 211中的后缀进行比 较, 得到第一辅助数组 NC2h;
    对所述第一辅助数组 NC21^A行前缀求和, 得到第二辅助数组 NS2h; 如果所述第二辅助数组 NS2h中的一个以上连续后缀有相同的值, 则 所述一个以上连续后缀组成一个未排序后缀段;
    将一个以上的未排序后缀段组成未排序后缀的集合 UG2h
    31、 根据权利要求 23至 30任一所述的装置, 其特征在于, 所述 2h- 次序后缀数组 8 211所占用的空间为所述后缀数组 SA(^^占用的空间。
    32、 根据权利要求 23至 31任一所述的装置, 其特征在于, 所述处理 器具体用于
    根据预设长度 T将所述集合 UGh的后缀段划分为 S型后缀段和 L型 后缀段;
    采用一个线程块对所述 S型后缀段进行排序,采用两个以上线程块对 所述 L型后缀段进行排序, 得到 2h-次序后缀数组 SA2h
    33、 根据权利要求 32所述的装置, 其特征在于, 所述处理器, 具体 用于
    将所述集合 UGh的任一后缀段的长度与所述预设长度 T进行比较,将 所述集合 UGh中后缀段长度小于等于所述预设长度 T , 则将小于等于所述 预设长度 T的后缀作为 S型后缀段,将大于所述预设长度 T的后缀作为 L 型后缀段。
CN201480000232.5A 2014-03-28 2014-03-28 后缀数组的构造方法及装置 Pending CN105264522A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2014/074276 WO2015143708A1 (zh) 2014-03-28 2014-03-28 后缀数组的构造方法及装置

Publications (1)

Publication Number Publication Date
CN105264522A true CN105264522A (zh) 2016-01-20

Family

ID=54193942

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480000232.5A Pending CN105264522A (zh) 2014-03-28 2014-03-28 后缀数组的构造方法及装置

Country Status (2)

Country Link
CN (1) CN105264522A (zh)
WO (1) WO2015143708A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108804204A (zh) * 2018-04-17 2018-11-13 佛山市顺德区中山大学研究院 多线程并行构造后缀数组的方法及系统
CN112765938A (zh) * 2021-01-13 2021-05-07 中山大学 构造后缀数组的方法、终端设备及计算机可读存储介质

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105491573B (zh) * 2015-12-31 2021-06-22 上海物联网有限公司 一种认知无线电干扰预测方法及系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003228571A (ja) * 2001-11-28 2003-08-15 Kyoji Umemura 文字列の出現頻度の計数方法およびその方法を利用可能な装置
WO2010098209A1 (ja) * 2009-02-26 2010-09-02 国立大学法人豊橋技術科学大学 音声検索装置および音声検索方法
CN102073740A (zh) * 2011-01-27 2011-05-25 农革 基于基数排序的字符串后缀数组构造方法
CN102081673A (zh) * 2011-01-27 2011-06-01 农革 后缀数组构造方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108804204A (zh) * 2018-04-17 2018-11-13 佛山市顺德区中山大学研究院 多线程并行构造后缀数组的方法及系统
CN112765938A (zh) * 2021-01-13 2021-05-07 中山大学 构造后缀数组的方法、终端设备及计算机可读存储介质
CN112765938B (zh) * 2021-01-13 2024-02-09 中山大学 构造后缀数组的方法、终端设备及计算机可读存储介质

Also Published As

Publication number Publication date
WO2015143708A1 (zh) 2015-10-01

Similar Documents

Publication Publication Date Title
CN106778079B (zh) 一种基于MapReduce的DNA序列k-mer频次统计方法
CN103970722A (zh) 一种文本内容去重的方法
Mitani et al. Parallelizing exact and approximate string matching via inclusive scan on a GPU
You et al. Spatial join query processing in cloud: Analyzing design choices and performance comparisons
CN112015366B (zh) 数据排序方法、数据排序装置及数据库系统
CN105264522A (zh) 后缀数组的构造方法及装置
CN108052535B (zh) 基于多处理器平台的视觉特征并行快速匹配方法和系统
Quirino et al. fgssjoin: A GPU-based Algorithm for Set Similarity Joins.
CN103119606A (zh) 一种大规模图像数据的聚类方法及装置
CN112800020A (zh) 一种数据处理方法、装置及计算机可读存储介质
Nishimura et al. Accelerating the Smith-waterman algorithm using bitwise parallel bulk computation technique on GPU
Li et al. FACC: a novel finite automaton based on cloud computing for the multiple longest common subsequences search
Rahman et al. Triple sparsification of graph convolutional networks without sacrificing the accuracy
CN108334888B (zh) 针对比特序列的压缩编码
CN110111837B (zh) 基于两阶段结构比对的蛋白质相似性的搜索方法及系统
Zeng et al. SGSI–A Scalable GPU-friendly Subgraph Isomorphism Algorithm
CN108897787B (zh) 基于simd指令的图数据库中集合求交方法和装置
Al-Absi et al. Long read alignment with parallel MapReduce cloud platform
Metwally Scaling Equi-Joins
CN114945902A (zh) 减少i/o开销的混洗归约任务
Sun et al. Efficient knowledge graph embedding training framework with multiple gpus
US20240004954A1 (en) Computer-implemented accumulation method for sparse matrix multiplication applications
CN113033827B (zh) 一种用于深度森林的训练方法和装置
Metwally Scaling and Load-Balancing Equi-Joins
Brihadiswaran et al. Frigate: a fast, in-memory tool for counting and querying k-mers

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20160120