生成符号的代码字母表以便为与程序一起使用的字生成代码字的制作方法

文档序号:7541449阅读:332来源:国知局
生成符号的代码字母表以便为与程序一起使用的字生成代码字的制作方法
【专利摘要】提供了一种用于生成用于由部署的程序用来为字确定代码字的代码字母表的计算机程序产品、系统和方法。生成具有第一数目的符号的第一代码字母表,第一数目的符号提供字的可变长度编码。在第一代码字母表中的符号被合并成在第一代码字母表中的符号的第二数目的组,其中第二数目小于第一数目。生成具有第二数目的符号的第二代码字母表,其中使用第二代码字母表中的符号被产生的代码字的第二平均代码字长度小于字的代码字长度(b),并且其中第二代码字母表包括由部署的程序使用的代码字母表。
【专利说明】生成符号的代码字母表以便为与程序一起使用的字生成代
码字
【技术领域】
[0001]本发明涉及用于生成用于为与程序一起被使用的字生成代码字的符号的代码字母表的计算机程序产品、系统、方法和数据结构。
【背景技术】
[0002]数据压缩涉及将输入数据流中的符号(包括数据符号和控制符号)转换成包括比输入数据流更少的数据的压缩的输出数据流。控制符号被编码在压缩的数据流中并且提供解码指令以允许解压缩,并且可以由作为压缩数据的应用程序创建。由应用创建的控制符号的示例包括控制信号的结尾、文件标志和数据集边界。存在由压缩设备确定的其他事件或者控制,比如何时置换成给定的压缩方案以及何时重置用来执行给定的方案中的压缩的历史缓冲器。压缩设备可以决定创建接入点,在该接入点处压缩始自遇到使用在数据集边界之后的特定方案的重置的历史缓冲器。
[0003]一种编码技术类型(霍夫曼编码)提供无损压缩算法,该无损压缩算法使用符号的可变长度代码表以用于对源符号编码,其中可变长度代码表已经给予针对每个可能的源符号的出现的估计的概率被导出以产生源符号的编码。
[0004]流传输无损数据压缩算法(SLDC)接收控制符号和数据符号的输入数据流并且将数据字符的连续字节的串转换成副本指针和具有比输入数据流中的数据字节更少的比特的文字数据符号。SLDC算法用来压缩和解压线性磁带开放(LTO)磁带盒中的数据。在日期为 2001 年 6 月 I 日的标准 ECMA-321 出版物“Streaming Lossless Data Compress1nAlgorithm - (SLDC) ”中描述了 SLDC算法的细节。
[0005]SLDC算法当在历史缓冲器中没有连续字节跟随数据字节时将文字数据符号输出到压缩的数据流中,从而使得文字数据字节被输出而未压缩。SLDC算法将副本指针符号输出到输出数据流中以代表与历史缓冲器中的相同数目的连续数据字节匹配的多个连续数据字节。副本指针符号包括指示该符号是副本指针的一比特、指示匹配的连续字节的数目的匹配计数字段以及指示具有包括匹配的连续字节的第一字节的历史缓冲器条目的绝对存储器地址的移位字段。
[0006]在本领域中需要提供用于产生用来代表程序(包括但不限于压缩程序)中的字值的代码字母表的技术。

【发明内容】

[0007]提供了一种用于生成用于由部署的程序用来为具有在计算系统中被使用的b比特的长度的字确定代码字的代码字母表的计算机程序产品、系统和方法,其中代码字具有小于b的平均代码字长度。生成具有第一数目的符号的第一代码字母表,第一数目的符号提供字的可变长度编码,其中使用第一代码字母表中的符号被产生的代码字的第一平均代码字长度小于字的代码字长度(b)。在第一代码字母表中的符号被合并成在第一代码字母表中的符号的第二数目的组,其中第二数目小于第一数目。生成具有第二数目的符号的第二代码字母表,其中使用第二代码字母表中的符号被产生的代码字的第二平均代码字长度小于字的代码字长度(b),并且其中第二代码字母表包括由部署的程序使用的代码字母表。
【专利附图】

