【技术实现步骤摘要】
一种大型数据链表的构建方法、装置及终端设备
[0001]本专利技术涉及计算机
,特别是涉及一种大型数据链表的构建方法
、
装置及终端设备
。
技术介绍
[0002]后缀链表由后缀数组(
Suffix Array
)发展而来,是一种全文索引数据结构,主要应用于数据压缩领域
。
任给定长为
n
的字符串
X
,其后缀链表是一个长度为
n+1
整型数组,第一个元素为链表头,指向字符串的最小后缀,其他元素指向比当前后缀字典序更大的下一个后缀位置,可以根据链表头升序遍历整个后缀链表
。
大型数据后缀链表的构建效率直接决定着压缩过程的计算效率,是整个计算过程的关键
。
[0003]现有的链表构建技术主要针对小型数据,整个计算过程在内存中完成,对于超过计算机内存的大型数据不适用
。
理论上,如果已知大型数据后缀数组,可以通过顺序扫描后缀数组,以后缀位置为排序关键字,使用优先权队列对后缀进行排序和链接,生成最终的大型数据链表
。
但是该方法的缺点是需要额外时间计算后缀数组,特别对于大型数据而言,计算后缀数组需要耗费大量的时间
。
技术实现思路
[0004]本专利技术针对现有技术的问题,提供了一种大型数据链表的构建方法
、
装置及终端设备,该方法直接从大型数据计算后缀链表,无需计算后缀数组,提高压缩过程的计算效率
。 ...
【技术保护点】
【技术特征摘要】
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>...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。