常数工作空间并行构造后缀数组的方法及系统技术方案

技术编号:19341833 阅读:29 留言:0更新日期:2018-11-07 13:46
本发明专利技术公开了常数工作空间并行构造后缀数组的方法及系统,通过获取字符串X中所有LMS子串的首字符指针并记录在数组P1中,以进一步利用P1和SA来对字符串X中所有的LMS子串进行常数工作空间内的并行归纳排序,得到字符串X1,并依据X1中字符的唯一性来区别SA的不同构造输入参数,最终通过X1与其后缀数组SA1的对应关系得以在常数工作空间内并行归纳计算字符串X的后缀数组到SA中。本发明专利技术降低了计算机内存要求且运行速度更快,使时空复杂度达到最优,适用于大规模字符串的后缀数组构建。

Method and system for parallel construction of suffix array in constant workspace

The invention discloses a method and system for parallel construction of suffix arrays in constant workspace. By acquiring the first character pointers of all LMS substrings in string X and recording them in array P1, the parallel induction and sorting of all LMS substrings in constant workspace are further carried out by using P1 and SA, and the string X1 is obtained. According to the uniqueness of characters in X1, different input parameters of SA are distinguished. Finally, the suffix array of string X can be concurrently calculated into SA in constant workspace by the corresponding relationship between X1 and its suffix array SA1. The invention reduces the requirement of computer memory and runs faster, achieves optimal space-time complexity, and is suitable for constructing suffix arrays of large-scale strings.