【附图说明】
[0008]图1图示了计算环境的实施例。
[0009]图2图示了副本指针符号的现有技术实现方式。
[0010]图3图示了移位计数可变长度代码表的实施例。
[0011]图4a和图4b图不了用于产生第一代码字母表和第二代码字母表的操作的实施例。
[0012]图5和图6图示了用于合并来自第一代码字母表的符号以用于生成第二代码字母表的操作的实施例。
[0013]图7图示了 214相对移位计数值的出现频率分布的示例。
[0014]图8a和图Sb图示了用于使用不同数目的合并的相对移位计数值的不同霍夫曼编码的熵和平均代码字长度(ACL)值。
[0015]图9a和图9b图示了用于分别选择128个值和32和值来合并的符号的字的出现概率分布。
[0016]图10图示了在历史缓冲器中在压缩操作期间出现的相对移位值的霍夫曼编码的示例。
[0017]图11和图13图示了通过基于图7中的分布选择128个值来合并而来自第一代码字母表的符号的不例。
[0018]图12和图14图示了将分别来自图11和图13中的符号的连续符号分组成18个组以形成具有分别比图11和图13的第一代码字母表更少的符号的第二代码字母表的示例。
[0019]图15图示了其中可以实施所描述的实施例的计算机架构。
【具体实施方式】
[0020]所描述的实施例提供了用于根据字频率分布生成符号的第一代码字母表的技术,其中符号映射到字集合并且其中由第一代码字母表中的符号产生的代码字具有小于字集合的长度的平均代码字长度。来自第一代码字母表的符号被合并成组以形成具有用于来自第一代码字母表的合并的符号的组中的每个组的符号的第二代码字母表。第二代码字母表具有比第一代码字母表更少的符号以及比集合中的字的长度更小的平均代码字长度。以这一方式,第二代码字母表比第一代码字母表更易于实施和使用,因此它具有更少的符号但是具有与第一代码字母表的平均代码字长度大体相似的平均代码字长度,以便在没有压缩中的损耗的情况下提供更少的符号。
[0021]图1提供了用于生成代码字母表以在程序中使用以生成用于由程序使用的字的代码字的计算环境的实施例,其中生成的代码字具有比字的长度更小的平均长度。系统2包括处理器4和存储器6。存储器6包括代码字母表生成器8,其用于生成用于具有长度b的N个字的集合的代码字母表。代码字母表生成器8处理字频率分布10、平均代码字长度(ACL)函数12、第一代码字母表频率分布14和第二代码字母表频率分布16以在生成第一代码字母表18和第二代码字母表20时使用。第二代码字母表提供将符号映射到N个可能的字以生成具有比字长度b更小的平均代码字长度的代码字。第二代码字母表20可以被包括在部署的程序22中,其中部署的程序22使用第二代码字母表22以生成代码字以针对N个字中的被选择用于由程序22使用的一个字使用。
[0022]在一个实施例中,部署的程序22可以包括压缩程序,比如SLDC程序,其处理输入数据流以压缩成输出数据流。在压缩技术(比如SLDC)中,输入数据流中的多个字节可以被替换为副本指针,该副本指针指示历史缓冲器中的多个字节开始匹配输入数据流中的多个字节的位置。历史缓冲器存储用于压缩和解压缩的传入数据单位,其中在压缩期间,输入数据单位被替换为副本指针,该副本指针引用历史缓冲器中的连续的先前处理的数据单位(例如,字节)。
[0023]图2提供副本指针符号30的实施例,副本指针符号30具有副本指针标志32、匹配计数编码34和移位计数编码36,副本指针标志32 (比如具有值I的比特)将符号30标识为副本指针,匹配计数编码34包括将输入数据流中的多个数据单位(例如,字节)替换为输出数据流中的副本指针30的编码,移位计数编码36包括历史缓冲器中的连续数据单位开始处的相对位置的编码。在图2中所示的字段可以按照与所示不同的顺序被输出。移位计数编码36可以从第二代码字母表20被确定。
[0024]图3图示了提供当历史缓冲器为16千字节(KB)时的第二代码字母表20的实现方式的霍夫曼编码表50的示例。来自表50的编码被包括在副本指针中的指示历史缓冲器中的匹配的字节所位于的214个位置之一的移位计数编码36中。表50对于不同范围的移位计数将相对位移计数的不同编码提供到历史缓冲器中。在表50中,条目52具有3比特的第一前缀值,其指示接下来的8比特指示历史缓冲器中的O到255的相对移位计数;条目54具有4比特的第二 前 缀值,其指示接下来的8比特指示历史缓冲器中的256到511的相对移位计数;条目56具有4比特的第三前缀值,其指示接下来的9比特指示历史缓冲器中的512到1023的相对移位计数;条目58具有3比特的第四前缀值,其指示接下来的10比特指示历史缓冲器中的1024到2047的相对移位计数;条目60具有3比特的第五前缀值,其指示接下来的11比特指示历史缓冲器中的2048到4095的相对移位计数;条目62具有2比特的第六前缀值,其指示接下来的12比特指示历史缓冲器中的4096到8191的相对移位计数;并且条目64具有2比特的第七前缀值,其指示接下来的13比特指示历史缓冲器中的8192到16383的相对移位计数。
[0025]图4a和图4b图示了由代码字母表生成器8执行以生成将被包括在部署的程序22中的第二代码字母表20的操作的实施例。在启动(在块100)用于为用于在具有b比特长度的程序22中使用的字的程序22生成代码字母表表格的操作时,代码字母表生成器8处理(在块102)N个可能的字的字频率分布10,其中N= 2b。字频率分布10可以包括对(i,
f?),其中i = 1,2,…,N并且用于第i个字的频率为f?。概率值可以根据以下方程式
(I)从来自字频率分布10的频率被计算:
【权利要求】
1.一种用于生成用于由部署的程序用来为具有在计算系统中被使用的b比特的长度的字确定代码字的代码字母表的计算机程序产品,其中所述代码字具有小于b的平均代码字长度,所述计算机程序产品包括计算机可读存储介质,所述计算机可读存储介质具有体现于其中的计算机可读程序代码,所述计算机可读程序代码执行以执行操作,所述操作包括: 生成具有第一数目的符号的第一代码字母表,所述第一数目的符号提供所述字的可变长度编码,其中使用所述第一代码字母表中的所述符号被产生的所述代码字的第一平均代码字长度小于所述字的所述代码字长度(b); 将在所述第一代码字母表中的所述符号合并成在所述第一代码字母表中的所述符号的第二数目的组,其中所述第二数目小于所述第一数目;以及 生成具有所述第二数目的符号的第二代码字母表,其中使用所述第二代码字母表中的所述符号被产生的所述代码字的第二平均代码字长度小于所述字的所述代码字长度(b),并且其中所述第二代码字母表包括由所述部署的程序使用的所述代码字母表。
2.根据权利要求1所述的计算机程序产品,其中所述操作还包括: 生成所有可能的2b个字(N)的出现频率的字频率分布; 基于所述字频率分布计算平均代码字长度(ACL)函数,所述平均代码字长度(ACL)函数向合并的字的不同数目⑷的组指派ACL值;以及 基于所述ACL函数接收合并的字的所述数目(K)之一的选择,其中所述第一数目的符号包括K,其中每个符号映射到所述N个可能的字的K的组。
3.根据权利要求2所述的计算机程序产品,其中基于每个字母表代码符号的出现概率计算用于合并的字的每个数目(K)的所述平均代码字长度,所述出现概率代表基于所述字频率分布的代码字的所述K数目。
4.根据权利要求2所述的计算机程序产品,其中在所述N个可能的字的出现频率的所述字频率分布中,具有更小比特长度的字比具有更大比特长度的字被更频繁地访问。
5.根据权利要求1所述的计算机程序产品,其中所述第一平均代码字长度等于所述第二平均代码字长度并且其中所述第一代码字母表和所述第二代码字母表使用霍夫曼编码算法被计算。
6.根据权利要求1所述的计算机程序产品,其中将所述第一代码字母表中的所述符号合并成所述第二数目的组包括形成每个组以使所述第一代码字母表中的符号长度相等。
7.根据权利要求6所述的计算机程序产品,其中将所述第一代码字母表的所述符号合并成所述第二数目的组包括形成长度相等的2n个连续代码字母表符号的至少一个组,其中对于一个长度的2n个连续代码字母表符号的每个组,η为任何非负整数值。
8.根据权利要求1所述的计算机程序产品,其中所述操作还包括: 生成字的组的频率的第一代码分布,每个组具有所述N个字的选择的所述K数目的字,其中所述组中的每个组的所述频率包括根据所述字频率分布包括在所述组中的所述K个字的所述频率的求和,其中所述第一代码字母表中的所述符号根据所述第一代码分布被构建,并且其中所述第一代码字母表中的每个符号映射到所述组中的一个组中的所述字并且具有所述符号映射到的字的所述组的频率。
9.根据权利要求1所述的计算机程序产品,其中所述操作还包括:生成所述第一代码字母表中的所述符号的合并的所述第二数目的组的频率的第二代码分布,其中合并的所述第二数目的组中的每个组的所述频率包括向合并到所述组中的所述第一代码字母表符号指派的所述字的所述频率的求和,其中所述第二代码字母表根据所述第二代码分布被构建,并且其中所述第二代码字母表中的每个符号映射到所述第二数目的组中的一个组中的所述字并且具有所述符号映射到的字的所述组的频率。
10.根据权利要求1所述的计算机程序产品,其中将所述第一代码字母表中的所述符号合并成所述第二数目的组包括形成每个组以在所述第一代码字母表中具有连续符号,其中来自所述第一代码字母表的符号的组中的至少一个组包括在所述第一代码字母表中的具有不同长度的所述连续符号中的至少两个符号。
11.根据权利要求1所述的计算机程序产品,其中K的所述选择经由人从计算机用户界面被接收。
12.根据权利要求1所述的计算机程序产品,其中优化例程选择K以最小化所述平均代码字长度并且最大化合并的字的选择的所述数目(K)。
13.根据权利要求1所述 的计算机程序产品,其中所述字对于用于压缩数据的历史缓冲器包括不同移位计数值,其中所述移位计数值中的每个移位计数值指示与用于压缩的输入数据流中的多个字匹配的所述历史缓冲器中的多个字开始的位置,其中所述代码字母表用来确定用于在副本指针中包括的所述移位计数值的代码字以代表所述历史缓冲器中的具有所述输入数据流的所述多个字的所述位置,并且还包括: 在使用所述符号以确定用于所述历史缓冲器中的所述移位计数值的代码字的压缩程序中部署所述第二代码字母表。
14.一种用于生成用于由部署的程序用来为具有在计算系统中被使用的b比特的长度的字确定代码字的代码字母表的系统,其中所述代码字具有小于b的平均代码字长度,包括: 处理器;以及 计算机可读存储介质,具有由所述处理器执行以执行操作的计算机可读程序,所述操作包括: 生成具有第一数目的符号的第一代码字母表,所述第一数目的符号提供所述字的可变长度编码,其中使用所述第一代码字母表中的所述符号被产生的所述代码字的第一平均代码字长度小于所述字的所述代码字长度(b); 将在所述第一代码字母表中的所述符号合并成在所述第一代码字母表中的所述符号的第二数目的组,其中所述第二数目小于所述第一数目;以及 生成具有所述第二数目的符号的第二代码字母表,其中使用所述第二代码字母表中的所述符号被产生的所述代码字的第二平均代码字长度小于所述字的所述代码字长度(b),并且其中所述第二代码字母表包括由所述部署的程序使用的所述代码字母表。
15.根据权利要求14所述的系统,其中所述操作还包括: 生成所有可能的2b个字(N)的出现频率的字频率分布; 基于所述字频率分布计算平均代码字长度(ACL)函数,所述平均代码字长度(ACL)函数向合并的字的不同数目⑷的组指派ACL值;以及 基于所述ACL函数接收合并的字的所述数目(K)之一的选择,其中所述第一数目的符号包括K,其中每个符号映射到所述N个可能的字的K的组。
16.根据权利要求15所述的系统,其中在所述N个可能的字的出现频率的所述字频率分布中,具有更小比特长度的字比具有更大比特长度的字被更频繁地访问。
17.根据权利要求14所述的系统,其中所述第一平均代码字长度等于所述第二平均代码字长度并且其中所述第一代码字母表和所述第二代码字母表使用霍夫曼编码算法被计笪
ο
18.根据权利要求14所述的系统,其中将所述第一代码字母表中的所述符号合并成所述第二数目的组包括形成每个组以使所述第一代码字母表中的符号长度相等。
19.根据权利要求14所述的系统,其中将所述第一代码字母表中的所述符号合并成所述第二数目的组包括形成每个组以在所述第一代码字母表中具有连续符号,其中来自所述第一代码字母表的符号的组中的至少一个组包括在所述第一代码字母表中的具有不同长度的所述连续符号中的至少两个符号。
20.根据权利要求14所述的系统,其中所述字对于用于压缩数据的历史缓冲器包括不同移位计数值,其中所述移位计数值中的每个移位计数值指示与用于压缩的输入数据流中的多个字匹配的所述历史缓冲器中的多个字开始的位置,其中所述代码字母表用来确定用于在副本指针中包括的所述移位计数值的代码字以代表所述历史缓冲器中的具有所述输入数据流的所述多个字的所述位置,并且还包括: 在使用所述符号以确定用于所述历史缓冲器中的所述移位计数值的代码字的压缩程序中部署所述第二代码字母表。
21.一种用于生成用于由部署的程序用来为具有在计算系统中被使用的b比特的长度的字确定代码字的代码字母表的方法,其中所述代码字具有小于b的平均代码字长度,包括: 生成具有第一数目的符号的第一代码字母表,所述第一数目的符号提供所述字的可变长度编码,其中使用所述第一代码字母表中的所述符号被产生的所述代码字的第一平均代码字长度小于所述字的所述代码字长度(b); 将在所述第一代码字母表中的所述符号合并成在所述第一代码字母表中的所述符号的第二数目的组,其中所述第二数目小于所述第一数目;以及 生成具有所述第二数目的符号的第二代码字母表,其中使用所述第二代码字母表中的所述符号被产生的所述代码字的第二平均代码字长度小于所述字的所述代码字长度(b),并且其中所述第二代码字母表包括由所述部署的程序使用的所述代码字母表。
22.根据权利要求21所述的方法,还包括: 生成所有可能的2b个字(N)的出现频率的字频率分布; 基于所述字频率分布计算平均代码字长度(ACL)函数,所述平均代码字长度(ACL)函数向合并的字的不同数目⑷的组指派ACL值;以及 基于所述ACL函数接收合并的字的所述数目(K)之一的选择,其中所述第一数目的符号包括K,其中每个符号映射到所述N个可能的字的K的组。
23.根据权利要求22所述的方法,其中在所述N个可能的字的出现频率的所述字频率分布中,具有更小比特长度的字比具有更大比特长度的字被更频繁地访问。
24.根据权利要求21所述的方法,其中所述第一平均代码字长度等于所述第二平均代码字长度并且其中所述第一代码字母表和所述第二代码字母表使用霍夫曼编码算法被计笪
25.根据权利要求21所述的方法,其中将所述第一代码字母表中的所述符号合并成所述第二数目的组包括形成每个组以使所述第一代码字母表中的符号长度相等。
26.根据权利要求21所述的方法,其中将所述第一代码字母表中的所述符号合并成所述第二数目的组包括形成每个组以在所述第一代码字母表中具有连续符号,其中来自所述第一代码字母表的符号的组中的至少一个组包括在所述第一代码字母表中的具有不同长度的所述连续符号中的至少两个符号。
27.根据权利要求21所述的方法,其中所述字对于用于压缩数据的历史缓冲器包括不同移位计数值,其中所述移位计数值中的每个移位计数值指示与用于压缩的输入数据流中的多个字匹配的所述历史缓冲器中的多个字开始的位置,其中所述代码字母表用来确定用于在副本指针中包括的所述移位计数值的代码字以代表所述历史缓冲器中的具有所述输入数据流的所述多个字的所述位置,并且还包括: 在使用所述符号以确定用于所述历史缓冲器中的所述移位计数值的代码字的压缩程序中部署所述第二代码字母表。
【文档编号】H03M7/30GK104040899SQ201280065847
【公开日】2014年9月10日 申请日期:2012年12月19日 优先权日:2012年1月3日
【发明者】R·D·西德西扬, G·A·雅克特, T·米特尔豪泽 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1