CN101325418A - 一种基于概率查表的哈夫曼快速解码方法 - Google Patents
一种基于概率查表的哈夫曼快速解码方法 Download PDFInfo
- Publication number
- CN101325418A CN101325418A CNA2008101178294A CN200810117829A CN101325418A CN 101325418 A CN101325418 A CN 101325418A CN A2008101178294 A CNA2008101178294 A CN A2008101178294A CN 200810117829 A CN200810117829 A CN 200810117829A CN 101325418 A CN101325418 A CN 101325418A
- Authority
- CN
- China
- Prior art keywords
- code stream
- decoding
- huffman
- probability
- character
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Abstract
本发明涉及一种基于概率查表的哈夫曼快速解码方法,包括:在解码中依次读取码流,根据所读取码流在所述辅助表中查找其对应信息,并且根据所述对应信息输出解码后的对应字符,其中,所述辅助表根据哈夫曼表建立,包含码流解码后的多组信息,并且反映了解码后的对应字符在码流中的出现概率。本发明在哈夫曼解码之前建立一个辅助表,在需要编码的字符在数据流中出现概率较高的情况下,通过一次移位并进行16位的查表获得多个或一个哈夫曼码值,且码流的读取均以字作为单位;而在概率较低的情况下,通过常规方式得到一个哈夫曼码值,提高了哈夫曼解码的速度。
Description
技术领域
本发明涉及一种基于概率查表的哈夫曼快速解码方法。
背景技术
哈夫曼编码是熵编码的一种,是一种可变字长编码(VLC)的无损压缩方法。它的基本思想是通过给在数据流中出现概率不同的字符分配不同长度的码值来进行压缩。简言之,就是当需要编码的字符在数据流中出现概率较高时,为其分配较短的码值,反之,则为其分配较长的码值。哈夫曼编码在计算机科学当中应用广泛,许多压缩数据格式都使用了哈夫曼编码作为其标准的一部分。
一般来讲,哈夫曼解码作为一种运算复杂度O(n)的简单操作,其计算量不是很大。但是在某些对速度要求较高或对成本要求较低的情况下,提高哈夫曼解码速度还是重要的。特别地,如果哈夫曼解码后的数据运算量较小或是有其他高速方法的时候(比如有高速硬件加速),这个问题就更加凸现。
传统的哈夫曼解码主要经过反复几次移位,读取数据,比较码值,查表的循环来完成一个哈夫曼单元的解码过程。在这个过程中有三点消耗时间:首先,由于哈夫曼编码是按位编码,这个过程需要较多的位操作,而且数据读取过程往往也不是整字节读取;其次,哈夫曼编码是可变长编码,故往往要重复几次操作才能得到对应的码值;再次,对于现代的CPU来说,其寄存器的长度往往有16或32位,但哈夫曼编码的长度往往只有几位,这样并不能有效利用寄存器的宽度。
所以,为了有效地提高哈夫曼解码的速度,需要对上述三个关键点进行改进。
发明内容
为了解决上述的哈夫曼解码现有技术中存在的问题,本发明提供了一种基于概率查表的哈夫曼解码方法。
本发明提供了一种基于概率查表的哈夫曼快速解码方法,包括:在解码中依次读取码流,根据所读取码流在所述辅助表中查找其对应信息,并且根据所述对应信息输出解码后的对应字符,其中,所述辅助表根据哈夫曼表建立,包含码流解码后的多组信息,并且反映了解码后的对应字符在码流中的出现概率。
在本发明的一个实施例中,所述多组信息是16位二进制码流解码后的65536组信息。
在本发明的另一个实施例中,所述每组信息以较高概率包括码流解码后包含的完整字符数量、所述完整字符的哈夫曼编码长度和、以及所述完整字符的内容。
在本发明的又一个实施例中,所述每组信息以较低概率为空。
在本发明的另一个一个实施例中,所述对应字符为多个或一个。
在本发明的还一个实施例中,如在辅助表中存在所读取码流的对应信息,则随后的码流读取以字(16bit)为单位。
在本发明的又一个实施例中,在所述查表之前只进行一次移位。
在本发明的另一个实施例中,如在没有在辅助表中查找到所读取码流的对应信息,则通过哈夫曼表直接解码。
本发明在哈夫曼解码之前建立一个辅助表,在需要编码的字符在数据流中出现概率较高的情况下,通过一次移位并进行16位的查表获得多个或一个哈夫曼码值,且码流的读取均以字作为单位;而在概率较低的情况下,通过常规方式得到一个哈夫曼码值,提高了哈夫曼解码的速度。
附图说明
下面将参照附图对本发明的具体实施方案进行更详细的说明,在附图中:
图1示意了根据本发明的在进行哈夫曼解码前建立辅助表的流程图;以及
图2示意了根据本发明的哈夫曼解码的流程图。
具体实施方式
图1示意了在进行哈夫曼解码前建立辅助表的流程图。
本发明的哈夫曼解码方法首先需要建立一个辅助表Table,此辅助表有65536个元素,每个元素包括三项,Table->N,Table->L,Table->data[]。其中Table[B]对应的是以B为16位二进制码流的信息(例如B=421,其二进制为110100101B,则其代表的就是二进制码流0000000110100101的信息),Table[B]N代表此码流解码后所包含的完整字符的数量,Table[B]L代表解码后所包含的完整字符的哈夫曼编码长度和,Table[B]data代表解码后所包含的完整字符的内容。
建立辅助表Table的过程如图1所示。
建立辅助变量B,L,K(16bit无符号),建立过程如下:
1、初始化B=0
2、令Table[B].N=0,L=0,K=B
3、将K换算成16位二进制码流进行正常的哈夫曼解码
4、判断K是否能正常解码出1个哈夫曼字符,如不能,跳转至10
5、步骤4解码出的字符为X,X哈夫曼编码所占的长度为C
6、令L=L+C
7、判断L是否大于15,如大于,跳转至10
8、令Table[B].data[Table[B].N]=X,Table[B].N=Table[B].N+1
9、令K=K&((1<<(16-L))-1),并跳转至3(&代表按位与,<<代表按位左移)
10、令Table[B].L=L
11、令B=B+1
12、判断B是否大于65535,如不是,跳转至2
13、结束
图2示意了根据本发明的哈夫曼解码的流程图。
如图2所示,建立辅助变量A(32bit无符号),B(16bit无符号),C(其长度由最长的哈夫曼编码后的码长得到),POS,POS2。
get n bit(PTR)代表从待解码的码流中读取n位。
具体解码过程如下:
1、初始化A=get32bit(PTR),即从待解码的码流中读出32位并赋值给A,并且令POS=16
2、B=A>>POS,将A右移16位并赋值给B
3、判断Table[B].N是否等于0,如果是,跳转至8
4、从Table[B].data输出Table[B].N个数据作为解码出的数据
5、令POS=POS-Table[B].N
6、判断POS是否小于1,如不是,跳转至17
7、令A=(A<<16)+get16bit(PTR),POS=POS+16,并跳转至17
8、令C=B,POS2=0
9、判断POS是否小于1,如不是,跳转至11
10、令C=(C<<1)+get1bit(PTR),POS2=POS2+1,跳转至12
11、C=(C<<1)+A.(POS-1),POS=POS-1,其中A.(POS-1)代表A的二进制第POS-1位
12、判断C是否是哈夫曼码值,如不是,跳转至9
13、输出C所对应的字符值
14、判断POS2是否等于0,如是,跳转至16
15、令A=get(32-POS2%16)bit(PTR),POS=16-POS2%16,跳转至17
16、令A=(A<<16)+get16bit(PTR)
17、判断是否解码完成,如不是,跳转至2
18、结束
显而易见,在不偏离本发明的真实精神和范围的前提下,在此描述的本发明可以有许多变化。例如,所述的辅助表可以是其他位N的二进制码流解码后的2N组信息。又例如,如在辅助表中存在所读取码流的对应信息,随后的码流读取以一个或多个字节为单位,而不一定非得是以字(16bit)为单位。
因此,所有对于本领域技术人员来说显而易见的改变,都应包括在本权利要求书所涵盖的范围之内。本发明所要求保护的范围仅由所述的权利要求书进行限定。
Claims (8)
1.一种基于概率查表的哈夫曼快速解码方法,包括:
在解码中依次读取码流,根据所读取码流在所述辅助表中查找其对应信息,并且根据所述对应信息输出解码后的对应字符,
其中,所述辅助表根据哈夫曼表建立,包含码流解码后的多组信息,并且反映了解码后的对应字符在码流中的出现概率。
2.根据权利要求1的方法,其中,所述多组信息是16位二进制码流解码后的65536组信息。
3.根据权利要求2的方法,其中,所述每组信息以较高概率包括码流解码后包含的完整字符数量、所述完整字符的哈夫曼编码长度和、以及所述完整字符的内容。
4.根据权利要求2的方法,其中,所述每组信息以较低概率为空。
5.根据权利要求1的方法,其中,所述对应字符为多个或一个。
6.根据权利要求1的方法,其中,如在辅助表中存在所读取码流的对应信息,则随后的码流读取以字(16bit)为单位。
7.根据权利要求1的方法,其中,在所述查表之前只进行一次移位。
8.根据权利要求1的方法,还包括:
如在没有在辅助表中查找到所读取码流的对应信息,则通过哈夫曼表直接解码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101178294A CN101325418B (zh) | 2008-08-05 | 2008-08-05 | 一种基于概率查表的哈夫曼快速解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101178294A CN101325418B (zh) | 2008-08-05 | 2008-08-05 | 一种基于概率查表的哈夫曼快速解码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101325418A true CN101325418A (zh) | 2008-12-17 |
CN101325418B CN101325418B (zh) | 2012-11-21 |
Family
ID=40188787
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101178294A Expired - Fee Related CN101325418B (zh) | 2008-08-05 | 2008-08-05 | 一种基于概率查表的哈夫曼快速解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101325418B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102136270A (zh) * | 2010-12-27 | 2011-07-27 | 华为软件技术有限公司 | 一种音频解码方法及装置 |
CN102237878A (zh) * | 2010-04-20 | 2011-11-09 | 慧荣科技股份有限公司 | 一种霍夫曼解码方法 |
CN102438145A (zh) * | 2011-11-22 | 2012-05-02 | 广州中大电讯科技有限公司 | 一种基于Huffman编码的图片无损压缩方法 |
CN106471743A (zh) * | 2014-06-20 | 2017-03-01 | 甲骨文国际公司 | 普通ascii数据流的编码 |
CN106851323A (zh) * | 2015-12-07 | 2017-06-13 | 腾讯科技(深圳)有限公司 | 解码方法及解码装置 |
CN108599897A (zh) * | 2018-04-09 | 2018-09-28 | 珠海格力电器股份有限公司 | 设备的数据处理方法和装置 |
-
2008
- 2008-08-05 CN CN2008101178294A patent/CN101325418B/zh not_active Expired - Fee Related
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102237878A (zh) * | 2010-04-20 | 2011-11-09 | 慧荣科技股份有限公司 | 一种霍夫曼解码方法 |
CN102237878B (zh) * | 2010-04-20 | 2015-09-02 | 慧荣科技股份有限公司 | 一种霍夫曼解码方法 |
CN102136270A (zh) * | 2010-12-27 | 2011-07-27 | 华为软件技术有限公司 | 一种音频解码方法及装置 |
CN102136270B (zh) * | 2010-12-27 | 2012-08-08 | 华为软件技术有限公司 | 一种音频解码方法及装置 |
CN102438145A (zh) * | 2011-11-22 | 2012-05-02 | 广州中大电讯科技有限公司 | 一种基于Huffman编码的图片无损压缩方法 |
CN106471743A (zh) * | 2014-06-20 | 2017-03-01 | 甲骨文国际公司 | 普通ascii数据流的编码 |
CN106851323A (zh) * | 2015-12-07 | 2017-06-13 | 腾讯科技(深圳)有限公司 | 解码方法及解码装置 |
CN106851323B (zh) * | 2015-12-07 | 2019-07-19 | 腾讯科技(深圳)有限公司 | 解码方法及解码装置 |
CN108599897A (zh) * | 2018-04-09 | 2018-09-28 | 珠海格力电器股份有限公司 | 设备的数据处理方法和装置 |
CN108599897B (zh) * | 2018-04-09 | 2020-08-11 | 珠海格力电器股份有限公司 | 设备的数据处理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101325418B (zh) | 2012-11-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6195024B1 (en) | Content independent data compression method and system | |
CN101325418B (zh) | 一种基于概率查表的哈夫曼快速解码方法 | |
US6819271B2 (en) | Parallel compression and decompression system and method having multiple parallel compression and decompression engines | |
US20020101367A1 (en) | System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms | |
CN101147325B (zh) | 用于霍夫曼代码的快速小型解码器和解码方法 | |
CN1322405A (zh) | 信息字的平均信息量编码设备和方法,平均信息量编码信息字的解码设备和方法 | |
JPS61212920A (ja) | データ圧縮方法およびコード化された圧縮データの受信方法 | |
US9929748B1 (en) | Techniques for data compression verification | |
CN101017574A (zh) | 一种适于jpeg码流的哈夫曼解码方法 | |
US6225922B1 (en) | System and method for compressing data using adaptive field encoding | |
US9088297B2 (en) | High throughput decoding of variable length data symbols | |
CN101534124B (zh) | 一种用于短小自然语言的压缩算法 | |
CN1675842B (zh) | 算术编码的方法、设备以及相应解码方法 | |
CN114614833A (zh) | 自适应游程编码的测试数据压缩及解压方法 | |
CN116016606A (zh) | 一种基于智慧云的污水处理运维数据高效管理系统 | |
EP1266455A1 (en) | Method and apparatus for optimized lossless compression using a plurality of coders | |
WO2002039591A1 (en) | Content independent data compression method and system | |
CN111708574A (zh) | 指令流压缩、解压缩方法及装置 | |
US9235610B2 (en) | Short string compression | |
CN114614832A (zh) | 基于前后游程长度编码的测试数据压缩及解压方法 | |
CN101516008B (zh) | 单一位平面的编码系统及方法 | |
CN1129883A (zh) | 高速可变长度解码器 | |
CN106559085A (zh) | 一种范式哈夫曼解码方法及其装置 | |
CN107463355B (zh) | 立即数压缩编码方法和系统 | |
US6611211B2 (en) | Data mask coding |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121121 Termination date: 20170805 |
|
CF01 | Termination of patent right due to non-payment of annual fee |