【技术实现步骤摘要】
常数工作空间并行构造后缀数组的方法及系统
本专利技术涉及字符串后缀数组构造领域,尤其是常数工作空间并行构造后缀数组的方法及系统。
技术介绍
后缀数组(SuffixArray,SA)是后缀树(SuffixTree,ST)的一个节省空间的替代型数据结构,具有结构紧凑且空间占用小的特点,可以在更小的空间内实现等同于后缀树的算法。后缀数组通常用来索引字符串,可以解决诸多关于字符串的处理任务,在全文索引和基因匹配等应用中有广泛用途。近年来,通用计算机的内存空间不断增大,使得在内存模型上快速处理大规模的文本和基因数据变成了可能。随着数据规模的爆发式增长,现有的串行方法及系统已无法满足大规模字符串数据的快速处理需求,即运行速度较慢,并且其需要较大的内存空间条件,对于某些内存相对较小的计算机系统而言就不适用了,总而言之,虽然仍可以实现字符串的后缀数组构建,但其时空复杂度处在一个较差标准。
技术实现思路
为了解决上述问题,本专利技术的目的是提供常数工作空间并行构造后缀数组的方法及系统,降低了内存要求且运行速度更快,使时空复杂度达到最优,适用于大规模字符串的后缀数组构建。为了弥补现有技术的不足,本专利技术采用的技术方案是:常数工作空间并行构造后缀数组的方法,包括以下步骤:S1、从右向左扫描一遍输入的字符串X,按照后缀类型的定义比较当前扫描的两个相邻字符X[i]和X[i+1],从而得到每一个字符和后缀的类型;在扫描过程中,按照LMS子串的S+L+S类型模式定义找出所有LMS字符出现的位置,从而获取字符串X中所有LMS子串的首字符指针,并记录在数组P1中;S2、通过数组P1和SA来对字符串X中所有的LMS子串进行常数工作空间内的并行归纳排序,并将排序结果保存在SA1中;其中,SA为用于记录字符串X的后缀数组;SA1为用于记录排序结果的后缀数组;S3、根据排序结果在常数工作空间内并行重命名字符串X中所有的LMS子串,从而形成字符串X1;S4、检查字符串X1中的每个字符是否唯一,若是则直接排序字符串X1的各后缀来计算字符串X1的后缀数组,保存至SA1中,否则以字符串X1和SA1作为新输入参数替代字符串X和SA,分别递归调用至步骤S1和S2;S5、根据获得的保存在SA1中的字符串X1的后缀数组,在常数工作空间内并行归纳计算字符串X的后缀数组,保存至SA中。进一步,所述步骤S1中从右向左扫描一遍字符串X,所采用的扫描方式包括分块并行扫描、流水并行扫描以及前缀和并行扫描。进一步,所述步骤S2中,通过数组P1和SA来对字符串X中所有的LMS子串进行常数工作空间内的并行归纳排序,包括以下步骤:S21、初始化SA的所有元素为-1,并以前缀和并行方式扫描出字符串X中所有后缀在SA中所属各桶的结束位置,记录在大小为O(1)的桶数组B中;从右向左流水并行扫描字符串X,依次把扫描到的各LMS后缀填入其在SA中所属桶的当前结束位置,并将该桶的结束位置向左移动一格;S22、以前缀和并行方式扫描出字符串X中所有后缀在SA中所属各桶的起始位置,记录在大小为O(1)的桶数组B中,并对SA进行分块并行扫描处理:在当前块内从左向右扫描SA,针对扫描到的每个不为-1的元素SA[i],从SA中读取X[SA[i]]的前继字符X[SA[i]-1];若该前继字符是L型,则将SA[i]-1的值以及suf(X,SA[i]-1)的后缀在SA中所属桶的当前起始位置作为排序结果记录在SA中,并将该桶的起始位置向右移动一格;读取前一块的排序结果并记录在SA中;读取后一块的所有前继字符并记录在SA中;S23、以前缀和并行方式扫描出字符串X中所有后缀在SA中所属各桶的结束位置,记录在大小为O(1)的桶数组B中,并对SA进行分块并行扫描处理:在当前块内从右向左扫描SA,针对扫描到的每个元素SA[i],从SA中读取X[SA[i]]的前继字符X[SA[i]-1];若该前继字符是S型,则将SA[i]-1的值以及suf(X,SA[i]-1)的后缀在SA中所属桶的当前结束位置作为排序结果记录在SA中,并将该桶的结束位置向左移动一格;读取前一块的排序结果并记录在SA中;读取后一块的所有前继字符并记录在SA中。进一步,所述步骤S3,根据排序结果在常数工作空间内并行重命名字符串X中所有的LMS子串,从而形成字符串X1,包括以下步骤:S31、将SA1中已排序的LMS子串进行分块,在每个分块内从左向右依次比较相邻的两个LMS子串的大小;对于每个LMS子串,用其在SA1中所属桶的起始位置命名,第一个桶的起始位置从0开始,即得到各分块内LMS子串的局部名;S32、利用前缀和方法统计每个分块中可使用的全局名,将各分块内LMS子串的局部名替换为全局名,从而形成字符串Z1;S33、从右到左对字符串Z1进行分块并行扫描,针对每个被扫描到的字符Z1[i],若Z1[i]为L型,则令X1[i]=Z1[i],否则将X1[i]设为Z1[i]在SA1中所属桶的结束位置;待扫描Z1结束后,X1即为对Z1中各S型字符重命名后的结果。进一步,步骤S5中,根据获得的保存在SA1中的字符串X1的后缀数组,在常数工作空间内并行归纳计算字符串X的后缀数组,包括以下步骤:S51、初始化SA的所有元素为-1,以前缀和并行方式扫描出字符串X中所有后缀在SA中所属各桶的结束位置,复用SA的空间来记录;从右向左流水并行扫描数组SA1,对每个扫描到的元素SA1[i],将P1[SA1[i]]放在后缀suf(X,P1[SA1[i]])在SA中所属桶的当前结束位置,并将该桶的结束位置向左移动一格;S52、以前缀和并行方式扫描出字符串X中所有后缀在SA中所属各桶的结束位置,复用SA的空间进行记录,对SA进行分块并行扫描处理:在当前块内从左向右扫描SA,针对扫描到的每个不为-1的元素SA[i],从SA中读取X[SA[i]]的前继字符X[SA[i]-1];若该前继字符是L型,则将SA[i]-1的值以及suf(X,SA[i]-1)的后缀在SA中所属桶的当前起始位置作为排序结果记录在SA中,并将该桶的起始位置向右移动一格;读取前一块的排序结果并记录在SA中;读取后一块的所有前继字符并记录在SA中;S53、以前缀和并行方式扫描出字符串X中所有后缀在SA中所属各桶的结束位置,复用SA的空间进行记录,对SA进行分块并行扫描处理:在当前块内从右向左扫描SA,针对扫描到的每个元素SA[i],从SA中读取X[SA[i]]的前继字符X[SA[i]-1];若该前继字符是S型,则将SA[i]-1的值以及suf(X,SA[i]-1)的后缀在SA中所属桶的当前结束位置作为排序结果记录在SA中,并将该桶的结束位置向左移动一格;读取前一块的排序结果并记录在SA中;读取后一块的所有前继字符并记录在SA中。常数工作空间并行构造后缀数组的系统,包括:并行归纳排序模块、存储单元、前置单元以及解析单元;所述并行归纳排序模块,用于通过数组P1和SA来对输入的子串或后缀进行常数工作空间并行归纳排序,并返回结果;所述存储单元,用于存放生成后缀数组过程中的临时数据;所述前置单元,用于根据输入的字符串X,利用常数工作空间并行归纳排序及重命名的方法生成字符串X1,并写入存储单元;所述解析单元,用于从存储单元读取字符串X1,本文档来自技高网...

【技术保护点】
1.常数工作空间并行构造后缀数组的方法,其特征在于,包括以下步骤:S1、从右向左扫描一遍输入的字符串X,按照后缀类型的定义比较当前扫描的两个相邻字符X[i]和X[i+1],从而得到每一个字符和后缀的类型;在扫描过程中,按照LMS子串的S+L+S类型模式定义找出所有LMS字符出现的位置,从而获取字符串X中所有LMS子串的首字符指针,并记录在数组P1中;S2、通过数组P1和SA来对字符串X中所有的LMS子串进行常数工作空间内的并行归纳排序,并将排序结果保存在SA1中;其中,SA为用于记录字符串X的后缀数组;SA1为用于记录排序结果的后缀数组;S3、根据排序结果在常数工作空间内并行重命名字符串X中所有的LMS子串,从而形成字符串X1;S4、检查字符串X1中的每个字符是否唯一,若是则直接排序字符串X1的各后缀来计算字符串X1的后缀数组,保存至SA1中,否则以字符串X1和SA1作为新输入参数替代字符串X和SA,分别递归调用至步骤S1和S2;S5、根据获得的保存在SA1中的字符串X1的后缀数组,在常数工作空间内并行归纳计算字符串X的后缀数组,保存至SA中。

