`
emily2ly
  • 浏览: 166647 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

范式Huffman编码

F# 
阅读更多
范式huffman编码是一种相对于正规的编码而言操作起来简单得多的编码方法,而且其效果能够起到和huffman编码相同的效果。
范式huffman编码的基础还是依靠于huffman编码。
1、首先对需要压缩的数据进行huffman排列,得出这个数据的huffman二叉树的模型。
得到的这个数据很有用,就是得到了每个数据样本到底分配几个bit。比如数据中出现了数据a,经过这一步后就得出了数据a的huffman码有几个bit。比如说,算下来是2位,就是表示在数据a的huffman编码中,用一个2位的数据来代表a。
2、得到上述的数据后,就要确定数据样本中的每一个样本对应的huffman码值。
比如上述的数据a,已经确定编码后的huffman码字为2位,则通过下面的规则,就可以确定这个2位值a对应的huffman码值到底是什么。
3、为了实现2的目的,按照如下的顺序来操作。
a、得到每个数据样本分配位数,举个例子如下:
                           Symbol     Length
                               a            2
                               b            2
                               c            3
                               d            3
                               e            4
                               f             4
                               i              4
                               g             5
                               h             5
b、根据上表,能够得出huffman码的最长的码的位数,比如说是5位。然后统计一下,从5位长的编码开始到1位长的编码为止(共5种编码),每种编码长度出现的个数(比如数据样本中编码出来后是4位的数据样本有多少个),可以得到另一个表,如下:
                           Length        Num
                               5             2
                               4             3
                               3             2
                               2             2
                               1             0
这个表表示编码长度为一个定值的样本个数是多少。第一行表示长度为5的样本个数为2个。
c、由上表能够简单的算出另一个表
                           Length        start code
                               5              00000
                               4               0001
                               3                010
                               2                 10
这个表的计算方法很简单,而且由这个表能够算出整个码表,现将计算方法归纳如下
将最长码位的最开始的那个样本的huffman码值设为0,当然位数是确定的(在上述例子中,为00000),因为5位的码个数有2个,0加上2等于2,然后右移一位的值作为4位码的开始的码值,为0010,因为4位码值个数为3,0010加上3为0101,右移一位作为3位码的起始码值,为010,因为3位码个数为2个,则010加上2位100,右移一位为10,作为2位码的起始码值。
d、由上表,确定了每个不同码长的huffman码的起始样本的码值,从上面的表中能够非常容易的得到所有样本的码值。方法如下
举5位码长的huffman码为例子:起始的码值为00000,它对应着h,即00000时h的huffman 编码。然而g的编码位数也是5位,对于g,只要在00000后面加1就得到了00001,这个就是g的编码,如果还有第三个5位码的话,那么它的编码就是 00001+1=00010(当然本例中只有2个5位码)
其他码长的同样处理,按照顺序加一的方法就可以得到所有样本的编码值。
如上,范式huffman编码工作就完成了。
 
但是值得注意的是 ,在jpeg编码中,存放的huffman表并不是像上面说的那样。恰恰相反,在jpeg系统中,解码时的huffman表的顺数是相反的,是将最低位赋予0 ,然后每次都左移 来得到其他的编码值的。

(完)
create@2009-10-23
  • 大小: 11.7 KB
分享到:
评论

相关推荐

    Huffman和范式Huffman编码

    ### Huffman和范式Huffman编码 #### 一、Huffman编码概述 Huffman编码是一种广泛应用于数据压缩领域的编码方法,由David A. Huffman在1952年提出。该编码方式利用不同字符出现频率的不同,给予不同的编码长度,...

    Huffman编码和范式Huffman为文件编码

    - 提到在VS2008上运行,这可能意味着提供的压缩包包含C++或C#代码实现Huffman编码和范式Huffman编码的程序,用户可以下载并运行这些代码来理解并实践编码和解码的过程。 综上所述,Huffman编码和范式Huffman编码是...

    范式哈夫曼编码

    Huffman在1952年提出,是一种基于概率的变长编码方法,常用于数据压缩。它通过构建一颗特殊的二叉树——哈夫曼树,来确定每个字符的编码。频率较高的字符拥有较短的编码,而频率较低的字符则有较长的编码。这一特性...

    范式霍夫曼编码

    范式霍夫曼编码的基本思路是,只要符合两个条件的编码都可以称为霍夫曼编码:(1) 是前缀编码,(2) 某一字符编码长度和使用二叉树建立的该字符的编码长度相同。这样,范式霍夫曼编码可以不依赖于二叉树结构,使用数组...

    DM6446JPEG-encode.rar_DM6446 JPEG_conversion_jpeg encode

    一个原始图像信息,要对其进行 JPEG 编码,过程分两大步: i) 去除视觉上的多余信息,即空间冗余度 ii)去除数据本身的多余...vi) 范式 Huffman 编码 vii)DC 的编码 这部分代码是在DM6446芯片上实现的JPEG编码算法。

    范式哈夫曼算法的分析与实现(源码)

    范式哈夫曼编码(Canonical Huffman Coding)是哈夫曼编码的一种规范化形式,它要求哈夫曼树的构造满足特定的规则,即所有左子节点的频率小于等于其父节点,所有右子节点的频率大于其父节点。这样构建的哈夫曼树被...

    JPEG解码源程序(C++)

    范式 Huffman 编码 7. DC 的编码 解码过程简述 8. 一个数据单元 Y 的解码 9. JPG 文件(Byte 级)里怎样组织图片信息 10. 关于标记 11. JPG 文件中 Haffman 表的储存 12. 采样系数 13...

    jpeg 的编码原理

    ##### **2.6 范式Huffman编码** 对量化后的系数进行Huffman编码,这是一种可变长度的编码方式,使得出现频率高的符号用较短的位数表示,出现频率低的符号用较长的位数表示。 **步骤**: 1. **频率统计**:统计每...

    范式编码学习ppt,非常宝贵的资源阿

    学习范式编码,特别是Huffman编码,不仅能够理解数据压缩的基本原理,还能掌握实际应用中的编程技巧。通过这个PPT,我们可以看到一个完整的Huffman编码实现过程,包括从统计、排序到编码的各个环节,这有助于我们...

    JPGE 压缩易简算法说明

    压缩算法简介 1. 色彩模型 2. DCT (离散余弦变换) 3. 重排列 DCT 结果 4. 量化 5. 0 RLE 编码 6. 范式 Huffman 编码 7. DC 的编码

    matlab算法源码MATLAB霍夫曼Huffman编码译码带GUI

    霍夫曼编码(Huffman Coding)是一种广泛应用于数据压缩领域的编码方式,其原理是利用字符出现的频率来构建最优二叉树,使得常见的字符使用较短的编码,不常见的字符使用较长的编码,从而达到压缩数据的目的。...

    基于哈夫曼编码的文件压缩解压程序的C语言实现

    哈夫曼编码是一种高效的数据编码方法,主要用于无损数据压缩。在C语言中实现基于哈夫曼编码的文件压缩解压程序,需要深入理解哈夫曼编码的基本原理以及C语言编程技巧。 首先,哈夫曼编码是根据字符出现频率进行编码...

    DCT.rar_JEPG编码_dct_范式

    4. **熵编码**:使用霍夫曼编码(Huffman Coding)或其他熵编码方法,对量化后的系数进行编码,减少表示数据所需的位数。 描述中的“范式哈夫曼编码”可能指的是在JPEG编码中的特定应用,哈夫曼编码是一种变长编码...

    杭电多媒体作业

    Huffman在1952年提出,主要应用于变长编码。它的核心思想是根据字符出现的频率构建一棵特殊的二叉树,称为哈夫曼树,使得频率高的字符具有较短的编码,从而在总体上达到最优的编码效率。哈夫曼编码在许多压缩标准...

    基本压缩解压功能大全.包括Huffuman算法,RLE算法,LZ算法,rice算法,shannon算 法.带有测试文件.

    这里我们将深入探讨标题和描述中提到的五种压缩算法:Huffman编码(Huffuman算法)、运行长度编码(RLE算法)、Lempel-Ziv算法(LZ算法)、Rice编码(rice算法)以及Shannon-Fano编码(shannon算法),并结合提供的...

    哈夫曼压缩程序源代码

    范式哈夫曼编码确保最短的编码长度为1,避免了在解码时因所有编码长度不同而产生的额外复杂性。这通常通过在每个编码前添加0或1来实现,使得所有编码的长度都相同。 文件列表中的`huffman.c`是源代码文件,包含了...

    Algorithms Illuminated Part 3.pdf

    在Huffman编码的探讨中,书中深入分析了编码问题,并阐述了如何使用贪心算法来构造Huffman树,以及如何证明该算法的正确性。Huffman编码利用字符出现的频率来构造最优的前缀码,是一种广泛应用于数据压缩的算法。 ...

    离散实验图论与命题逻辑训练

    以上这些实验涵盖了图论的基本概念,如图的连通性和欧拉路径,数据压缩中的Huffman编码,以及命题逻辑的基本操作,包括逻辑蕴含、逻辑等价和逻辑转换。通过这些实验,学生能够深入理解离散数学中的核心概念,并提高...

    易语言源码易语言MP3语音生成源码.rar

    这涉及到DCT(离散余弦变换)、量化、熵编码(如 Huffman 编码)等步骤。由于易语言可能没有内置这样的高级功能,开发者通常需要调用第三方库,如LAME库,来完成这一部分的工作。 4. **文件写入**:编码后的数据...

    arm做的MP3,C++编程的。

    解码过程则是将压缩后的数据恢复成原始的音频信号,这个过程需要对MP3的帧结构、熵编码(如 Huffman 编码)、窗函数等有深入理解。 在C++中实现MP3解码,通常会用到一些开源库,如libmp3lame或FFmpeg,这些库已经...

Global site tag (gtag.js) - Google Analytics