CN110852046B - 一种文本后缀索引的分块归纳排序方法及系统 - Google Patents
一种文本后缀索引的分块归纳排序方法及系统 Download PDFInfo
- Publication number
- CN110852046B CN110852046B CN201910992420.5A CN201910992420A CN110852046B CN 110852046 B CN110852046 B CN 110852046B CN 201910992420 A CN201910992420 A CN 201910992420A CN 110852046 B CN110852046 B CN 110852046B
- Authority
- CN
- China
- Prior art keywords
- suffix
- data block
- substring
- character
- target
- 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.)
- Active
Links
Images
Abstract
本申请实施例适用于数据处理技术领域,提供了一种文本后缀索引的分块归纳排序方法及系统,所述方法包括:针对任一字符串,确定字符串的多个子串或多个后缀,并将多个子串或多个后缀存储至预设的多个数据块;按照预设顺序,扫描各个数据块;针对扫描到的任一当前数据块,根据预设的稳定排序方式对当前数据块中的各个子串或各个后缀进行排序;按照预设顺序,扫描当前数据块中的各个子串或各个后缀;针对扫描到的任一目标子串或目标后缀,确定目标子串的特定类型的前继子串或目标后缀的特定类型的前继后缀所属的目标数据块;将前继子串或前继后缀写入所属的目标数据块。本实施例可以解决构造文本后缀索引时,归纳排序过程数据局部性较差的问题。
Description
技术领域
本申请属于数据处理技术领域,特别是涉及一种文本后缀索引的分块归纳排序方法及系统。
背景技术
在数据处理技术中,后缀数组(Suffix Array,SA)是一个重要的且被广泛应用的数据结构,它是后缀树的空间紧凑型替代,可以用于数据压缩、基因组比对、全文检索等多种领域。随着互联网技术的发展,全球每时每刻都在产生海量的多源异构数据。为了有效地管理及检索这些数据,亟需可高效构造和检索的全文索引,而后缀索引,即后缀数组就是一个可用于这一场景的全文索引。
构造多源异构数据的后缀索引,其原理上与构造文本的后缀索引(或后缀数组)一致,而后者一直是研究者们探索的关键课题。迄今为止,基于归纳排序(Induced Sorting,IS)方法构造后缀数组的方法及系统在理论和实际中都获得了最优的时间和空间性能。因此,针对现代通用计算机的多种计算模型,如:内存串行、内存并行、外存串行等,研究者们提出了许多基于IS方法的构造后缀数组的高性能方法,并开发了与之相配套的程序或系统。但因IS方法本身数据局部性较差的问题,这些方法及系统都难以有效利用现代通用计算机的高速缓冲存储器,即Cache的性能,因此限制了它们的时间性能。
而在全文检索领域,全文索引构造的效率直接决定了其可用性。因此,为了进一步提升文本后缀索引的构造效率,需要解决IS方法数据局部性较差的问题。
发明内容
有鉴于此,本申请实施例提供了一种文本后缀索引的分块归纳排序方法及系统,以解决现有技术中构造文本后缀索引时,归纳排序过程数据局部性较差的问题。
本申请实施例的第一方面提供了一种文本后缀索引的分块归纳排序方法,包括:
针对任一字符串,确定所述字符串的多个子串或多个后缀,并将所述多个子串或所述多个后缀存储至预设的多个数据块;
按照预设顺序,扫描各个数据块;
针对扫描到的任一当前数据块,根据预设的稳定排序方式对所述当前数据块中的各个子串或各个后缀进行排序;
按照预设顺序,扫描所述当前数据块中的各个子串或各个后缀;
针对扫描到的任一目标子串或目标后缀,确定所述目标子串的特定类型的前继子串或所述目标后缀的特定类型的前继后缀所属的目标数据块;
将所述前继子串或所述前继后缀写入所属的目标数据块。
本申请实施例的第二方面提供了一种文本后缀索引的分块归纳排序系统,包括:
子串或后缀存储模块,用于针对任一字符串,确定所述字符串的多个子串或多个后缀,并将所述多个子串或所述多个后缀存储至预设的多个数据块;
数据块扫描模块,用于按照预设顺序,扫描各个数据块;
子串或后缀排序模块,用于针对扫描到的任一当前数据块,根据预设的稳定排序方式对所述当前数据块中的各个子串或各个后缀进行排序;
子串或后缀扫描模块,用于按照预设顺序,扫描所述当前数据块中的各个子串或各个后缀;
目标数据块确定模块,用于针对扫描到的任一目标子串或目标后缀,确定所述目标子串的特定类型的前继子串或所述目标后缀的特定类型的前继后缀所属的目标数据块;
前继子串或前继后缀写入模块,用于将所述前继子串或所述前继后缀写入所属的目标数据块。
本申请实施例的第三方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述文本后缀索引的分块归纳排序方法的步骤。
本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述文本后缀索引的分块归纳排序方法的步骤。
与现有技术相比,本申请实施例包括以下优点:
本申请实施例,针对任一字符串,在确定该字符串的多个子串或多个后缀,并将多个子串或多个后缀存储至预设的多个数据块后,可以按照预设顺序,扫描各个数据块,针对扫描到的任一当前数据块,先根据预设的稳定排序方式对当前数据块中的各个子串或各个后缀进行排序,然后按照预设顺序,扫描当前数据块中的各个子串或各个后缀,针对扫描到的任一目标子串或目标后缀,通过确定目标子串的特定类型的前继子串或目标后缀的特定类型的前继后缀所属的目标数据块,可以将上述前继子串或前继后缀写入各自所属的目标数据块中。本实施例通过将待归纳排序的前继子串或前继后缀先定位至其在存储单元内所属的目标数据块,再在块内根据其首字符稳定排序至其最终位置,而非按照IS方法直接根据其首字符归纳排序至字符桶内,将归纳排序过程中需要随机访问的大小量级为O(n)的桶计数器压缩为量级为O(块数)的块计数器,提高了构造后缀索引的方法及系统的数据局部性。实际应用领域中,在配备高速缓冲存储器的现代通用计算机上,使用本实施例所提供的方法与系统可以提高Cache命中率,使得构造后缀索引的时间效率更高、资源利用率更优。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个实施例的一种文本后缀索引的分块归纳排序方法的步骤流程示意图;
图2是本申请一个实施例的多核计算机的结构示意图;
图3是本申请一个实施例的文本后缀索引的分块归纳排序方法的数据处理流程示意图;
图4是本申请一个实施例的一种文本后缀索引的分块归纳排序系统的示意图;
图5是本申请一个实施例的一种终端设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域技术人员应当清楚,在没有这些具体细节的其他实施例中也可以实现本申请。在其他情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
下面通过具体实施例来说明本申请的技术方案。
首先,将本申请可能使用到的技术术语,统一在此说明。
字符串:一个长度为n的字符串X是将n个属于其字符集Σ的字符按一定规则依次排列形成的字符数组X[0…n-1],其中,假设X[n-1]是仅在X中出现一次的、字典序最小的字符$。
子串:X[i…j],0≤i≤j≤n-1,即X[i]到X[j]之间(包括X[i]和X[j])所有字符组成的字符串。
后缀:即X[i…n–1],0≤i≤n–1,一般记作suf(X,i)。
后缀数组(SA):是将X的所有后缀按照字典序从小到大的顺序排列,并将它们在X中的起始位置按排列后的次序保存在一个整数数组里获得的数据结构。
字符和后缀的类型:X中的字符X[i]可分为L型和S型两类,其中,若满足(1)i=n–1;(2)X[i]<X[i+1];(3)X[i]=X[i+1]且X[i+1]为S型字符,则X[i]为S型字符,否则为L型字符。进一步地,若X[i]为S型字符且X[i-1]为L型字符,则X[i]同时也是LMS字符。X的后缀suf(X,i)的类型与它的首字符X[i]相同。
L/S/LMS子串:对于X的子串X[i…j](i≠j),若X[i]和X[j]均为L/S/LMS字符,且它们之间没有其它L/S/LMS字符,则X[i…j]为L/S/LMS子串,除此以外,X[n-1]也为LMS子串。
前继字符、子串和后缀:对于字符串X的其中一个字符X[i](i>0)而言,其前继字符为X[i-1],类似地,以这个字符X[i]起始的子串或后缀的前继子串或前继后缀起始于X[i-1]。
子串或后缀所属的块:对于已按预设划分方式分块的SA,在X的所有后缀都已排序的情况下,suf(X,i)所在的块即为其所属的块,同理,子串X[i…j]所属的块也为这一块。
桶:起始于同一个字符的多个后缀会在SA中占据一块连续的区域,这块区域称为该字符的桶。
边界字符:在SA已分块的基础上,一个字符桶可能跨越多个块,则这一字符被称为这些块的边界字符。
参照图1,示出了本申请一个实施例的一种文本后缀索引的分块归纳排序方法的步骤流程示意图,具体可以包括如下步骤:
S101、针对任一字符串,确定所述字符串的多个子串或多个后缀,并将所述多个子串或所述多个后缀存储至预设的多个数据块;
需要说明的是,本方法可以适用于多核计算机。即,通过实施本方法可以在多核计算机的内存中构造文本后缀索引的过程中,提升核心流程的数据局部性。即,提升在使用IS方法构造本后缀索引时归纳排序前继子串或前继后缀的过程中的数据局部性,以此提高文本后缀索引构造方法及其配套系统在现代通用计算机上的Cache命中率,并进一步提升其时间性能。
在本实施例中,针对任一字符串,在构造其文本后缀索引的特定阶段时,可以确定出该字符串的多个子串或多个后缀,然后由计算机系统为该字符串分配用于存储该字符串以及后续存储该字符串的后缀数组的存储单元。
上述字符串可以包括L型字符和S型字符,每个L型字符都对应以它为起始的一个L型子串和一个L型后缀,每个S型字符都对应以它为起始的一个S型子串和一个S型后缀。
在初始时,可以首先针对上述字符串和分配的存储单元进行预处理,并完成初始化任务。
在本实施例中,预处理和初始化任务可以包括对存储后缀数组的存储单元进行分块、初始化块计数器、桶计数器等等。
因此,在分配出存储后缀数组所需的存储单元后,可以将该存储单元划分为多个数据块,并收集各个数据块的定位信息,然后根据各个数据块的定位信息,将多个子串或多个后缀存储至上述多个数据块中。
本实施例可以采用均匀分块或按桶分块等不同的处理方式来对上述存储单元进行分块,本实施例对此不作具体限定。
针对任一字符串,可以首先为该字符串和该字符串的后缀数组分配所需的存储单元,然后根据预设的划分方式,将用于存储该字符串的后缀数组的存储单元划分为多个数据块。上述预设的划分方式可以由用户根据实际需要确定,本实施例对此不作限定。
以均匀分块为例,若预设的划分方式为均匀分块且划分数值为m,则可以将该字符串的后缀数组的存储单元划分为同样大小的若干块,得到块,其中,符号表示计算n与m之间的比值,并向上取整。在均匀分块的情况下,除最后一块以外,每个数据块的块长是固定的。当然,若按桶分块,得到的各个数据块的块长则一般是不固定的。
在分块后,可以根据分块方式收集各个数据块的定位信息,用于计算特定类型的子串或后缀在后缀数组内的目标数据块的块号。
同时,通过预处理,也可以令字符串中L型字符的值为后缀数组中对应字符桶的起始位置,令字符串中S型字符的值为后缀数组中对应字符桶的结尾位置。
在根据多个子串或多个后缀的类型初始化各个数据块的块计数器时,若多个子串为L型子串或多个后缀为L型后缀,则可以将块计数器指向各个数据块的块头位置;若多个子串为S型子串或LMS子串,或多个后缀为S型后缀或LMS后缀,则可以将块计数器指向各个数据块的块尾位置。
在后续处理过程中,在确定当前执行的归纳排序任务的类型时,可以重置各个数据块的块计数器。例如,若当前执行的归纳排序任务为归纳排序L型子串或L型后缀,则可以将块计数器指向各个数据块的块头位置;若当前执行的归纳排序任务为归纳排序S型子串或S型后缀,则可以将块计数器指向各个数据块的块尾位置。
S102、按照预设顺序,扫描各个数据块;
在本实施例中,预设顺序受当前执行的归纳排序任务的类型的影响,可以是从左至右的顺序,也可以是从右至左的顺序,本实施例对此不作限定。
另外,扫描后缀数组各个数据块的方式也可以是多样的。例如,可以串行逐块扫描,也可以流水并行扫描各数据块,等等。本实施例对此亦不作限定。
S103、针对扫描到的任一当前数据块,根据预设的稳定排序方式对所述当前数据块中的各个子串或各个后缀进行排序;
针对当前数据块,在刚存入S101中多个子串或多个后缀的情况下,或进一步在已经写入前继子串或前继后缀的情况下,可以对其进行处理,即按照预设的稳定排序方式,将其所有子串或所有后缀排序至它们的最终位置。
需要说明的是,处理数据块的方式受扫描后缀数组各个数据块的方式的影响,可以单线程串行稳定排序完当前数据块中的所有子串或所有后缀后,再按照预设顺序扫描并处理当前数据块中的各个子串或各个后缀;或者,流水并行扫描后缀数组各个数据块,以多线程在稳定排序当前数据块中的所有子串或所有后缀的同时按预设顺序扫描并处理上一数据块中的子串或后缀,等等。
以桶排序为例。可以逐个扫描当前数据块中的各个子串或各个后缀;然后根据子串的起始字符,以及当前数据块的桶计数器,将该子串排序至起始字符对应的桶计数器指示的位置;或者,根据后缀的起始字符,以及当前数据块的桶计数器,将该后缀排序至起始字符对应的桶计数器指示的位置。
每排序完一个子串或后缀,需要更新当前数据块中起始字符对应的桶计数器指示的位置。
例如,若子串为L型子串或后缀为L型后缀,则可以将上述桶计数器指示的位置向右移动一位;若子串为S型子串或后缀为S型后缀,则可以将上述桶计数器指示的位置向左移动一位。
S104、按照预设顺序,扫描所述当前数据块中的各个子串或各个后缀;
在本实施例中,预设顺序受当前执行的归纳排序任务的类型的影响,可以是从左至右的顺序,也可以是从右至左的顺序,本实施例对此不作限定。
S105、针对扫描到的任一目标子串或目标后缀,确定所述目标子串的特定类型的前继子串或所述目标后缀的特定类型的前继后缀所属的目标数据块;
目标子串或目标后缀可以是指在当前轮次所扫描到的那个子串或后缀。
对于每一个被扫描到的目标子串,可以定位其特定类型的前继子串在存储单元中所属的数据块并将该前继子串写入定位到的数据块中;相应地,对于每一个被扫描到的目标后缀,也可以在定位到其特定类型的前继后缀在存储单元中所属的数据块后,将该前继后缀写入定位到的数据块中。
在本实施例中,针对扫描到的任一目标子串,可以首先确定该目标子串的特定类型的前继子串的起始字符。当然,针对扫描到的任一目标后缀,也需要首先确定该目标后缀的特定类型的前继后缀的起始字符。
若当前执行的归纳排序任务为归纳排序L型子串或L型后缀,则可以仅处理目标子串的L型前继子串或目标后缀的L型前继后缀;若当前执行的归纳排序任务为归纳排序S型子串或S型后缀,则可以仅处理目标子串的S型前继子串或目标后缀的S型前继后缀。
然后,再根据起始字符和各个数据块的定位信息,计算目标数据块的块号。
需要说明的是,根据分块方式的不同,收集获得的各个数据块的定位信息也可能是不同的。例如,在均匀分块时,各个数据块的定位信息包括有边界字符信息,而在按桶分块时,其定位信息则不包括上述边界字符信息。
在本实施例中,计算目标数据块的块号可以根据前继子串或前继后缀的起始字符、数据块的块长和数据块的边界字符的数量来实现。
对于均匀分块,数据块的块长是固定的;而对于其他分块方式,分块后获得的各个数据块的块长则可能不是固定的。
以均匀分块情况下计算目标数据块的块号为例,目标数据块的块号可以为起始字符对应的数值与数据块的固定长度之间的比值向下取整。
在具体实现中,对于扫描到的某一目标子串的特定类型的前继子串,通过确定该前继子串的起始字符c和数据块的固定长度m,可以计算出目标数据块的块号其中,符号表示向下取整。同理,对于扫描到的某一目标后缀的特定类型的前继后缀,也可以采用上述公式计算出它所属的目标数据块的块号。
通常,对于起始字符为边界字符的前继子串或前继后缀,在计算目标数据块的块号后,需要进行特殊的处理。
因此,在按照上述公式计算出某一前继子串或前继后缀所属的目标数据块的块号后,还可以判断该目标子串的特定类型的前继子串的起始字符或该目标后缀的特定类型的前继后缀的起始字符是否为边界字符。
如果起始字符为边界字符,则可以在读取目标数据块的边界字符的数量后,根据上述起始字符、数据块的固定长度和目标数据块的边界字符的数量,重定位当前扫描到的目标子串的特定类型的前继子串或当前扫描到的目标后缀的特定类型的前继后缀所属的新目标数据块。
即,对于起始字符为边界字符的前继子串或前继后缀,需要根据起始字符、数据块的块长和数据块的边界字符的数量,重新确定该前继子串或前继后缀所属的新目标数据块的块号。
在具体实现中,若起始字符为L型字符,则可以首先计算起始字符对应的数值与目标数据块的边界字符的数量之和,然后以起始字符对应的数值与目标数据块的边界字符的数量之和为被除数,数据块的固定长度为除数,计算得到的商值向下取整获得的数值作为重定位的新目标数据块的块号。
若起始字符为S型字符,则可以计算起始字符对应的数值与目标数据块的边界字符的数量之差,然后以起始字符对应的数值与目标数据块的边界字符的数量之差为被除数,数据块的固定长度为除数,计算得到的商值向下取整获得的数值作为重定位的新目标数据块的块号。
在完成上述重定位后,可以更新边界字符数量numB,即,将重定位前的目标数据块的边界字符的数量numB加一。
最后,令B=B’,即将目标数据块的块号更新为与新目标数据块的块号一致。
S106、将所述前继子串或所述前继后缀写入所属的目标数据块。
在按照前述步骤计算出各个前继子串或前继后缀各自所属的目标数据块块号后,可以将其写入已确定的数据块中。
在具体实现中,可以首先确定前继子串或前继后缀在字符串中的起始位置,然后判断目标数据块是否为当前数据块,若是,则根据该前继子串或前继后缀的起始字符,以及当前数据块的桶计数器,将该前继子串或前继后缀在字符串中的起始位置对应的数值写入其起始字符对应的桶计数器所指示的位置,并更新这一起始字符对应的桶计数器指示的位置;否则将该前继子串或前继后缀在字符串中的起始位置对应的数值写入目标数据块中块计数器指示的位置,并更新目标数据块中块计数器指示的位置。
例如,若目标数据块为当前数据块,且若前继子串为L型子串或前继后缀为L型后缀,则可以将该前继子串或前继后缀起始字符对应的桶计数器指示的位置向右移动一位;若前继子串为S型子串或前继后缀为S型后缀,则可以将上述桶计数器指示的位置向左移动一位。
若目标数据块不是当前数据块,且若前继子串为L型子串或前继后缀为L型后缀,则可以将目标数据块中块计数器指示的位置向右移动一位;若前继子串为S型子串或前继后缀为S型后缀,则可以将上述块计数器指示的位置向左移动一位。
直到存储单元中各个数据块都已经完成了上述步骤,则当前执行的归纳排序任务完成。
在本申请实施例中,针对任一字符串,在确定该字符串的多个子串或多个后缀,并将多个子串或多个后缀存储至预设的多个数据块后,可以按照预设顺序,扫描各个数据块,针对扫描到的任一当前数据块,先根据预设的稳定排序方式对当前数据块中的各个子串或各个后缀进行排序,然后按照预设顺序,扫描当前数据块中的各个子串或各个后缀,针对扫描到的任一目标子串或目标后缀,通过确定目标子串的特定类型的前继子串或目标后缀的特定类型的前继后缀所属的目标数据块,可以将上述前继子串或前继后缀写入各自所属的目标数据块中。本实施例通过将待归纳排序的前继子串或前继后缀先定位至其在存储单元内所属的目标数据块,再在块内根据其首字符稳定排序至其最终位置,而非按照IS方法直接根据其首字符归纳排序至字符桶内,将归纳排序过程中需要随机访问的大小量级为O(n)的桶计数器压缩为量级为O(块数)的块计数器,提高了构造后缀索引的方法及系统的数据局部性。实际应用领域中,在配备高速缓冲存储器的现代通用计算机上,使用本实施例所提供的方法与系统可以提高Cache命中率,使得构造后缀索引的时间效率更高、资源利用率更优。
为了便于理解,下面以一个完整的示例,对本申请的文本后缀索引的分块归纳排序方法作一介绍。
如图2是本申请一个实施例的多核计算机的结构示意图。在图2所示的多核计算机中,可以通过执行如图3所示的文本后缀索引的分块归纳排序方法的数据处理流程,提高Cache命中率,使得构造后缀索引的时间效率更高、资源利用率更优。
如图2所示,多核计算机可以包括:前置单元、解析单元和存储单元。各单元的功能如下。
前置单元:从存储单元读取输入字符串X,为其后缀数组SA在存储单元中分配空间,根据实际情况对X和SA进行预处理,并完成初始化任务,然后根据分块方式收集块定位信息,写入存储单元,再根据块定位信息,将当前执行的归纳排序任务的初始的多个子串或多个后缀存储至SA的多个数据块。
解析单元:从存储单元读取预处理后的X和SA,以及块定位信息等辅助信息,此时SA中已存储当前执行的归纳排序任务的初始的多个子串或多个后缀,在此基础上使用特定方法以数据局部性良好的方式完成当前执行的归纳排序任务,当前执行的归纳排序任务的结果写入存储单元的SA中。
存储单元:用于存放完成当前执行的归纳排序任务的过程中需要读写的各类数据,包括输入系统的字符串X和输出的当前执行的归纳排序任务的结果后缀数组SA,以及块计数器、块定位信息等。
上述前置单元可以包括:X及SA预处理模块、初始化模块、块定位信息收集模块、初始子串或后缀存储模块。上述解析单元可以包括:决策模块、块内稳定排序模块、前继子串或后缀块定位及写入模块。各个模块分别用于执行分块归纳排序过程中的不同功能。
下面结合图3,对分块归纳排序的具体流程进行介绍。按照图3所示的流程,整个归纳排序过程可以包括如下步骤:
S300、开始。
在开始时,表示在一台具备多核处理器的计算机上,输入一个字符串X,在其基础上完成当前执行的归纳排序任务。在整个流程中,计算机内存空间可以作为相应的存储单元,无论是输入X、输出SA,还是流程中所需的各类临时数据,都在存储单元中供系统内各单元、模块处理任务时读写。考虑到存储单元中各数据生命周期不尽相同,在系统具体实现过程中可能存在多种工程处理方式,如重用空间等,此处不作具体说明和限制。
S301、根据X和SA的情况对其进行预处理,并完成初始化任务。
此步骤中,SA即为后续用于存储字符串X的后缀数组的存储单元。初始时,SA为空。此步骤需要根据X和SA的情况完成预处理任务,包括但不限于使用特定方法将未分块的SA分块。其中,特定方法表示不同的预处理方式,如是按固定长度分块、按字符桶分块等等。同时,初始化任务包括但不限于初始化块计数器、桶计数器等等,用于指示子串和后缀应写入块内何处。
作为一种示例,对X和SA的预处理和初始化具体可以包括:
(1)若X中L型字符不为SA中对应字符桶的起始位置或S型字符不为SA中对应字符桶的结尾位置,则重命名X,使其满足这一规则。
(3)初始化各块的桶计数器bkt以及块计数器ctr,在执行S303的步骤之前,若当前执行的归纳排序任务的初始的多个子串为L型子串或多个后缀为L型后缀,则将块计数器初始化为各块的块头位置,若多个子串为S型子串或LMS子串,或多个后缀为S型后缀或LMS后缀,则将块计数器初始化为各块的块尾位置;在S303的步骤执行完毕后、执行S304的步骤之前,若当前执行的归纳排序任务为归纳排序X的L型子串或L型后缀,则块计数器重置为各块的块头位置,否则将其重置为各块的块尾位置。
S302、收集块定位信息。
此步骤中,可以根据分块方式收集块定位信息,用于计算子串或后缀在SA内所属块的块号。
(1)统计X中各字符出现的次数,使用前缀和方法计算并存储各块的边界字符信息。
(2)令各块的边界字符初始数目num为0。
S303、将当前执行的归纳排序任务的初始的多个子串或多个后缀存储至SA。
此步骤中,当前执行的归纳排序任务表示在使用IS方法构造后缀索引时:①从左至右扫描一次SA,归纳排序X的所有L型子串或L型后缀,此时初始的多个子串或后缀一般为LMS子串或LMS后缀,也可能是可推导出L型子串或L型后缀的其它子串或后缀;或②从右至左扫描一次SA,归纳排序X的所有S型子串或S型后缀,此时初始的多个子串或后缀一般为L型子串或L型后缀,也可能是可推导出S型子串或S型后缀的其它子串或后缀。
定位初始的多个子串或多个后缀在SA中所属块的具体步骤与S306中相应步骤一致。
S304、判断是否已按预设方式以预设顺序遍历完SA的所有数据块?
此步骤中,预设方式表示可以多种方式扫描并处理SA的各个数据块,比如可以对当前数据块单线程串行执行S305和S306两步,循环处理所有数据块;或者,流水并行扫描SA各块,以多线程在对当前数据块执行S305的同时对上一数据块执行S306,等等。预设顺序指根据当前执行的归纳排序任务的类型的不同,可能从左向右扫描SA各数据块,也可能从右向左扫描。在图3表示的此步骤中,采用的是上述预设方式中的第一种。
若已经完成全部数据块的遍历,则跳转到S307,否则跳转到S305。
S305、在当前数据块内桶排序现有的全部子串或后缀至其最终位置。
此步骤即是在SA当前数据块内使用特定方法稳定排序现有的全部子串或后缀至其最终位置。特定方法可以是桶排序、基数排序等稳定排序方法。
以桶排序为例。此步骤可以包括:
(1)从左至右扫描SA的当前块,假设为块b,对扫描到的每一个子串或后缀,根据其起始字符c,结合该块的桶计数器bktb,将该子串或后缀桶排序至SA中bktb[c]指示的位置。
(2)更新bktb[c],若子串或后缀为L型,则将bktb[c]指示的位置向右移动一位,否则将其指示的位置向左移动一位。
待稳定排序完当前块内的所有子串或所有后缀后,跳转至S306。
S306、按照预设顺序,扫描SA当前块中的所有子串或所有后缀,对于每一个扫描到的子串或后缀,定位其特定类型的前继子串或特定类型的前继后缀在SA中所属的块B并将前继子串或前继后缀顺序写入块B。
此步骤中,与S304类似地,预设顺序指根据当前执行的归纳排序任务的类型的不同,可能从左向右扫描SA当前块中的所有子串或所有后缀,也可能从右向左扫描。
此步骤中,特定类型指若当前执行的归纳排序任务为归纳排序L型子串或L型后缀,则仅处理扫描到的子串的L型前继子串或后缀的L型前继后缀;若当前轮次归纳排序任务为归纳排序S型子串或S型后缀,则仅处理扫描到的子串的S型前继子串或后缀的S型前继后缀。
此任务中,可以结合分块方式和S302收集的块定位信息,计算当前数据块内当前扫描的子串或后缀其特定类型的前继子串或特定类型的前继后缀在SA中所属的块B。
根据当前执行的归纳排序任务的类型,可以从左向右或从右向左顺序扫描SA当前块,对于每一个扫描到的子串或后缀,顺序完成以下三个任务:
(2)检查该前继子串或前继后缀的起始字符c是否为边界字符,若是,则重定位该前继子串或前继后缀在SA中所属的块B。此任务包括:
(2.2)更新numB表示的块B的边界字符数目,即将其加一。
(2.3)令B=B’,即将该前继子串或前继后缀在SA中所属的块B的块号更新为与重定位后的新块号B’一致。
(3)将待归纳排序的前继子串或前继后缀写入块B。此任务包括:
(3.1)判断块B是否为当前数据块,若是则将该前继子串或前继后缀在X中的起始位置写入SA中bktB[c]指示的位置,否则将该前继子串或前继后缀在X中的起始位置写入SA中ctrB指示的位置。
(3.2)更新计数器。若块B是当前数据块,则更新bktB[c],否则更新ctrB。更新规则为:若该前继子串或前继后缀为L型,则将待更新计数器指示的位置向右移动一位,否则将其指示的位置向左移动一位。
待扫描并处理完当前块的所有子串或所有后缀后,跳转至S304。
S307、结束。
本实施例通过将待归纳排序的前继子串或前继后缀先定位至其在SA内所属的块,再在块内根据其首字符稳定排序至其最终位置,而非按照IS方法直接根据其首字符归纳排序至字符桶内,可以将归纳排序过程中需要随机访问的大小量级为O(n)的桶计数器压缩为量级O(块数)的块计数器,提高了构造后缀索引的方法及系统的数据局部性,提高了Cache命中率,使得构造后缀索引的时间效率更高、资源利用率更优。
需要说明的是,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
参照图4,示出了本申请一个实施例的一种文本后缀索引的分块归纳排序系统的示意图,具体可以包括如下模块:
子串或后缀存储模块401,用于针对任一字符串,确定所述字符串的多个子串或多个后缀,并将所述多个子串或所述多个后缀存储至预设的多个数据块;
数据块扫描模块402,用于按照预设顺序,扫描各个数据块;
子串或后缀排序模块403,用于针对扫描到的任一当前数据块,根据预设的稳定排序方式对所述当前数据块中的各个子串或各个后缀进行排序;
子串或后缀扫描模块404,用于按照预设顺序,扫描所述当前数据块中的各个子串或各个后缀;
目标数据块确定模块405,用于针对扫描到的任一目标子串或目标后缀,确定所述目标子串的特定类型的前继子串或所述目标后缀的特定类型的前继后缀所属的目标数据块;
前继子串或前继后缀写入模块406,用于将所述前继子串或所述前继后缀写入所属的目标数据块;
在本申请实施例中,所述子串或后缀存储模块401具体可以包括如下子模块:
存储单元分配子模块,用于为所述字符串分配用于存储所述字符串的后缀数组的存储单元;
数据块划分子模块,用于按照预设的分块方式,将所述存储单元划分为多个数据块,收集各个数据块的定位信息;
子串或后缀存储子模块,用于根据所述各个数据块的定位信息,将所述多个子串或所述多个后缀存储至所述多个数据块。
在本申请实施例中,所述字符串包括L型字符和S型字符,每个L型字符都对应以它为起始的一个L型子串和一个L型后缀,每个S型字符都对应以它为起始的一个S型子串和一个S型后缀,所述系统还可以包括如下模块:
预处理模块,用于令所述字符串中L型字符的值为后缀数组中对应字符桶的起始位置,以及,令所述字符串中S型字符的值为所述后缀数组中对应字符桶的结尾位置;根据所述多个子串或所述多个后缀的类型初始化各个数据块的块计数器;若所述多个子串为L型子串或所述多个后缀为L型后缀,则将所述块计数器指向各个数据块的块头位置;若所述多个子串为S型子串或LMS子串,或所述多个后缀为S型后缀或LMS后缀,则将所述块计数器指向各个数据块的块尾位置;在确定当前执行的归纳排序任务的类型时,重置所述各个数据块的块计数器;若所述当前执行的归纳排序任务为归纳排序L型子串或L型后缀,则将所述块计数器指向各个数据块的块头位置;若所述当前执行的归纳排序任务为归纳排序S型子串或S型后缀,则将所述块计数器指向各个数据块的块尾位置。
在本申请实施例中,所述子串或后缀排序模块403具体可以包括如下子模块:
子串或后缀扫描子模块,用于逐个扫描所述当前数据块中的各个子串或各个后缀;
排序子模块,用于根据所述子串的起始字符,以及当前数据块的桶计数器,将所述子串排序至所述起始字符对应的所述桶计数器指示的位置;或,根据所述后缀的起始字符,以及所述当前数据块的桶计数器,将所述后缀排序至所述起始字符对应的所述桶计数器指示的位置;
桶计数器更新子模块,用于若所述子串为L型子串或后缀为L型后缀,则将所述起始字符对应的所述桶计数器指示的位置向右移动一位;若所述子串为S型子串或后缀为S型后缀,则将所述起始字符对应的所述桶计数器指示的位置向左移动一位。
在本申请实施例中,所述目标数据块确定模块405具体可以包括如下子模块:
起始字符确定子模块,用于针对扫描到的任一目标子串,确定所述目标子串的特定类型的前继子串的起始字符,或针对扫描到的任一目标后缀,确定所述目标后缀的特定类型的前继后缀的起始字符;若所述当前执行的归纳排序任务为归纳排序L型子串或L型后缀,则仅处理所述目标子串的前继L型子串或所述目标后缀的前继L型后缀;若所述当前执行的归纳排序任务为归纳排序S型子串或S型后缀,则仅处理所述目标子串的前继S型子串或所述目标后缀的前继S型后缀;
目标数据块计算子模块,用于根据所述起始字符和所述各个数据块的定位信息,计算所述目标数据块的块号。
在本申请实施例中,所述目标数据块确定模块405还可以包括子模块:
边界字符判断子模块,用于判断所述目标子串的特定类型的前继子串的起始字符或所述目标后缀的特定类型的前继后缀的起始字符是否为边界字符;
边界字符数量读取子模块,用于若是,则读取所述目标数据块的边界字符的数量;
目标数据块重定位子模块,用于根据所述起始字符、所述数据块的固定长度和所述目标数据块的边界字符的数量,重定位当前扫描到的目标子串的特定类型的前继子串或当前扫描到的目标后缀的特定类型的前继后缀所属的新目标数据块,并将所述目标数据块的块号更新为与所述新目标数据块的块号一致。
在本申请实施例中,所述目标数据块重定位子模块具体可以包括如下单元:
第一重定位单元,用于若所述起始字符为L型字符,则计算所述起始字符对应的数值与所述目标数据块的边界字符的数量之和,以所述起始字符对应的数值与所述目标数据块的边界字符的数量之和为被除数,所述数据块的固定长度为除数,计算得到的商值向下取整获得的数值作为重定位的新目标数据块的块号;
第二重定位单元,用于若所述起始字符为S型字符,则计算所述起始字符对应的数值与所述目标数据块的边界字符的数量之差,以所述起始字符对应的数值与所述目标数据块的边界字符的数量之差为被除数,所述数据块的固定长度为除数,计算得到的商值向下取整获得的数值作为重定位的新目标数据块的块号;
边界字符数量更新单元,用于将所述重定位前的目标数据块的边界字符的数量加一。
目标数据块块号更新单元,用于将所述目标数据块的块号更新为与所述新目标数据块的块号一致。
在本申请实施例中,所述前继子串或前继后缀写入模块406具体可以包括如下子模块:
起始位置确定子模块,用于确定所述前继子串或所述前继后缀在所述字符串中的起始位置;
当前数据块判断子模块,用于判断所述目标数据块是否为所述当前数据块;
写入子模块,用于若当前数据块判断子模块的判断结果为是,则根据所述前继子串或所述前继后缀的起始字符,以及所述当前数据块的桶计数器,将所述前继子串或所述前继后缀在所述字符串中的起始位置对应的数值写入所述起始字符对应的所述桶计数器指示的位置,若所述前继子串为L型子串或所述前继后缀为L型后缀,则将所述起始字符对应的所述桶计数器指示的位置向右移动一位,若所述前继子串为S型子串或所述前继后缀为S型后缀,则将所述起始字符对应的所述桶计数器指示的位置向左移动一位;
若判断结果为否,则将所述前继子串或所述前继后缀在所述字符串中的起始位置对应的数值写入所述目标数据块的块计数器指示的位置;若所述前继子串为L型子串或所述前继后缀为L型后缀,则将所述块计数器指示的位置向右移动一位;若所述前继子串为S型子串或所述前继后缀为S型后缀,则将所述块计数器指示的位置向左移动一位。
对于系统实施例而言,由于其与方法实施例基本相似,所以描述得比较简单,相关之处参见方法实施例部分的说明即可。
参照图5,示出了本申请一个实施例的一种终端设备的示意图。如图5所示,本实施例的终端设备500包括:处理器510、存储器520以及存储在所述存储器520中并可在所述处理器510上运行的计算机程序521。所述处理器510执行所述计算机程序521时实现上述文本后缀索引的分块归纳排序方法各个实施例中的步骤,例如图1所示的步骤S101至S106。或者,所述处理器510执行所述计算机程序521时实现上述各系统实施例中各模块/单元的功能,例如图4所示模块401至406的功能。
示例性的,所述计算机程序521可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器520中,并由所述处理器510执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段可以用于描述所述计算机程序521在所述终端设备500中的执行过程。例如,所述计算机程序521可以被分割成子串或后缀存储模块、数据块扫描模块、子串或后缀排序模块、子串或后缀扫描模块、目标数据块确定模块和前继子串或前继后缀写入模块,各模块具体功能如下:
子串或后缀存储模块,用于针对任一字符串,确定所述字符串的多个子串或多个后缀,并将所述多个子串或所述多个后缀存储至预设的多个数据块;
数据块扫描模块,用于按照预设顺序,扫描各个数据块;
子串或后缀排序模块,用于针对扫描到的任一当前数据块,根据预设的稳定排序方式对所述当前数据块中的各个子串或各个后缀进行排序;
子串或后缀扫描模块,用于按照预设顺序,扫描所述当前数据块中的各个子串或各个后缀;
目标数据块确定模块,用于针对扫描到的任一目标子串或目标后缀,确定所述目标子串的特定类型的前继子串或所述目标后缀的特定类型的前继后缀所属的目标数据块;
前继子串或前继后缀写入模块,用于将所述前继子串或所述前继后缀写入所属的目标数据块。
所述终端设备500可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备500可包括,但不仅限于,处理器510、存储器520。本领域技术人员可以理解,图5仅仅是终端设备500的一种示例,并不构成对终端设备500的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备500还可以包括输入输出设备、网络接入设备、总线等。
所述处理器510可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器520可以是所述终端设备500的内部存储单元,例如终端设备500的硬盘或内存。所述存储器520也可以是所述终端设备500的外部存储设备,例如所述终端设备500上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等等。进一步地,所述存储器520还可以既包括所述终端设备500的内部存储单元也包括外部存储设备。所述存储器520用于存储所述计算机程序521以及所述终端设备500所需的其他程序和数据。所述存储器520还可以用于暂时地存储已经输出或者将要输出的数据。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制。尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (9)
1.一种文本后缀索引的分块归纳排序方法,其特征在于,包括:
针对任一字符串,确定所述字符串的多个子串或多个后缀,并将所述多个子串或所述多个后缀存储至预设的多个数据块,所述字符串包括L型字符和S型字符,每个L型字符都对应以它为起始的一个L型子串和一个L型后缀,每个S型字符都对应以它为起始的一个S型子串和一个S型后缀;
按照预设顺序,扫描各个数据块;
针对扫描到的任一当前数据块,根据预设的稳定排序方式对所述当前数据块中的各个子串或各个后缀进行排序;
按照预设顺序,扫描所述当前数据块中的各个子串或各个后缀;
针对扫描到的任一目标子串或目标后缀,确定所述目标子串的特定类型的前继子串或所述目标后缀的特定类型的前继后缀所属的目标数据块;
将所述前继子串或所述前继后缀写入所属的目标数据块;
其中,所述针对扫描到的任一当前数据块,根据预设的稳定排序方式对所述当前数据块中的各个子串或各个后缀进行排序的步骤包括:
逐个扫描所述当前数据块中的各个子串或各个后缀;
根据所述子串的起始字符,以及当前数据块的桶计数器,将所述子串排序至所述起始字符对应的所述桶计数器指示的位置;或,根据所述后缀的起始字符,以及所述当前数据块的桶计数器,将所述后缀排序至所述起始字符对应的所述桶计数器指示的位置;
若所述子串为L型子串或后缀为L型后缀,则将所述起始字符对应的所述桶计数器指示的位置向右移动一位;
若所述子串为S型子串或后缀为S型后缀,则将所述起始字符对应的所述桶计数器指示的位置向左移动一位。
2.根据权利要求1所述的方法,其特征在于,所述将所述多个子串或所述多个后缀存储至预设的多个数据块的步骤包括:
为所述字符串分配用于存储所述字符串的后缀数组的存储单元;
按照预设的分块方式,将所述存储单元划分为多个数据块,收集各个数据块的定位信息;
根据所述各个数据块的定位信息,将所述多个子串或所述多个后缀存储至所述多个数据块。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
通过预处理,令所述字符串中L型字符的值为所述后缀数组中对应字符桶的起始位置,以及,令所述字符串中S型字符的值为所述后缀数组中对应字符桶的结尾位置;
根据所述多个子串或所述多个后缀的类型初始化各个数据块的块计数器;若所述多个子串为L型子串或所述多个后缀为L型后缀,则将所述块计数器指向各个数据块的块头位置;若所述多个子串为S型子串或LMS子串,或所述多个后缀为S型后缀或LMS后缀,则将所述块计数器指向各个数据块的块尾位置;
在确定当前执行的归纳排序任务的类型时,重置所述各个数据块的块计数器;若所述当前执行的归纳排序任务为归纳排序L型子串或L型后缀,则将所述块计数器指向各个数据块的块头位置;若所述当前执行的归纳排序任务为归纳排序S型子串或S型后缀,则将所述块计数器指向各个数据块的块尾位置。
4.根据权利要求1所述的方法,其特征在于,所述针对扫描到的任一目标子串或目标后缀,确定所述目标子串的特定类型的前继子串或所述目标后缀的特定类型的前继后缀所属的目标数据块的步骤包括:
针对扫描到的任一目标子串,确定所述目标子串的特定类型的前继子串的起始字符,或针对扫描到的任一目标后缀,确定所述目标后缀的特定类型的前继后缀的起始字符;
若当前执行的归纳排序任务为归纳排序L型子串或L型后缀,则仅处理所述目标子串的L型前继子串或所述目标后缀的L型前继后缀;
若当前执行的归纳排序任务为归纳排序S型子串或S型后缀,则仅处理所述目标子串的S型前继子串或所述目标后缀的S型前继后缀;
根据所述起始字符和所述各个数据块的定位信息,计算所述目标数据块的块号。
5.根据权利要求4所述的方法,其特征在于,在所述根据所述起始字符和所述各个数据块的定位信息,计算所述目标数据块的块号的步骤后,还包括:
判断所述目标子串的特定类型的前继子串的起始字符或所述目标后缀的特定类型的前继后缀的起始字符是否为边界字符;
若是,则读取所述目标数据块的边界字符的数量;
根据所述起始字符、所述数据块的固定长度和所述目标数据块的边界字符的数量,重定位当前扫描到的目标子串的特定类型的前继子串或当前扫描到的目标后缀的特定类型的前继后缀所属的新目标数据块。
6.根据权利要求5所述的方法,其特征在于,所述根据所述起始字符、所述数据块的固定长度和所述目标数据块的边界字符的数量,重定位当前扫描到的目标子串的特定类型的前继子串或当前扫描到的目标后缀的特定类型的前继后缀所属的新目标数据块的步骤包括:
若所述起始字符为L型字符,则计算所述起始字符对应的数值与所述目标数据块的边界字符的数量之和,以所述起始字符对应的数值与所述目标数据块的边界字符的数量之和为被除数,所述数据块的固定长度为除数,计算得到的商值向下取整获得的数值作为重定位的新目标数据块的块号;
若所述起始字符为S型字符,则计算所述起始字符对应的数值与所述目标数据块的边界字符的数量之差,以所述起始字符对应的数值与所述目标数据块的边界字符的数量之差为被除数,所述数据块的固定长度为除数,计算得到的商值向下取整获得的数值作为重定位的新目标数据块的块号;
将所述重定位前的目标数据块的边界字符的数量加一;
将所述目标数据块的块号更新为与所述新目标数据块的块号一致。
7.根据权利要求1所述的方法,其特征在于,所述将所述前继子串或所述前继后缀写入所属的目标数据块的步骤包括:
确定所述前继子串或所述前继后缀在所述字符串中的起始位置;
判断所述目标数据块是否为所述当前数据块;
若是,则根据所述前继子串或所述前继后缀的起始字符,以及所述当前数据块的桶计数器,将所述前继子串或所述前继后缀在所述字符串中的起始位置对应的数值写入所述起始字符对应的所述桶计数器指示的位置;
若所述前继子串为L型子串或前继后缀为L型后缀,则将所述起始字符对应的所述桶计数器指示的位置向右移动一位;
若所述前继子串为S型子串或前继后缀为S型后缀,则将所述起始字符对应的所述桶计数器指示的位置向左移动一位;
否则,将所述前继子串或所述前继后缀在所述字符串中的起始位置对应的数值写入所述目标数据块的块计数器指示的位置;
若所述前继子串为L型子串或所述前继后缀为L型后缀,则将所述块计数器指示的位置向右移动一位;
若所述前继子串为S型子串或所述前继后缀为S型后缀,则将所述块计数器指示的位置向左移动一位。
8.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述文本后缀索引的分块归纳排序方法的步骤。
9.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述文本后缀索引的分块归纳排序方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910992420.5A CN110852046B (zh) | 2019-10-18 | 2019-10-18 | 一种文本后缀索引的分块归纳排序方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910992420.5A CN110852046B (zh) | 2019-10-18 | 2019-10-18 | 一种文本后缀索引的分块归纳排序方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110852046A CN110852046A (zh) | 2020-02-28 |
CN110852046B true CN110852046B (zh) | 2021-11-05 |
Family
ID=69596825
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910992420.5A Active CN110852046B (zh) | 2019-10-18 | 2019-10-18 | 一种文本后缀索引的分块归纳排序方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110852046B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111444413B (zh) * | 2020-04-08 | 2023-05-12 | 作业不凡(北京)教育科技有限公司 | 一种数据查询方法、装置和计算设备 |
CN112632343B (zh) * | 2020-12-30 | 2023-12-26 | 深圳大普微电子科技有限公司 | 一种字符串匹配方法、装置、设备及可读存储介质 |
CN112765938B (zh) * | 2021-01-13 | 2024-02-09 | 中山大学 | 构造后缀数组的方法、终端设备及计算机可读存储介质 |
CN112765421B (zh) * | 2021-01-13 | 2024-01-02 | 中山大学 | 一种数据检索方法及装置、终端设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107015951A (zh) * | 2017-03-24 | 2017-08-04 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种后缀数组的正确性验证方法及系统 |
CN108763170A (zh) * | 2018-04-17 | 2018-11-06 | 佛山市顺德区中山大学研究院 | 常数工作空间并行构造后缀数组的方法及系统 |
CN108804204A (zh) * | 2018-04-17 | 2018-11-13 | 佛山市顺德区中山大学研究院 | 多线程并行构造后缀数组的方法及系统 |
CN109375989A (zh) * | 2018-09-10 | 2019-02-22 | 中山大学 | 一种并行后缀排序方法及系统 |
CN109857366A (zh) * | 2019-02-20 | 2019-06-07 | 武汉轻工大学 | 基于外存的插入排序方法、系统、设备及存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4181723B2 (ja) * | 2000-02-29 | 2008-11-19 | 株式会社リコー | 索引作成装置、索引作成方法および記録媒体 |
US8745061B2 (en) * | 2010-11-09 | 2014-06-03 | Tibco Software Inc. | Suffix array candidate selection and index data structure |
US20140123147A1 (en) * | 2012-11-01 | 2014-05-01 | Nvidia Corporation | System, method, and computer program product for parallel reconstruction of a sampled suffix array |
US9760546B2 (en) * | 2013-05-24 | 2017-09-12 | Xerox Corporation | Identifying repeat subsequences by left and right contexts |
CN106953806B (zh) * | 2017-03-27 | 2020-10-23 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种基于后缀索引匹配ip地址的方法及系统 |
CN109299152B (zh) * | 2018-08-27 | 2021-11-30 | 中山大学 | 一种实时数据流的后缀数组索引方法及装置 |
-
2019
- 2019-10-18 CN CN201910992420.5A patent/CN110852046B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107015951A (zh) * | 2017-03-24 | 2017-08-04 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种后缀数组的正确性验证方法及系统 |
CN108763170A (zh) * | 2018-04-17 | 2018-11-06 | 佛山市顺德区中山大学研究院 | 常数工作空间并行构造后缀数组的方法及系统 |
CN108804204A (zh) * | 2018-04-17 | 2018-11-13 | 佛山市顺德区中山大学研究院 | 多线程并行构造后缀数组的方法及系统 |
CN109375989A (zh) * | 2018-09-10 | 2019-02-22 | 中山大学 | 一种并行后缀排序方法及系统 |
CN109857366A (zh) * | 2019-02-20 | 2019-06-07 | 武汉轻工大学 | 基于外存的插入排序方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110852046A (zh) | 2020-02-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110852046B (zh) | 一种文本后缀索引的分块归纳排序方法及系统 | |
US10332008B2 (en) | Parallel decision tree processor architecture | |
CN110837584B (zh) | 一种分块并行构造后缀数组的方法及系统 | |
Kim et al. | Sort vs. hash revisited: Fast join implementation on modern multi-core CPUs | |
Niu et al. | PARDA: A fast parallel reuse distance analysis algorithm | |
US20150262062A1 (en) | Decision tree threshold coding | |
Peng et al. | Paris: The next destination for fast data series indexing and query answering | |
Bisson et al. | Static graph challenge on gpu | |
US20150262063A1 (en) | Decision tree processors | |
Zhang et al. | cublastp: Fine-grained parallelization of protein sequence search on cpu+ gpu | |
Manca et al. | CUDA‐quicksort: an improved GPU‐based implementation of quicksort | |
CN105359142B (zh) | 哈希连接方法和装置 | |
CN109375989B (zh) | 一种并行后缀排序方法及系统 | |
CN111028897A (zh) | 一种基于Hadoop的基因组索引构建的分布式并行计算方法 | |
Quirino et al. | fgssjoin: A GPU-based Algorithm for Set Similarity Joins. | |
Leal et al. | TKSimGPU: A parallel top-K trajectory similarity query processing algorithm for GPGPUs | |
JPWO2019156060A1 (ja) | 並列ユニオン制御装置、並列ユニオン制御方法、および並列ユニオン制御用プログラム | |
Han et al. | Succinct suffix sorting in external memory | |
Roh et al. | Advanced block nested loop join for extending SSD lifetime | |
Xu et al. | Evaluation and trade-offs of graph processing for cloud services | |
Groth et al. | Parallelizing Approximate Search on Adaptive Radix Trees. | |
CN117271533B (zh) | 一种大型数据链表的构建方法、装置及终端设备 | |
Liang et al. | The attribute reduction algorithm based on parallel computing | |
Song et al. | SIMD-based multiple sets intersection with dual-scale search algorithm | |
US20240004954A1 (en) | Computer-implemented accumulation method for sparse matrix multiplication applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |