生成符号的代码字母表以便为与程序一起使用的字生成代码字转让专利

申请号 : CN201280065847.7

文献号 : CN104040899B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : R·D·西德西扬G·A·雅克特T·米特尔豪泽

申请人 : 国际商业机器公司

摘要 :

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

权利要求 :

1.一种用于生成用于由部署的程序用来为具有在计算系统中被使用的b比特的长度的字确定代码字的代码字母表的系统,其中所述代码字具有小于b的平均代码字长度,包括:处理器;以及

计算机可读存储介质,具有由所述处理器执行以执行操作的计算机可读程序,所述操作包括:生成具有第一数目的符号的第一代码字母表,所述第一数目的符号提供所述字的可变长度编码,其中使用所述第一代码字母表中的所述符号被产生的所述代码字的第一平均代码字长度小于所述字的所述代码字长度b;

将在所述第一代码字母表中的所述符号合并成在所述第一代码字母表中的所述符号的第二数目的组,其中所述第二数目小于所述第一数目;以及生成具有所述第二数目的符号的第二代码字母表,其中使用所述第二代码字母表中的所述符号被产生的所述代码字的第二平均代码字长度小于所述字的所述代码字长度b,并且其中所述第二代码字母表包括由所述部署的程序使用的所述代码字母表。

2.根据权利要求1所述的系统,其中所述操作还包括:

生成所有可能的2b个字N的出现频率的字频率分布;

基于所述字频率分布计算平均代码字长度ACL函数,所述平均代码字长度ACL函数向合并的字的不同数目K的组指派ACL值;以及基于所述ACL函数接收合并的字的所述数目K之一的选择,其中所述第一数目的符号包括K,其中每个符号映射到所述N个可能的字的K的组。

3.根据权利要求2所述的系统,其中在所述N个可能的字的出现频率的所述字频率分布中,具有更小比特长度的字比具有更大比特长度的字被更频繁地访问。

4.根据权利要求1所述的系统,其中所述第一平均代码字长度等于所述第二平均代码字长度并且其中所述第一代码字母表和所述第二代码字母表使用霍夫曼编码算法被计算。

5.根据权利要求1所述的系统,其中将所述第一代码字母表中的所述符号合并成所述第二数目的组包括形成每个组以使所述第一代码字母表中的符号长度相等。

6.根据权利要求1所述的系统,其中将所述第一代码字母表中的所述符号合并成所述第二数目的组包括形成每个组以在所述第一代码字母表中具有连续符号,其中来自所述第一代码字母表的符号的组中的至少一个组包括在所述第一代码字母表中的具有不同长度的所述连续符号中的至少两个符号。

7.根据权利要求1所述的系统,其中所述字对于用于压缩数据的历史缓冲器包括不同移位计数值,其中所述移位计数值中的每个移位计数值指示与用于压缩的输入数据流中的多个字匹配的所述历史缓冲器中的多个字开始的位置,其中所述代码字母表用来确定用于在副本指针中包括的所述移位计数值的代码字以代表所述历史缓冲器中的具有所述输入数据流的所述多个字的所述位置,并且还包括:在使用所述符号以确定用于所述历史缓冲器中的所述移位计数值的代码字的压缩程序中部署所述第二代码字母表。

8.一种用于生成用于由部署的程序用来为具有在计算系统中被使用的b比特的长度的字确定代码字的代码字母表的方法,其中所述代码字具有小于b的平均代码字长度,包括:生成具有第一数目的符号的第一代码字母表,所述第一数目的符号提供所述字的可变长度编码,其中使用所述第一代码字母表中的所述符号被产生的所述代码字的第一平均代码字长度小于所述字的所述代码字长度b;

将在所述第一代码字母表中的所述符号合并成在所述第一代码字母表中的所述符号的第二数目的组,其中所述第二数目小于所述第一数目;以及生成具有所述第二数目的符号的第二代码字母表,其中使用所述第二代码字母表中的所述符号被产生的所述代码字的第二平均代码字长度小于所述字的所述代码字长度b,并且其中所述第二代码字母表包括由所述部署的程序使用的所述代码字母表。

9.根据权利要求8所述的方法,还包括:

生成所有可能的2b个字N的出现频率的字频率分布;

