一种产生霍夫曼代码长度信息的方法

文档序号:7535961阅读:354来源:国知局
专利名称:一种产生霍夫曼代码长度信息的方法
技术领域
本公开内容涉及霍夫曼编码技术。
背景技术
众所周知,一组符号的霍夫曼代码是至少部分基于源符号的出现概率产生的。二叉树,通常被称为“霍夫曼树”,被产生以提取二进制代码和代码长度。参见,例如,D.A.Huffman,“一种用于构造最小冗余度代码的方法”,Proceedings of the IRE,Volume 40 No.9,1098-1101页,1952。D.A.Huffman在上述文章中这样描述该处理·列表出所有可能的符号以及它们的概率;·找出具有最小概率的两个符号;·用包括两个符号的、概率是个体概率总和的单独一个集合替代它们;·重复直到列表只包括一个成员。
该过程产生了递推地构造的一组集合,其中的每一个包括恰好两个成员。因此,它可以用一个以符号为“叶”的二叉树(“霍夫曼树”)来表示。然后为了形成任何特定符号的代码(“霍夫曼代码”)从根部到该符号遍历二叉树,对于左分支记录“0”,对于右分支记录“1”。但是,该过程的一个问题是所得到的霍夫曼树不是唯一的。这种代码的一个应用例子是文本压缩,如GZIP。GZIP是一种文本压缩工具,开发于GNU(Gnu’s Not Unix)项目之下,其目的是开发一种“免费”或可免费得到的类似UNIX的操作系统的GZIP用于替代UNIX操作系统上的“压缩”文本压缩工具。参见,例如,在网站http//www.gzip.orh/上作为gzip-1.2.4.tar可获得的Gailly,J.L.和Adler,M.的GZIP文档和原始资料。在GZIP中,霍夫曼树信息以一组编码长度的形式和被压缩文本一起从编码器被传送到解码器。因此,编码器和解码器基于该代码长度信息都产生一个唯一的霍夫曼代码。但是,通过构造对应的霍夫曼树产生霍夫曼代码的长度信息是效率差的。具体地说,从霍夫曼树得到的霍夫曼代码一般被丢弃,因为编码器和解码器将从代码长度信息产生相同的霍夫曼代码。因此,希望有另一种用来产生代码长度信息的途径。


在说明书的总结部分具体指出并明确声明了被视为是本发明的主题。但是本发明,关于操作的方法和组织,及其目标、特征和优点,当参考附图阅读时通过参照以下详细的描述可以最好地被理解,该附图中图1是图示了根据本发明的一个实施例可以应用于其上的一组符号以及它们对应的频率的表格;图2是图示了在图1所示数据初始化之后根据本发明的一个实施例的第一部分的表格;图3是图示了在图2所示数据初始化之后根据本发明的一个实施例的第二部分的表格;图4是在实施了第一次合并操作之后的图2的表格;图5是在实施了第一次合并操作之后的图3的表格;图6是完成合并操作之后的图5的表格;和图7是完成合并操作之后的图4的表格。
具体实施例方式
在以下详细描述中,为了全面地了解本发明,陈述了大量具体细节。但是,本领域的技术人员应该知道本发明可以在不具有这些具体细节的条件下实施。在其它情况下,众所周知的方法、过程、组件和电路没有被详细描述,免得使本发明不清晰。
如前所述,一组符号的霍夫曼代码是至少部分基于源符号的出现概率产生的。相应地,二叉树,通常称为霍夫曼树,被产生以抽取二进制代码和代码长度。尽管当然本发明在范围上不限于特定应用,例如,在一个文本压缩标准的应用中,例如GZIP,霍夫曼树信息以一组代码长度的形式与被压缩的文本数据一起从编码器被传送到解码器。编码器和解码器都基于代码的长度信息产生唯一的霍夫曼代码。但是,通过构造对应的霍夫曼树产生霍夫曼代码的长度信息效率差并且经常是冗余的。从霍夫曼树产生霍夫曼代码之后,由于编码器和解码器会基于长度信息产生霍夫曼代码,所以这些编码被丢弃。因此,希望可以不产生霍夫曼树而确定长度信息。
根据用于利用数据结构为将被编码的代码产生代码长度的方法的本发明,提供了一个实施例。在这个特定实施例中,数据结构被排序,数据结构中的符号被结合,并且符号长度至少部分基于被编码的符号的频率被更新。在这个特定实施例中,不产生已知其中符号出现概率的霍夫曼树,数据结构帮助从一组符号中抽取霍夫曼代码的长度。尽管本发明在范围上不限于该特定实施例,实验结果显示了在计算和存储器使用两方面的适合软件和硬件实现的效率。
图1是图示了一组符号及它们对应的频率的表格,但是,当然,这只是作为一个可替代性示例被提出的。根据本发明产生代码长度的方法的一个实施例可以被应用于该组符号。图1图示了一组18个符号,尽管当然本发明在这方面没有范围限制。尽管本发明在这方面没有范围限制,在这个特定示例中,对频率信息的观察显示,两个符号,即图1中阴影区的索引第7和13,在这个符号组中没有出现。所以,这些符号在霍夫曼编码中不必被考虑。在这个特定实施例中,具有零频率的符号被忽略,尽管本发明在这方面没有范围限制。
尽管本发明在这方面没有范围限制,在这个特定实施例中,要被使用的数据结构至少具有两个部分。前面已经指出,本发明不限于这个特定数据结构的范围内。显然,对这个特定数据结构可以作很多的修改,并且保持在所描述的精神和范围之内。但是对于这个实施例,图2图示了一部分。数据结构的这部分跟踪或存储每一个非零频率符号的索引和长度信息。如图2所示,这部分按照频率和符号索引的降序被初始化为零。当然,其它实施例也是可应用的,例如采用升序。图2图示了应用于图1符号的一个实施例的该第一部分。
如所示,图2包括16个项目,0到15,对应于16个非零频率符号。尽管本发明在这方面不受限制,在这个特定数据结构中,第一区或栏示出了前面所述排序(sort)操作之后相联系的符号索引。图2所示符号频率信息不是数据结构的部分,而仅是为了说明的目的在这里提供的。在这个例子中,它图示了符号根据频率按降序排列。尽管本发明不限于这方面的范围中或这个特定的实施例,数据结构的第二区或栏包括每一个符号的长度信息并被初始化为零。
采用图2中的数据或符号初始化之后,这个特定实施例的数据结构的第二部分在图3中示出。在这个特定实施例中,数据结构的这部分的第一区,即图3中所示部分,包括这组的频率。这个特定实施例的第二区包括位标志。位标志对应于或指示属于这组的符号的项目号。例如,如图3中所示,阴影区域包括项目号3的符号。对于这个特定符号,这组频率是3,并且位标志被设置为位号(15----------------3210)位值 0000 0000 0000 1000即,在这个例子中位号3被设置为“1”而其它的位被设置为“0”。
如前面所述,最初,将被编码的符号被分配一个对于每一个符号都不同的位标志。此外,尽管本发明在这方面不受限制,在这个特定实施例中,每一个符号的代码长度最初包括零。在下文中将更加详细地描述,在这个特定实施例中,随着数据结构被初始化,从最小频率符号开始结合符号标志。符号然后被再排序(resort),并且频率信息被更新以反映该结合。这些结合信号标志并且再排序的操作接着被重复,直至不再剩余有符号要被结合。
如前面所述,进程开始于初始化数据结构,例如前面所述的实施例,和将一个这里指定为“no_of_group”的“计数器”设置为非零频率符号的数目,这里为16。接着,当这个“计数器”,即no_of_group,大于1时,执行以下操作。开始1如上所述初始化数据结构(部分I和II),并且将no_of_group设置为非零频率符号的数目。
2当(no_of_group>1){2.1将部分II的数据结构中的最后两组合并,并且将它插回列表中。
/*组频率的合并操作是简单地将它们加在一起,对第二区的合并操作是简单地按位“或”运算。依照软件和硬件两者都非常容易实现。图5示出了这个步骤的一个例子。我们可以看到,最后两组被合并并且插回到列表(阴影区域所示)。由于我们总是将两组合并为一组,所以存储器能被重复利用,而且初始化之后我们不需要动态地分配任何新的存储器。*/2.2更新部分I的数据结构中的长度信息。
/*该步骤通过扫描合并的位标志(部分II的数据结构中的第二区)中的“1”,并且在数据结构中的对应项目令长度信息增加1来完成的。图4示出了图5所示的合并步骤之后的更新。*/2.3令no_of_group减1。
}/*当循环的结束*/结束如图5所示,例如,数据结构的第二部分中的最后两“组”或“行”被结合或合并,并且如图5所示,在这个特定实施例中,数据结构的这个部分被再排序,即被结合的符号被合适地基于组频率在数据结构中排序。
同样我们注意到,尽管本发明在这方面不受限制,组频率的合并或结合操作在这个特定实施例中可以通过简单地将频率加在一起来实现,并且这个特定实施例的数据结构第二区的合并/结合操作可以以按位逻辑或运算来实现。这在软件和/或硬件实现上提供了优势。在例如求和与逻辑或运算的实现操作的简单易行以外,这个特定实施例的另一个优点是有效利用存储器。
如前面所述,结合或合并操作使两“组”或“行”被结合为一。所以,被分配的存储器可被重复使用,并且初始化之后的新存储器的动态分配被减少了或者避免了。
接着,这个特定实施例的数据结构第一部分中的长度信息被更新以反映前面的合并或结合操作。例如对于本特定实施例,这在图4中示出了。尽管本发明在这方面不受限制,实现该操作的一种方法是通过扫描被合并的位标志的“1”位。也就是,在本特定实施例中,数据结构第二部分中的第二区被扫描,并且在数据结构的第一部分中的对应项目中,长度信息被增加1。
然后,“计数器”,即这里的no_of_group,被减少1。在本特定实施例中,前面的操作被重复直至计数器到达值1。
应该注意到的是对于本特定实施例,一旦“计数器”到达1,如图6所示,在数据结构的第二部分中应该存在具有与总的组频率相等的一个组频率的一组或行,并且位标志中的所有位都被设置为1。但是,同样的,图7示出了在此出现时代码长度信息的最终结果。所以,如图7所示,需要的代码长度信息得到了。
如前面所述,对于产生代码长度信息的方法的本特定实施例,存在若干优点。如前面讨论的,例如与产生霍夫曼树相比较,存储器使用减少,并且存储器的动态分配可被避免或者要被动态分配的存储器的量减少了。同样,计算的复杂度减小。
同样地,如前面所述,被采用来实现前面描述的实施例的操作在硬件或软件中相对比较容易实现,尽管本发明在这些特定操作中不限于那些实施例的范围中。这样,霍夫曼代码长度信息可以不通过产生霍夫曼树而被提取或产生。
在根据本发明的另一个实施例中,一种编码符号的方法可以包括利用代码长度信息编码符号,和不利用霍夫曼树而产生代码长度信息,例如,利用前面所述实施例来产生代码长度信息,尽管当然本发明在范围上不限于前面实施例。在这上下文中当然应该理解,长度信息被用来编码符号,其中长度信息是从霍夫曼代码中产生的。同样,在根据本发明的另一个实施例中,一种解码符号的方法可以包括对符号进行解码,其中该符号已经被利用代码长度信息进行编码,并且代码长度信息是不通过利用霍夫曼树而产生的。此外在这上下文中应该理解,被用来对符号进行编码的长度信息是从霍夫曼代码产生的。此外,产生代码长度信息的一种途径包括前面所述实施例。
当然应该理解的是,尽管只描述了特定实施例,本发明在范围上不限于特定实施例或实现。例如,一个实施例可以是硬件中的,而另一个实施例可以是软件中的。同样,实施例可以是固件中的,或例如硬件、软件或固件的任意组合。同样,尽管本发明在这方面不受限制,一个实施例可包括一个物件,例如存储介质。这样的存储介质,例如,CD-ROM,或碟盘,可以在其上存储指令,这些指令当被系统执行时,例如计算机系统或平台,或成像系统,可以产生合乎本发明的执行中的方法的实施例,例如如前面所述的产生霍夫曼代码长度信息的方法。同样,根据本发明的初始化数据结构、对符号编码、和/或对符号解码的方法的实施例可被执行。
虽然本发明的某些特征在这里已经被图示和描述了,本领域的技术人员现在可以想到很多修改、替代、改变和等同物。所以要理解,所附权利要求目是的要覆盖所有落入本发明的真正精神之内的所有这样的修改和改变。
权利要求
1.一种利用数据结构为要被编码的符号产生代码长度的方法,所述方法包括将所述数据结构排序,结合所述数据结构中的符号,并且至少部分基于被编码符号的频率更新符号长度。
2.如权利要求1所述的方法,其中最初每一个要被编码的符号被分配一个不同的位标志和相同长度。
3.如权利要求2所述的方法,其中所述相同长度最初包括零。
4.如权利要求2所述的方法,其中所述数据结构包括至少两个部分,第一部分包括符号索引和相联系的符号长度信息,第二部分包括组频率和分配的位标志信息。
5.如权利要求4所述的方法,其中所述符号基于频率按照降序在数据结构中被排序。
6.如权利要求5所述的方法,其中从最小频率符号开始所述符号在数据结构中被结合。
7.如权利要求6所述的方法,其中在所述符号长度信息被更新以反映数据结构中所结合的符号之后,所述符号基于频率按照降序被重新排序。
8.如权利要求4所述的方法,其中所述符号基于频率按照升序在数据结构中被排序。
9.如权利要求8所述的方法,其中从最小频率符号开始所述符号在数据结构中被结合。
10.如权利要求9所述的方法,其中在所述符号长度信息被更新以反映数据结构中所结合的符号之后,所述符号基于频率按照升序被重新排序。
11.如权利要求1所述的方法,其中具有零频率的符号被忽略。
12.一种不产生霍夫曼树而为要被根据霍夫曼代码而编码的一组符号产生代码长度的方法,包括(a)依照频率对符号排序,并给每一个符号分配一个不同的标志和相同的初始长度;(b)从最小频率符号开始结合符号标志;(c)对符号重新排序,并且更新长度信息以反映该结合;并且重复(b)和(c)直至不再剩余要被结合的符号。
13.如权利要求12所述的方法,其中依照频率对符号排序包括忽略具有零频率的符号。
14.如权利要求12所述的方法,其中相同初始长度包括零。
15.一种数据结构,包括至少两个部分;第一部分包括符号索引和最初分配的长度,其中所述符号索引依照频率被排序;和第二部分包括组频率信息和对应于每一个分别的符号被分配的位标志。
16.如权利要求15所述的数据结构,其中该符号在数据结构中依频率按照降序被排序。
17.如权利要求15所述的数据结构,其中该符号在数据结构中依频率按照升序被排序。
18.一个物件,包括存储介质,所述存储介质具有存储于其上的指令,所述指令当被执行时,使得利用数据结构为要被编码的符号产生编码长度的以下方法被执行对所述数据结构排序,结合所述数据结构中的符号,并且至少部分基于要被编码的符号的频率更新符号长度。
19.如权利要求18所述的物件,其中所述指令,当被执行时,使得最初每一个要被编码的符号被分配一个不同的位标志和相同长度。
20.如权利要求19所述的物件,其中所述指令,当被执行时,使得所述数据结构包括至少两个部分;第一部分包括符号索引和相联系的符号长度信息,第二部分包括组频率和被分配的位标志信息。
21.一个物件,包括存储介质,所述存储介质具有存储于其上的指令,所述指令当被执行时,使得为要被编码的符号产生编码长度而初始化数据结构的以下方法被执行依照频率对符号排序,并给每一个符号分配一个不同的标志和相同的初始长度。
22.如权利要求21所述的物件,其中所述指令,当被执行时,还使得每一个符号被分配一个零初始长度。
23.如权利要求21所述的物件,其中所述指令,当被执行时,还使得数据结构包括每一个符号的组频率信息。
24.一种编码符号的方法,包括利用代码长度信息编码符号;不利用霍夫曼树而产生代码长度信息。
25.如权利要求24所述的方法,其中不利用霍夫曼树而产生代码长度信息包括使用数据结构。
26.如权利要求25所述的方法,其中所述数据结构包括符号索引、每一个符号的组频率信息、和最初分配的位标志和代码长度。
27.一种解码符号的方法,包括解码符号,其中该符号已经被利用代码长度信息编码,并且所述代码长度信息是不利用霍夫曼树而产生的。
28.如权利要求27所述的方法,其中所述代码长度信息是利用数据结构产生的。
29.如权利要求27所述的方法,其中所述数据结构包括符号索引、每一个符号的组频率信息、和最初分配的位标志和代码长度。
全文摘要
本发明公开了用于产生霍夫曼代码长度信息的方法的实施例。在一个这样的实施例中,使用了一种数据结构,但是,当然,本发明并不限于所公开的具体实施例的范围。
文档编号H03M7/40GK1531781SQ01818215
公开日2004年9月22日 申请日期2001年10月9日 优先权日2000年10月31日
发明者廷库·阿查里雅, 平圣·蔡, 廷库 阿查里雅, 蔡 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1