一种大型数据链表的构建方法技术

技术编号:39829891 阅读:8 留言:0更新日期:2023-12-29 16:07
本发明专利技术公开了一种大型数据链表的构建方法

【技术实现步骤摘要】
一种大型数据链表的构建方法、装置及终端设备


[0001]本专利技术涉及计算机
,特别是涉及一种大型数据链表的构建方法

装置及终端设备


技术介绍

[0002]后缀链表由后缀数组(
Suffix Array
)发展而来,是一种全文索引数据结构,主要应用于数据压缩领域

任给定长为
n
的字符串
X
,其后缀链表是一个长度为
n+1
整型数组,第一个元素为链表头,指向字符串的最小后缀,其他元素指向比当前后缀字典序更大的下一个后缀位置,可以根据链表头升序遍历整个后缀链表

大型数据后缀链表的构建效率直接决定着压缩过程的计算效率,是整个计算过程的关键

[0003]现有的链表构建技术主要针对小型数据,整个计算过程在内存中完成,对于超过计算机内存的大型数据不适用

理论上,如果已知大型数据后缀数组,可以通过顺序扫描后缀数组,以后缀位置为排序关键字,使用优先权队列对后缀进行排序和链接,生成最终的大型数据链表

但是该方法的缺点是需要额外时间计算后缀数组,特别对于大型数据而言,计算后缀数组需要耗费大量的时间


技术实现思路

[0004]本专利技术针对现有技术的问题,提供了一种大型数据链表的构建方法

装置及终端设备,该方法直接从大型数据计算后缀链表,无需计算后缀数组,提高压缩过程的计算效率

[0005]为了实现上述目的,本专利技术提供如下技术方案:一方面,本专利技术提供了一种大型数据后缀链表的构建方法,包括:
[0006]根据设备内存和字符串
X
的大小,在逻辑上将字符串
X
切分为多块,将后缀切分为不同的后缀桶块,各块可以在内存中完成归纳排序;所述后缀桶块是由连续的后缀桶组成,保存在外存上的数据分块;所述后缀桶是由相同首字母的后缀组成;
[0007]从右至左依次将字符串
X
各分块读入内存,对
S*
类型子串进行归纳排序,按照访问顺序分别将
L
类型和
S
类型子串的前继字符,分别顺序保存至外存对应的后缀桶块;
[0008]以子串首字符和访问顺序为排序关键字,采用最小优先权队列,以后缀桶块的形式对
L
类型子串升序排序,并将生成的
L
类型子串序列保存至外存对应的后缀桶块;采用最大优先权队列,以后缀桶块的形式对
S
类型子串降序排序,并将生成的
S
类型子串序列保存至外存对应的后缀桶块;
[0009]依次升序遍历
S
类型子串序列后缀桶块,对
S*
子串进行命名,生成新的收缩字符串
X1
,若其中的字符不唯一,递归执行上述步骤;
[0010]从右至左依次将
X
各分块读入内存,采用归纳排序的访问规则,根据已有序的
S*
类型后缀,分别计算
L
类型和
S
类型后缀的前继字符,分别顺序保存至外存对应的后缀桶块;
[0011]若当前递归层为非0层,分别采用最大和最小优先权队列,以后缀首字符和访问顺
序为排序关键字,以后缀桶块的形式分别对
L
类型和
S
类型后缀进行归纳排序,生成当前层的后缀数组;
[0012]若当前递归层为第0层,分别采用最大和最小优先权队列,以后缀首字符和访问顺序为排序关键字,分别将
L
类型和
S
类型后缀排序至所属的后缀桶块,然后使用多路归并排序,按照字典序从后缀桶块依次获取各个后缀顺序,并根据相邻后缀的位置信息,计算后缀的指针域和所属的后缀链表桶块,接着对后缀链表桶块按照位置排序,合并各后缀链表桶块,生成最终链表

[0013]所述后缀链表桶块是后缀链表中一段连续位置上的后缀,各后缀由二元组表示,元组第1项为后缀位置,第2项为后缀的指针域,指向比当前后缀大的下一个后缀的位置

一个后缀被写入一个后缀链表桶块时,并未按照后缀位置排列,所以需要先将后缀链表桶块按后缀位置排序,然后合并各后缀链表桶块,形成最终链表

[0014]另一方面,本专利技术还提供了一种大型数据链表的构建装置,包括:
[0015]字符串预处理模块,用于从外存读取字符串,计算字符类型,将字符串切分为多个块;
[0016]子串前继字符计算模块,用于计算
X
各分块子串前继字符序列,并保存至外存对应的后缀桶块;
[0017]子串排序模块,根据
X
各分块的
S*
类型字符字典序,计算
L
类型子串顺序,然后计算
S
类型子串顺序;
[0018]子串命名模块,扫描已有序的
S*
类型子串,命名生成新的收缩字符串
X1

[0019]判定器
A
,用于判断新字符串
X1
中字符是否唯一;
[0020]后缀前继字符计算模块,用于计算
X
各分块后缀前继字符,并保存至外存对应的后缀桶块;
[0021]判定器
B
,用于判断当前递归层是否为第0层;
[0022]后缀排序模块,根据
X1
各分块的
S*
类型后缀字典序,计算
L
类型后缀顺序,然后计算
S
类型后缀顺序,最后合并两种类型后缀;
[0023]后缀桶块计算模块,根据
X
各分块的
S*
类型后缀字典序,计算各
L
类型后缀桶块,然后计算
S
类型后缀桶块;
[0024]链接信息计算模块,采用多路归并排序从各后缀桶块依次升序取出各个后缀,根据获取的相邻后缀的信息,计算后缀的指针域,并根据其位置,写入对应的后缀链表桶块;
[0025]后缀链表桶块合并模块,对各个后缀链表桶块按照后缀位置进行排序,最后合并各块,生成最终链表

