System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种自带验证功能的大型数据链表的构建方法及构建装置制造方法及图纸_技高网

一种自带验证功能的大型数据链表的构建方法及构建装置制造方法及图纸

技术编号:41211999 阅读:7 留言:0更新日期:2024-05-09 23:35
本发明专利技术公开了一种自带验证功能的大型数据链表的构建方法及构建装置,涉及计算机技术领域,包括:根据设备内存大小,将字符串及其后缀数组分块,递归使用外存分块归纳排序对S*类型后缀排序,计算其升序和降序指纹值;采用相同的排序方法,根据S*类型后缀的顺序,将L类型后缀排序至对应的后缀桶块,将L*类型后缀保存至外存;根据L*类型后缀的顺序,将S类型后缀排序至对应的后缀桶块,计算降序S*类型后缀的指纹值;采用多路归并排序,从L和S类型后缀桶块按字典序获取各后缀,计算后缀的指针域和后缀链表块,以及升序S*类型后缀的指纹值;对后缀链表块按位置进行排序后合并,生成最终链表,最后比较升序和降序指纹值给出验证结果。

【技术实现步骤摘要】

本专利技术涉及计算机,特别是涉及一种自带验证功能的大型数据链表的构建方法及构建装置


技术介绍

1、后缀链表,是将已排序后缀按照位置链接起来形成的单链表,主要应用于数据压缩领域。给定一个长为n的字符串t,其对应的后缀链表ψ(t)是一个长为n+1整型数组,第一个元素ψ[0]为链表头,指向t的最小后缀,其他元素指向比当前后缀字典序更大的下一个后缀位置,可以根据ψ[0]遍历整个后缀链表。大型数据后缀链表的正确性直接决定着压缩过程正确性和压缩效率,因此验证大型数据后缀链表的正确性是大型数据压缩不可缺少的步骤。

2、现有的后缀链表正确性验证技术主要针对小型数据,包括两种方法:(1)在内存中通过遍历整个链表,逐次比较相邻后缀的大小关系;(2)将正确性验证集成到链表的构建过程中,计算和验证同时进行。但是,对于超过设备内存的大型数据,字符串t及其链表都保存在外存,上述两种方法并不适用。理论上,可以根据后缀链表指向关系,从字符串t中读取后缀链表中相邻后缀,逐个字符进行比较,但是该方法需要对外存进行大量随机读操作,特别对于大型数据而言,对外存的随机读操作会花费大量的时间,计算效率低。


技术实现思路

1、本专利技术针对现有技术的问题,提供了一种自带验证功能的大型数据链表的构建方法及构建装置,在大型数据链表构建的过程中,同时对链表正确性进行验证,在生成链表的同时给出验证结果,无需单独进行正确性验证,提高了大型数据链表正确性验证的计算效率。

2、为了实现上述目的,本专利技术提供如下技术方案:一方面,本专利技术提供了一种自带验证功能的大型数据链表的构建方法,包括:

3、从外存从右至左读取字符串t,通过比较相邻字符的字典序,检索s*类型字符出现的位置,并根据设备内存大小,以s*类型字符为分隔符,将字符串t在逻辑上切分为多个分块;

4、扫描字符串t,统计各个后缀桶中元素个数,并根据设备内存大小,将后缀桶切分为不同的后缀桶块,各块可以在内存中完成归纳排序;所述后缀桶块是由连续的后缀桶组成,保存在外存的数据分块;所述后缀桶是由后缀数组中相同首字母的后缀组成;

5、递归采用外存分块归纳排序计算字符串t的s*类型后缀的顺序,使用指纹函数迭代计算升序和降序s*类型后缀的指纹值fp1和fp2;

6、根据已有序的s*类型后缀,计算字符串t的各个分块的l类型和s类型后缀的前继字符,顺序保存至字符串t各个分块对应的l和s类型前继分块;所述l和s类型前继分块是由l和s类型后缀的前继字符组成,分别保存在外存的数据分块;

7、遍历s*类型后缀和l类型前继分块,采用小顶堆,以后缀首字符和顺序号为排序关键字,将l类型后缀排序至其所属的l类型后缀桶块,将l*类型后缀顺序保存至外存;

8、降序遍历l*类型后缀和s类型前继分块,采用大顶堆,以后缀首字符和顺序号为排序关键字,将s类型后缀排序至其所属的s类型后缀桶块,使用指纹函数迭代计算降序s*类型后缀的指纹值fp3;

9、采用多路归并排序,按照字典序从l和s类型后缀桶块依次获取各个后缀顺序,并根据相邻后缀的位置信息,计算后缀的指针域和所属的后缀链表块,接着对后缀链表块按照位置排序,合并各个后缀链表块,生成最终链表,期间使用指纹函数迭代计算升序s*类型后缀的指纹值fp4;

10、比较s*类型后缀升序和降序指纹值,给出最终生成后缀链表正确性验证结果。

11、另一方面,本专利技术还提供了一种自带验证功能的大型数据链表的构建装置,包括:字符串预处理模块,将字符串t切分为多个块,将后缀桶分成多个后缀桶块;s*类型后缀排序模块,对字符串t的s*类型后缀排序,计算升序和降序s*类型后缀的指纹值;后缀前继字符计算模块,用于计算字符串t各个分块的l和s类型后缀前继字符,并保存至外存对应的前继分块;l类型后缀排序模块,根据s*类型后缀的顺序,计算l类型后缀的顺序,将l*类型后缀保存至外存;s类型后缀排序模块,根据l*类型后缀的顺序,计算s类型后缀的顺序,计算降序s*类型后缀的指纹值;后缀链接模块,将l和s类型后缀桶块中的后缀链接起来生成最终后缀链表,计算升序s*类型后缀的指纹值;验证模块,通过比较升序和降序s*类型后缀的指纹值,验证后缀链表的正确性。

12、再一方面,本专利技术还提供了一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面所述的一种自带验证功能的大型数据链表的构建方法。

13、与现有技术相比,本专利技术的有益效果为:

14、本专利技术提出的电子设备,首先对s*类型后缀进行排序,计算其升序和降序指纹值,然后根据s*类型后缀推导l和s类型后缀的顺序,合并两者生成最终链表,期间计算升序和降序s*类型后缀的指纹值,最后通过比较指纹值的异同,来验证链表的正确性。在计算大型数据lz77因子分解的应用场景中,可以采用本实施例提出的一种自带验证功能的大型数据链表的构建方法,将正确性验证就集成到链表构建过程中,无需独立验证,明显降低了正确性验证的时间开销。

本文档来自技高网...

【技术保护点】

1.一种自带验证功能的大型数据链表的构建方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述将L类型后缀排序至其所属的后缀桶块的过程:采用小顶堆HP1,以后缀首字符和顺序号为排序关键字,依次读取堆顶后缀,并写至其对应的L类型后缀桶块,包含以下步骤:(1)初始化HP1为空,顺序号id=0,将当前最小的L类型后缀桶块读至内存数组Y中,其元素为二元组<chr,pos>,chr和pos分别表示后缀的首字符和位置,对Y进行稳定升序排序;(2)升序遍历数组Y和S*类型后缀的各个后缀桶,对于同一个后缀桶,依次遍历S*类型后缀桶、数组Y和HP1,对于当前被遍历后缀e=<chr,pos>,如果它的前继是L类型,则从它对应的前继分块读取其前继字符chr0;若该前继属于当前后缀桶块,将前继元组e0=<chr0,pos-1,id++>压入HP1中,否则将e0写至其对应的L类型后缀桶块;如果e的前继为S类型,将e追加到L*类型后缀序列LStar的尾部;(3)继续对下一个L类型后缀桶块执行上述步骤,直至所有L类型桶块被遍历完成。

>3.根据权利要求1所述的方法,其特征在于,所述将S类型后缀排序至其所属的后缀桶块的过程:采用大顶堆HP2,以后缀首字符和顺序号为排序关键字,依次读取堆顶后缀,并写至其对应的S类型后缀桶块,包含以下步骤:(1)初始化HP2为空,顺序号id=n,将当前最大的S类型后缀桶块读至内存数组Y中,其元素为二元组<chr,pos>,对Y进行稳定降序排序;(2)降序遍历数组Y和L*类型后缀序列LStar的各个后缀桶,对于同一个后缀桶,依次遍历数组Y、LStar和HP2,对于当前被遍历后缀e=<chr,pos>,如果它的前继为S类型,则从它对应的前继分块读取其前继字符chr0;若该前继属于当前后缀桶块,将前继元组e0=<chr0,pos-1,id-->压入HP2中,否则将e0写至其对应的S类型后缀桶块;如果e的前继为L类型,使用Karp-Rabin指纹函数迭代计算降序S*类型后缀的指纹值fp3;(3)继续对下一个S类型后缀桶块执行上述步骤,直至所有S类型桶块被遍历完成。

4.根据权利要求1所述的方法,其特征在于,所述后缀的指针域和后缀链表块的计算过程:假设后缀链表块长度为K,e1和e2和e3为依次取出的3个后缀,当取到e2时,将e1的指针域设置为e2.pos,构造e1的二元组<e1.pos,e2.pos>,并将其保存至第e1.pos/K个后缀链表块,其中e1.pos和e2.pos分别为e1和e2的位置;当取到e3时,计算e2的指针域和后缀链表块;依次类推,直至取到最后一个缀,将其指针域设置为0,指向链表头。

5.根据权利要求1所述的方法,其特征在于,所述合并各个后缀链表块生成最终链表的过程,首先对后缀链表块中的后缀按位置排序,然后从左至右依次合并各后缀链表块,得到最终链表。

6.一种自带验证功能的大型数据链表的构建装置,应用于权利要求1所述的大型数据链表的构建方法,其特征在于,包括:字符串预处理模块,将字符串T切分为多个块,将后缀桶分成多个后缀桶块;S*类型后缀排序模块,对字符串T的S*类型后缀排序,计算升序和降序S*类型后缀的指纹值;后缀前继字符计算模块,用于计算字符串T各个分块的L和S类型后缀前继字符,并保存至外存对应的前继分块;L类型后缀排序模块,根据S*类型后缀的顺序,计算L类型后缀的顺序,将L*类型后缀保存至外存;S类型后缀排序模块,根据L*类型后缀的顺序,计算S类型后缀的顺序,计算降序S*类型后缀的指纹值;后缀链接模块,将L和S类型后缀桶块中的后缀链接起来生成最终后缀链表,计算升序S*类型后缀的指纹值;验证模块,通过比较升序和降序S*类型后缀的指纹值,验证后缀链表的正确性。

7.一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1所述的一种自带验证功能的大型数据链表的构建方法。

...

【技术特征摘要】

1.一种自带验证功能的大型数据链表的构建方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述将l类型后缀排序至其所属的后缀桶块的过程:采用小顶堆hp1,以后缀首字符和顺序号为排序关键字,依次读取堆顶后缀,并写至其对应的l类型后缀桶块,包含以下步骤:(1)初始化hp1为空,顺序号id=0,将当前最小的l类型后缀桶块读至内存数组y中,其元素为二元组<chr,pos>,chr和pos分别表示后缀的首字符和位置,对y进行稳定升序排序;(2)升序遍历数组y和s*类型后缀的各个后缀桶,对于同一个后缀桶,依次遍历s*类型后缀桶、数组y和hp1,对于当前被遍历后缀e=<chr,pos>,如果它的前继是l类型,则从它对应的前继分块读取其前继字符chr0;若该前继属于当前后缀桶块,将前继元组e0=<chr0,pos-1,id++>压入hp1中,否则将e0写至其对应的l类型后缀桶块;如果e的前继为s类型,将e追加到l*类型后缀序列lstar的尾部;(3)继续对下一个l类型后缀桶块执行上述步骤,直至所有l类型桶块被遍历完成。

3.根据权利要求1所述的方法,其特征在于,所述将s类型后缀排序至其所属的后缀桶块的过程:采用大顶堆hp2,以后缀首字符和顺序号为排序关键字,依次读取堆顶后缀,并写至其对应的s类型后缀桶块,包含以下步骤:(1)初始化hp2为空,顺序号id=n,将当前最大的s类型后缀桶块读至内存数组y中,其元素为二元组<chr,pos>,对y进行稳定降序排序;(2)降序遍历数组y和l*类型后缀序列lstar的各个后缀桶,对于同一个后缀桶,依次遍历数组y、lstar和hp2,对于当前被遍历后缀e=<chr,pos>,如果它的前继为s类型,则从它对应的前继分块读取其前继字符chr0;若该前继属于当前后缀桶块,将前继元组e0=<chr0,pos-1,id-->压入hp2中,否则将e0写至其对应的s类型后缀桶块;如果e的前继为l类型,使...

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

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

1