基于所述字频率分布计算平均代码字长度ACL函数,所述平均代码字长度ACL函数向合并的字的不同数目K的组指派ACL值;以及基于所述ACL函数接收合并的字的所述数目K之一的选择,其中所述第一数目的符号包括K,其中每个符号映射到所述N个可能的字的K的组。

10.根据权利要求9所述的方法,其中在所述N个可能的字的出现频率的所述字频率分布中,具有更小比特长度的字比具有更大比特长度的字被更频繁地访问。

11.根据权利要求8所述的方法,其中所述第一平均代码字长度等于所述第二平均代码字长度并且其中所述第一代码字母表和所述第二代码字母表使用霍夫曼编码算法被计算。

12.根据权利要求8所述的方法,其中将所述第一代码字母表中的所述符号合并成所述第二数目的组包括形成每个组以使所述第一代码字母表中的符号长度相等。

13.根据权利要求8所述的方法,其中将所述第一代码字母表中的所述符号合并成所述第二数目的组包括形成每个组以在所述第一代码字母表中具有连续符号,其中来自所述第一代码字母表的符号的组中的至少一个组包括在所述第一代码字母表中的具有不同长度的所述连续符号中的至少两个符号。

14.根据权利要求8所述的方法,其中所述字对于用于压缩数据的历史缓冲器包括不同移位计数值,其中所述移位计数值中的每个移位计数值指示与用于压缩的输入数据流中的多个字匹配的所述历史缓冲器中的多个字开始的位置,其中所述代码字母表用来确定用于在副本指针中包括的所述移位计数值的代码字以代表所述历史缓冲器中的具有所述输入数据流的所述多个字的所述位置,并且还包括:在使用所述符号以确定用于所述历史缓冲器中的所述移位计数值的代码字的压缩程序中部署所述第二代码字母表。

说明书 :

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

码字

技术领域

[0001] 本发明涉及用于生成用于为与程序一起被使用的字生成代码字的符号的代码字母表的计算机程序产品、系统、方法和数据结构。

背景技术