[0026]再一方面,本专利技术还提供了一种终端设备,包括存储器

处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面所述一种大型数据链表构建方法的步骤

[0027]与现有技术相比,本专利技术的有益效果为:
[0028]本专利技术提出的终端设备先将采用归纳排序方法递归地对后缀进行排序,在程序第0递归层时计算后缀所属的后缀链表桶块和后缀的指针域,然后对后缀链表桶块根据后缀位置排序,最后依次合并各后缀链表桶块生成最终链表

本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种大型数据链表的构建方法,其特征在于,包括:根据设备内存大小,在逻辑上将字符串
X
切分为多块,将后缀切分为不同的后缀桶块,切分原则为
X
各块及其对应的后缀桶块可以在内存中完成归纳排序过程;从右至左依次将字符串
X
各分块读入内存,对
S*
类型子串进行归纳排序,按照访问顺序分别将
L
类型和
S
类型子串的前继字符,分别顺序保存至外存对应的后缀桶块;以子串首字符和访问顺序为排序关键字,采用最小优先权队列,以桶块的形式对
L
类型子串升序排序,并将生成的
L
类型子串序列保存至外存对应的后缀桶块;采用最大优先权队列,以桶块的形式对
S
类型子串降序排序,并将生成的
S
类型子串序列保存至外存对应的后缀桶块;依次升序遍历
S
类型子串后缀桶块,对
S*
子串进行命名,生成新的收缩字符串
X1
,若其中的字符不唯一,程序进入递归;从右至左依次将
X
各分块读入内存,采用归纳排序的访问规则,根据已有序的
S*
类型后缀,分别计算
L
类型和
S
类型后缀的前继字符,分别顺序保存至外存对应的后缀桶块;在程序递归高层,分别采用最大和最小优先权队列,以后缀首字符和访问顺序为排序关键字,以后缀桶块的形式分别对
L
类型和
S
类型后缀归纳排序,生成当前层的后缀数组;在程序递归0层,分别采用最大和最小优先权队列,以后缀首字符和访问顺序为排序关键字,分别将
L
类型和
S
类型后缀排序至所属的后缀桶块,然后使用多路归并排序,按照字典序从后缀桶块依次获取各个后缀顺序,并根据相邻后缀的位置信息,计算后缀的指针域和所属的后缀链表桶块,接着对后缀链表桶块按照位置排序,合并各块,生成最终后缀链表
。2.
根据权利要求1所述的方法,其特征在于,所述
L
类型子串排序过程为:采用最小优先权队列
PQ1,以子串首字符

顺序号和子串位置为排序关键字,以后缀桶块形式升序排序,具体步骤:初始化
PQ1为空,设子串顺序号
idx=0
,将当前后缀桶块读至内存数组
A
中,每个子串为三元组
<chr, idx, pos>
,分别表示各子串首字符

顺序号和位置,对
A
中元素进行升序排序;升序遍历
L
类型后缀桶块各后缀桶,对于同一个后缀桶,先遍历
X
块中
S*
类型字符,后遍历数组
A

PQ1,对于每个被遍历子串元组
e=<chr, idx, pos>
,根据
e.pos
计算子串
e
所属的后缀桶块编号,从编号对应的外存空间读取
e
的前继字符
chr0,若该前继为
L
类型,根据
chr0计算该前继所属的后缀桶块,如果属于当前后缀桶块,将前继元组
e0=<chr0, idx+1, pos

1>
压入
PQ1中,否则将
e0写出至前继对应的后缀桶块
。3.
根据权利要求1所述的方法,其特征在于,所述
S
类型子串排序过程为:采用最大优先权队列
PQ2,以子串首字符

顺序号和子串位置为排序关键字,以后缀桶块形式降序排序,具体步骤:初始化
PQ2为空,设顺序号
idx=n
,将当前
S
类型后缀桶块读至内存数组
A
中,每个子串为三元组
<chr, idx, pos>
,对数组
A
降序排序;降序遍历
S
类型后缀桶块中各后缀桶,对于同一个后缀桶,先遍历
L
类型后缀桶块,后遍历数组
A

PQ2,对于每个被遍历子串,根据
e.pos
计算子串
e
所属的后缀桶块编号,从编号对应的外存空间读取
e
的前继字符
chr0,若该前继为
S
类型,根据
chr0计算该前继所属的后缀桶块,如果属于当前后缀桶块,将前继元组
e0=<chr0, idx

1, pos

1>
压入
PQ2中,否则将
e0写出至对应的后缀桶块
。4.
根据权利要求1所述的方法,其特征在于,所述
L
类型后缀排序过程为:初始化
PQ1为空,将当前
L
类型后缀桶块读至内存数组
A
中,各后缀为二元组
<chr, pos>...

【专利技术属性】
技术研发人员:韩凌波李晓玉冯天心
申请(专利权)人:广东海洋大学
类型:发明
国别省市:

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

1