【技术特征摘要】
1.常数工作空间并行构造后缀数组的方法,其特征在于,包括以下步骤:S1、从右向左扫描一遍输入的字符串X,按照后缀类型的定义比较当前扫描的两个相邻字符X[i]和X[i+1],从而得到每一个字符和后缀的类型;在扫描过程中,按照LMS子串的S+L+S类型模式定义找出所有LMS字符出现的位置,从而获取字符串X中所有LMS子串的首字符指针,并记录在数组P1中;S2、通过数组P1和SA来对字符串X中所有的LMS子串进行常数工作空间内的并行归纳排序,并将排序结果保存在SA1中;其中,SA为用于记录字符串X的后缀数组;SA1为用于记录排序结果的后缀数组;S3、根据排序结果在常数工作空间内并行重命名字符串X中所有的LMS子串,从而形成字符串X1;S4、检查字符串X1中的每个字符是否唯一,若是则直接排序字符串X1的各后缀来计算字符串X1的后缀数组,保存至SA1中,否则以字符串X1和SA1作为新输入参数替代字符串X和SA,分别递归调用至步骤S1和S2;S5、根据获得的保存在SA1中的字符串X1的后缀数组,在常数工作空间内并行归纳计算字符串X的后缀数组,保存至SA中。2.根据权利要求1所述的常数工作空间并行构造后缀数组的方法,其特征在于,所述步骤S1中从右向左扫描一遍字符串X,所采用的扫描方式包括分块并行扫描、流水并行扫描以及前缀和并行扫描。3.根据权利要求1所述的常数工作空间并行构造后缀数组的方法,其特征在于,所述步骤S2中,通过数组P1和SA来对字符串X中所有的LMS子串进行常数工作空间内的并行归纳排序,包括以下步骤:S21、初始化SA的所有元素为-1,并以前缀和并行方式扫描出字符串X中所有后缀在SA中所属各桶的结束位置,记录在大小为O(1)的桶数组B中;从右向左流水并行扫描字符串X,依次把扫描到的各LMS后缀填入其在SA中所属桶的当前结束位置,并将该桶的结束位置向左移动一格;S22、以前缀和并行方式扫描出字符串X中所有后缀在SA中所属各桶的起始位置,记录在大小为O(1)的桶数组B中,并对SA进行分块并行扫描处理:在当前块内从左向右扫描SA,针对扫描到的每个不为-1的元素SA[i],从SA中读取X[SA[i]]的前继字符X[SA[i]-1];若该前继字符是L型,则将SA[i]-1的值以及suf(X,SA[i]-1)的后缀在SA中所属桶的当前起始位置作为排序结果记录在SA中,并将该桶的起始位置向右移动一格;读取前一块的排序结果并记录在SA中;读取后一块的所有前继字符并记录在SA中;S23、以前缀和并行方式扫描出字符串X中所有后缀在SA中所属各桶的结束位置,记录在大小为O(1)的桶数组B中,并对SA进行分块并行扫描处理:在当前块内从右向左扫描SA,针对扫描到的每个元素SA[i],从SA中读取X[SA[i]]的前继字符X[SA[i]-1];若该前继字符是S型,则将SA[i]-1的值以及suf(X,SA[i]-1)的后缀在SA中所属桶的当前结束位置作为排序结果记录在SA中,并将该桶的结束位置向左移动一格;读取前一块的排序结果并记录在SA中;读取后一块的所有前继字符并记录在SA中。4.根据权利要求1所述的常数工作空间并行构造后缀数组的方法,其特征在于,所述步骤S3,根据排序结果在常数工作空间内并行重命名字符串X中所有的LMS子串,从而形成字符串X1,包括以下步骤:S31、将SA1中已排序的LMS子串进行分块,在每个分块内从左向右依次比较相邻的两个LMS子串的大小;对于每个LMS子串,用其在SA1中所属桶的起始位置命名,第一个桶的起始位置从0开始,即得到各分块内LMS子串的局部名;S32、利用前缀和方法统计每个分块中可使用的全局名,将各分块内LMS子串的局部名替换为全局名,从而形成字符串Z1;S33、从右到左对字符串Z1进行分块并行扫描,针对每个被扫描到的字符Z1[i],若Z1[i]为L型,则令X1[i]=Z1[i],否则将X1[i]设为Z1[i]在SA1中所属桶的结束位置;待扫描Z1结束后,X1即为对Z1中各S型字符重命名后的结果。5.根据权利要求1所述的常数工作空间并行构造后缀数...

【专利技术属性】
技术研发人员:劳斌解静仪徐文涛农革
申请(专利权)人:佛山市顺德区中山大学研究院广东顺德中山大学卡内基梅隆大学国际联合研究院中山大学
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1