[0002] 数据压缩涉及将输入数据流中的符号(包括数据符号和控制符号)转换成包括比输入数据流更少的数据的压缩的输出数据流。控制符号被编码在压缩的数据流中并且提供解码指令以允许解压缩,并且可以由作为压缩数据的应用程序创建。由应用创建的控制符号的示例包括控制信号的结尾、文件标志和数据集边界。存在由压缩设备确定的其他事件或者控制,比如何时置换成给定的压缩方案以及何时重置用来执行给定的方案中的压缩的历史缓冲器。压缩设备可以决定创建接入点,在该接入点处压缩始自遇到使用在数据集边界之后的特定方案的重置的历史缓冲器。
[0003] 一种编码技术类型(霍夫曼编码)提供无损压缩算法,该无损压缩算法使用符号的可变长度代码表以用于对源符号编码,其中可变长度代码表已经给予针对每个可能的源符号的出现的估计的概率被导出以产生源符号的编码。
[0004] 流传输无损数据压缩算法(SLDC)接收控制符号和数据符号的输入数据流并且将数据字符的连续字节的串转换成副本指针和具有比输入数据流中的数据字节更少的比特的文字数据符号。SLDC算法用来压缩和解压线性磁带开放(LTO)磁带盒中的数据。在日期为2001年6月1日的标准ECMA-321出版物“Streaming Lossless Data Compression 
Algorithm–(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和图8b图示了用于使用不同数目的合并的相对移位计数值的不同霍夫曼编码的熵和平均代码字长度(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(比如具有值1的比特)将符号30标识为副本指针,匹配计数编码34包括将输入数据流中的多个数据单位(例如,字节)替换为输出数据流中的副本指针30的编码,移位计数编码36包括历史缓冲器中的连续数据单位开始处的相对位置的编码。在图2中所示的字段可以按照与所示不同的顺序被输出。移位计数编码36可以从第二代码字母表20被确定。
[0024] 图3图示了提供当历史缓冲器为16千字节(KB)时的第二代码字母表20的实现方式的霍夫曼编码表50的示例。来自表50的编码被包括在副本指针中的指示历史缓冲器中的匹配的字节所位于的214个位置之一的移位计数编码36中。表50对于不同范围的移位计数将相对位移计数的不同编码提供到历史缓冲器中。在表50中,条目52具有3比特的第一前缀值,其指示接下来的8比特指示历史缓冲器中的0到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,fi0),其中i=
1,2,…,N并且用于第i个字的频率为fi0。概率值 可以根据以下方程式(1)从来自字频率分布10的频率fi0被计算:
[0026] 其中
[0027] 频率fi0可以通过在程序22操作期间的第i个字的测量的出现被计算。在一个实施例中,字频率分布10可以使得更低的字值比更高值字更频繁地由程序22使用。字频率分布10可以在制造期间被生成以生成第二代码字母表18以包括在将被分发用于使用的部署的程序22中。备选地,分布10和图4a与图4b的其他操作可以在被部署在客户站点的程序中被执行以提供代码字母表的实时生成以与程序22一起使用。
[0028] 图7图示了在压缩操作期间在压缩的输出数据流中的副本指针30(图2)中使用的用于指示历史缓冲器中的具有与输入数据流中的连续字节匹配的连续字节的位置的相对移位计数的发生的字频率分布10的示例。在图7中,代表历史缓冲器中的更早位置(即,更小移位值)的更低值字比代表历史缓冲器中的更晚位置(或者历史缓冲器中的更大移位值)的更高值字更频繁地具有匹配的串。
[0029] 代码字母表生成器8计算(在块104)ACL函数12。这一ACL函数12基于字频率分布10向不同数目的合并的或者分组的字指派代码字母表符号的平均代码字长度(ACL)。图8a和图8b将其示出为合并的字增加的数目(即,映射到每个符号的字增加的数目)或者符号减少的数目,熵或者平均代码字长度增加,接近比特的数目。在图8a和图8b中示出的ACL函数12比较平均代码字长度与合并/分组的字的数目的log2。在备选实施例中,代替log2(K),K可能已经被选择作为图8b中的x轴值。
[0030] 在霍夫曼编码实现方式中,被表达为K的用于针对符号的不同数目的合并的或者分组的字的平均代码字长度可以使用熵方程式被计算,该熵方程式比如为以下熵方程式(2):
[0031]
[0032] 以上熵方程式(2)公式中的项log2K代表比特的数目,需要该比特的数目来代表已经被合并成用于字母表中的一个字符的组的K个字。变量M1等于N/K,这指示N个字映射到的第一代码字母表18中的符号的数目。概率 表达与第i个符号匹配的K个字的出现概率,其中fi1是映射到第一代码字母表18中的第i个符号的K个字的出现频率。第一代码字母表中的不同符号的出现概率 根据以下方程式(2)被计算:
[0033]
[0034] M1或者用于霍夫曼编码字母表的符号数目从概率值 的集合被生成,i=1,2,...,M1。霍夫曼代码树可以使用霍夫曼算法在第一步骤中被生成。霍夫曼代码树通常不是唯一的,因为霍夫曼树中的在内部节点的分支的标签通常不是被唯一指定的。例如,如果二进制霍夫曼树具有S个内部节点,则有2S个可能的霍夫曼树。许多霍夫曼代码然后可以被关联到每个霍夫曼树。因此,由霍夫曼算法生成的霍夫曼代码通常不是被唯一指定的。熵对应于符号的霍夫曼字母表的平均代码字长度,其中K个字被合并或者映射到每个符号。
[0035] 图8a和图8b图示了ACL函数12的示例,其在y轴中示出了针对合并的字的数目(K)的log2的不同值根据以上的方程式(2)和(3)计算的熵。例如,图8a中的箭头30指向用于每个符号的128个合并的字的值,这提供了在13.1和13.2之间的平均代码字长度,该长度小于字的比特数目(b)。图8b提供了图8a的扩展视图,并且还使出了包括用于具有映射到32、64、128、256个字(K)的符号的霍夫曼代码的平均代码字长度。图8b中的这一曲线是如下获得的函数。对于每个K(x值),如图7中所示通过将K个连续相对移位值合并成一个来从频率分布生成新分布。与这一新分布关联地计算ACL(y值)。对于图8b中的每个点,字频率分布10中的K个字被合并,并且然后第一代码字母表频率分布14被计算并且对应的霍夫曼代码(存在许多霍夫曼代码但是它们全具有相同的ACL)被构建。对应的霍夫曼代码的ACL然后被计算。在图8b中,这针对K=32、K=64、K=128和K=256(即,4个新分布)被完成四次并且对应的熵值被计算。
[0036] 在生成ACL函数12之后,代码字母表生成器8接收(在块106)基于生成的ACL函数12的合并的字的数目(K)之一的选择。用户可以将K选择作为使合并的字的数目(K)最大化以及使平均代码字长度最小化的折衷。该折衷由于合并的字的数目的减小使ACL减小而出现,因此K的选择基于高压缩比的折衷,这要求更小的ACL,以及合并的字的数目K的实现方式,其中希望更大数目的合并的字,但是更大数目的合并的字具有增加ACL的不希望的效果。备选地,代码字母表生成器8可以使用程序来作为平均代码字长度和合并的字的数目的折衷确定用于合并的多个字,从而减少针对字母表生成的符号的数目。
[0037] 代码字母表生成器8然后(在块108)生成用于将映射到K个连续字的组的字符的频率或者概率的第一代码字母表频率分布14。将映射到符号的K个连续字的每个组的频率/概率包括在根据字频率分布10的组中的K个字的频率/概率的求和。在某些实施例中,第一代码字母表频率分布14可以包括对(i,fi1),其中i=1,2...M1,其中对于用于第一代码字母表18的i个符号中的每个符号,M1=N/K。用于第一代码字母表频率分布14的概率可以根据以上的方程式(3)被计算。
[0038] 图9a和图9b图示了用于图9a中的128个K(合并的字)以及用于图9b中的32个K的值的第一代码字母表频率分布14的示例。这些分布中的这些概率用来生成用于第一代码字母表18的霍夫曼字母表,其提供比被压缩的字(b)的长度更小的平均代码字长度。例如,图9a示出了对于K=128,霍夫曼编码具有13.195070的平均代码字长度(ACL),并且图9b示出了对于K=32,霍夫曼编码具有13.189745的ACL。
[0039] 代码字母表生成器8然后(在块110)利用来自第一代码字母表频率分布14的符号概率生成具有第一数目的符号(M1=N/K)的第一代码字母表18。在某些实施例(比如从分布14生成霍夫曼编码)中,符号提供字的组的可变长度编码。第一代码字母表18中的每个符号映射到组之一中的字并且具有符号映射到的字的组的频率。使用第一代码字母表中的符号被产生的代码字的第一平均代码字长度小于用于使用代码字提供压缩的N个移位值的代码字长度(b)。
[0040] 为了减少第一代码字母表18中的符号的数目,代码字母表生成器8(在块112)将第一代码字母表18中的符号合并成第一代码字母表18中的符号的第二数目的组(M2),其中M2
[0041] 在一个实施例中,第二代码字母表频率分布16可以具有对(i,fi2)的集合,其中i=1,2,...,M2,其中对应于第一代码字母表18的分组的符号的第二代码字母表20中的符号的频率(fi2)可以根据以下的方程式(4)被计算:
[0042]
[0043] 用于来自将映射到第二代码字母表20中的符号的第一代码字母表18的分组的符号的概率值pi2的集合可以根据以下的方程式(5)被计算:
[0044]
[0045] 代码字母表生成器8(在块116)生成具有由第二代码字母表频率分布16定义的第二数目(M2)的符号的第二代码字母表20,其中第二代码字母表20中的每个符号映射到具有符号映射到的字的组的频率或者概率的第二数目的组之一中的字。使用第二代码字母表20中的符号被产生的代码字的第二平均代码字长度优选地小于N个移位值的代码字长度(b),并且大体上类似于由第一代码字母表18产生的第一平均代码字长度。
[0046] 利用图4a和图4b的操作,第二代码字母表20被生成为具有比第一代码字母表18更少的符号,从而提供更令人满意的字母表,因为它在程序22中要求更少的行来实施。在某些实施例中,第二代码字母表20的平均代码字长度是与第一代码字母表18的平均代码字长度相同的长度,从而提供具有相同压缩、熵和/或平均代码字长度的更少字符的集合。图10图示了针对历史缓冲器中的相对移位值按照霍夫曼代码的形式提供符号的霍夫曼第二代码字母表20的示例。
[0047] 图5图示了用于通过将来自第一代码字母表18的符号合并成产生相等长度的字符的组来执行在图4a中的步骤112的符号的合并的操作的实施例。在(在块120)启动用于合并第二数目的组(M2)中的符号的操作时,代码字母表生成器8(在块122)形成相等长度的2n个n连续代码字母表符号的至少一个组,其中针对一个长度的2个连续代码字母表符号的每个组,n为任何非负整数值。通过形成用于n个可能的最低可能值的2n个符号的组合并相等长度符号,从而使得向不同的2n数目的符号指派符号。
[0048] 图11图示了由代码字母表8针对到历史缓冲器中的具有14的长度(b)的相对移位值使用霍夫曼编码产生的第一代码字母表18的示例,其中K被设置为128以合并128个字(相对移位值)以产生第一代码字母表18的霍夫曼编码。图11中的128个符号中的每个符号将映射到128(214/128)个不同的可能的移位值。128个符号映射到连续的相对移位值,其中具有最短长度的符号映射到连续的相对移位值(即,字),具有由程序22使用/选择的更高概率。以这一方式,更短符号映射到更频繁出现的字,并且更长符号映射到更不频繁出现的字。
[0049] 图12图示了图11中的字符如何在图5中的块122被合并成2n个相等长度符号的组的示例,其中n是任何非负整数。代码字母表生成器8在n的最低的可能值开始以开始形成2n个合并的连续符号的组,其中连续符号映射到在由程序22(比如压缩程序)使用时根据它们的出现概率被排序的字。因此,相同长度的合并的连续符号的组具有增加的数目的合并的符号,因为n对于被合并到组中的相等长度的符号增加。对于符号的合并的组(共计18个),霍夫曼第二代码字母表20被生成以生成18个字符,每个字符用于一个组,从而使得每个字符映射到字(例如,相对移位值),对于该字生成符号,该符号被合并到组中。以这一方式,通过合并来自第一代码字母表18的符号形成的第二代码字母表20大体上维持相同的平均代码字长度,具有更少的符号,因此提供代码字母表的改进的实现方式。
[0050] 图6图示了用于通过将在图4a中的块112执行的将不同长度的符号分组来将来自第一代码字母表18的符号合并成更少的组的备选实施例。在(在块310)启动用于合并第二数目(M2)的组中的符号的操作时,代码字母表生成器8(在块132)形成每个组以使连续符号在第一代码字母表18中,其中来自第一代码字母表的符号的组中的至少一个组包括第一代码字母表中的具有不同长度的连续符号中的至少两个连续符号。2n个符号的组被形成,从0开始到某值,直到在2n个符号的组中形成了所有第一代码字母表符号。
[0051] 在某些实施例中,不相等长度的符号可以被合并以使得不均匀性测量为小。根据方程式(6)定义不均匀性测量:
[0052]
[0053] 其中如果来自第一代码字母表18的对应于 的符号在如下符号中,,该符号在具有ni代码字的分割i中具有最频繁长度,则z(j)=0,否则z(j)=1。
[0054] 值h(i)根据以下方程式(7)被计算:
[0055]
[0056] 为了形成不相等长度的符号的组,代码字母表生成器8在符号的每个组中标识与符号关联的最频繁的长度。如果组中的两个或者更多个长度具有最大频率,则选择最大长度作为组中的最频繁长度。代码字母表生成器8对分割中的除了具有最频繁的长度的代码字之外的所有代码字的所有相对频率求和以获得符号的组的不均匀性。代码字母表生成器8然后对作为第一代码字母表的基础的所有组的不均匀性求和以获得基本第一代码字母表
18的不均匀性,这在图13中被示出。
[0057] 图13图示了128个字符的第一代码字母表的示例,其中根据符号映射到的字的出现概率或者频率被排序的符号的排序包括在相等长度的符号之间的不相等长度的符号。图14图示了图13中的符号如何被分组以具有不相等长度的符号的组(比如在组11和12中)的示例。
[0058] 描述的实施例提供了用于通过合并来自第一代码字母表的代码字母表符号以生成代码字母表符号以在需要用于编码的代码字母表符号的数目中提供进一步的减少,而同时维持平均代码字长度大体上相同。
[0059] 结论
[0060] 所属技术领域的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0061] 可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0062] 计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0063] 计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
[0064] 可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0065] 下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
[0066] 也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。
[0067] 也可以把计算机程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程数据处理装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其他可编程装置上执行的指令提供实现流程图和/或框图中的一个或多个方框中规定的功能/动作的过程。
[0068] 图15图示了可以在图1的系统2处被实施的计算机架构600的实施例。架构600可以包括处理器602(例如,微处理器)、存储器604(例如,意识形态存储器设备)和存储装置606(例如,非一时性存储装置,比如磁盘驱动、光盘驱动、带驱动等)。存储装置606可以包括内部存储设备或者附接的或者网络可访问的存储装置。程序(包括操作系统608和存储装置606中的代码字母表生成器8和部署的程序22)被加载到存储器604中并且由处理器602执行。存储器604还可以包括分布10、14、16、函数12以及字母表18和20。架构还包括用于支持与网络的通信的网络卡610。输入设备612用来向处理器602提供用户输入,并且可以包括键盘、鼠标、笔触针麦克风、触敏显示屏或者本领域中已知的其他任何激活或者输入机构。输出设备604能够渲染从处理器602(或者其他部件,比如显示监视器、打印机、存储装置等)传输的信息。
[0069] 术语“一实施例”、“实施例”、“多个实施例”、“该实施例”、“该多个实施例”、“一个或者多个实施例”、“一些实施例”和“一个实施例”“”“本发明的一个或者多个(但并未所有)实施例”。
[0070] 术语“包含”、“包括”、“具有”及其变型除非另有明示,否则意味着“包括但不限于”。
[0071] 项目的枚举型列举除非另有明示,否则并非暗示任何或者所有项目互相排斥。
[0072] 术语“一”、“一个”和“该”除非另有明示,否则意味着“一个或者多个”。
[0073] 相互通信的设备除非另有明示,否则无需相互连续地通信。另外,相互通信的设备可以直接地或者通过一个或者多个中介物间接地通信。
[0074] 具有相互通信的若干部件的实施例的描述并非暗示所有此类部件是需要的。相反,可以描述各种可选部件以例示本发明的广泛多种可能的实施例。
[0075] 此外,虽然可能按照依次顺序描述了过程步骤、方法步骤、算法等,但是这样的过程、方法和算法可以被配置为按照交替的顺序工作。换言之,步骤的可能被描述的次序或者顺序并不必然指示按照该顺序执行步骤的要求。这里描述的过程的步骤可以按照任何实际顺序被执行。另外,一些步骤可以被同时执行。
[0076] 当在这里描述了单个设备或者物品时,将容易地被理解的是,多于一个设备/物品(无论它们是否协作)可以代替单个设备/物品被使用。类似地,当在这里描述了多于一个设备或者物品(无论它们是否协作)时,将容易地被理解的是,单个设备/物品可以代替多于一个设备或者物品被使用,或者可以使用不同数目的设备/物品代替所示数目的设备或者程序。设备的功能和/或特征可以备选地由并未被显式地描述为具有这样的功能/特征的一个或者多个其他设备体现。因此,本发明的其他实施例无需包括设备本身。
[0077] 图4a、图4b、图5和图6的图示的操作使出了按照某些顺序发生的某些事件。在备选实施例中,某些操作可以按照不同顺序被执行、修改或者去除。另外,可以向以上描述的逻辑添加步骤并且仍然符合所描述的实施例。另外,这里描述的操作可以依序发生或者某些操作可以被并行处理。再次,操作可以由单个处理单元或者由分布式处理单元执行。
[0078] 本发明的各种实施例的前述描述已经出于例示和描述的目的而被呈现。其并非旨在于是穷举的或者使本发明限于所公开的精确形式。许多修改和变化鉴于以上教导是可能的。本发明的范围旨在于并未由这一具体实施方式限制,而是由其所附带的权利要求限制。以上说明书、示例和数据提供了对制造和使用本发明的组成部分的完整描述。由于可以在并不背离本发明的范围的情况下做出本发明的许多实施例,所以本发明存在于这里后附的权利要求中。