香农编码 哈夫曼编码 费诺编码的比较

文章目录

哈夫曼编码

编码步骤

例子

优点

缺点

费诺编码

编码步骤

例子

优点

缺点

香农编码

编码步骤

例子

优点

缺点

参考

备注:本文除了例子与数据,其他内容均为整合网络资源。

哈夫曼编码

编码步骤

S1 将信源符号按照概率大小从大到小排列;

S2 把概率最小的两个信源符号分成一组,其中,上面一个编码为0,下面一个编码为1,并将这两个符号的概率加起来,其结果再与尚未处理过的符号重新按照大小排序;

S3 重复步骤2,直到所有的信源符号都处理完毕;

S4 从右至左按照编码路径返回,即可得到各个码字。

例子

假设一信息源发出五个信号,每个信号的概率分布如下:

信号

u1

u2

u3

u4

u5

概率

0.2

0.2

0.4

0.1

0.1

编码过程如下图:

输出码字:

信号

u1

u2

u3

u4

u5

总和

概率

0.2

0.2

0.4

0.1

0.1

码字

101

100

0

111

110

码长

3

3

1

3

3

平均码长

0.6

0.6

0.4

0.3

0.3

2.2

优点

== 赫夫曼码的码字(各符号的代码)是异前置码字,即任一码字不会是另一码字的前面部分。

== 赫夫曼码的各码字可以连在一起传送,中间不需另加隔离符号,只要传送时不出错,收端仍可分离各个码字,不致混淆。

== 当信息源各符号出现的概率很不平均的时候,哈夫曼编码的效果才明显。当信号源的符号概率为2的负幂次方时,达到100%的编码效率。

缺点

== 当信息源各符号出现的概率较为平均的时候,哈夫曼编码的效果不明显。

== 哈夫曼编码必须精确地统计出原始文件中每个符号的出现频率,如果没有这些精确的统计,将达不到预期的压缩效果。霍夫曼编码通常要经过两遍操作,第一遍进行统计,第二遍产生编码,所以编码速度相对慢。

== 编码长度不统一,硬件实现有难度。

== 由于编码长度可变。因此译码时间较长,使得霍夫曼编码的压缩与还原相当费时。

== 哈夫曼编码只能用整数来表示单个符号而不能用小数,这很大程度上限制了压缩效果。

== 哈夫曼所有位都是合在一起的,如果改动其中一位就可以使其数据变得面目全非。

费诺编码

编码步骤

S1 将信源符号按照其概率大小,从大到小排列;

S2 将这一组信源符号分成概率之和尽可能接近或者相等的一组(即两组分别的概率和之间的差尽可能小!);

S3 将上面一组符号编码成0,下面一组编码成1,反之亦可;

S4 将已经分好的组重复步骤2,3,直到不能再进行分组为止;

S5 从左到右一次写出码字。

例子

假设一信息源发出五个信号,每个信号的概率分布如下:

信号

u1

u2

u3

u4

u5

概率

0.2

0.2

0.4

0.1

0.1

编码过程如下图:

输出码字:

信号

u1

u2

u3

u4

u5

总和

概率

0.2

0.2

0.4

0.1

0.1

码字

11

101

1

100

0

码长

2

3

1

3

1

平均码长

0.4

0.6

0.4

0.3

0.1

1.8

优点

== 比较适合于对分组概率相等或接近的信源编码

== 考虑了信源的统计特性,使概率大的信源符号能对应码长较短的码字,从而有效地提高了编码效率。

缺点

== 不一定是最佳码。因为费诺编码方法不一定能使短码得到充分利用。当信源符号较多时,若有一些符号概率分布很接近,分两大组的组合方法就会很多。可能某种分大组的结果,会使后面小组的“概率和”相差较远,从而使平均码长增加。

香农编码

编码步骤

S1 将q个信源符号按概率递减的方式进行排序:P1≥P2≥……Pq。

S2 按式-logP(Si)≤li≤1-logP(Si)(i=1,2,……q),计算出每个信源符号的码长li。

S3 为编成唯一可译码,计算第i个信源符号的累加概率。

S4 将累加概率Gi用二进制表示。

S5 取Gi对应二进制数的小数点后li位构成该信源符号的二进制码字。

例子

假设一信息源发出五个信号,每个信号的概率分布如下:

信号

u1

u2

u3

u4

u5

概率

0.2

0.2

0.4

0.1

0.1

编码过程如下表:

信号

概率

累加概率

二进制小数

-log(2)p

码长

码字

平均码长

u3

0.4

0

0.00…

1.321928095

2

00

0.8

u1

0.2

0.4

0.011…

2.321928095

3

011

0.6

u2

0.2

0.6

0.100…

2.321928095

3

100

0.6

u4

0.1

0.8

0.1100…

3.321928095

4

1100

0.4

u5

0.1

0.9

0.1110…

3.321928095

4

1110

0.4

总和

2.8

输出码字:

信号

u1

u2

u3

u4

u5

码字

011

100

00

1100

1110

优点

== 有重要的理论意义。

缺点

== 编码效率不高。

== 其平均码长不是最短的。

== 冗余度稍大,实用性不大。

== 由于码长总是进一取整,香浓编码方法不一定是最佳的。

参考

https://blog.csdn.net/yongf2014/article/details/46573557 信源编码算法(费诺编码&&哈夫曼编码)

https://wenku.baidu.com/view/401ee543a417866fb84a8e6f.html 信息论与编码–费诺编码与哈弗曼编码比较

c语言实现费诺编码csdn,香农编码 哈夫曼编码 费诺编码的比较相关推荐

  1. java实现.费诺编码_香农费诺编码的matlab实现.doc

    香农费诺编码的matlab实现.doc 信息论与编码实验香农费诺编码的matlab实现学院班级-姓名学号摘要 用预先规定的方法将文字.数字或其他对象编成数码,或将信息.数据转换成规定的电脉冲信号.编码 ...

  2. labview霍夫曼编码_香农编码与霍夫曼编码

    一.香农-范诺编码 香农-范诺(Shannon-Fano)编码的目的是产生具有最小冗余的码词(code word).其基本思想是产生编码长度可变的码词.码词长度可变指的是,被编码的一些消息的符号可以用 ...

  3. RLE算法机制、缺点及哈夫曼算法和莫尔斯编码

    CSDN话题挑战赛第2期 参赛话题:学习笔记 目录 一.RLE算法机制 二.RLE算法的缺点 三.哈夫曼算法和莫尔斯编码 一.RLE算法机制 对 AAAAAABBCDDEEEEEF 这17个半角字符的 ...

  4. 哈夫曼(Huffman)编码在word2vec中的应用

    哈夫曼(Huffman)编码 假设给定 n 个权值{w1,w2,...,wn}作为二叉树的 n 个叶子结点,若二叉树的带权路径长度达到最小, 则称这样的二叉树为最优二叉树,也称为 Huffinan 树 ...

  5. C语言霍夫曼编码压缩,数据结构大作业——哈夫曼编码压缩BMP格式文件

    数据结构大作业--哈夫曼编码压缩BMP格式文件 首先需要了解BMP图像格式 BMP图像格式详解 其次需要了解哈夫曼编码如何对BMP文件进行压缩 哈夫曼压缩与解压缩 编程部分 使用的头文件 虽然这里用了 ...

  6. 数据处理方法-算术编码(香农算法、java编码实现)

    一.算术编码起源 早在1948年,香农就提出将信源符号依美出现的概率降序排序,用符号序列累计概率的二进值作为对信源的编码,并从理论上论证了它的优越性.1960年,Peter Elias 发现无需排序, ...

  7. 信息论与编码_香农三大定理

    离散平稳无记忆序列变长编码定理(无失真信源编码定理.香农第一定理): 香农第一定理是克劳德·香农在 1948 年提出的,它指出,对于任何一个给定的信息源,其信息熵(即信息的期望值)是有限的,并且信息熵 ...

  8. 霍夫曼(Huffman)编码算法详解之C语言版

    一.Huffman编码 霍夫曼(Huffman)树是一类带权路径长度最短的二叉树树.Huffman树的一个非常重要的应用就是进行Huffman编码以得到0-1码流进行快速传输. 在电报收发等数据通讯中 ...

  9. C语言:哈夫曼树构造及编码(核心代码每一行都有注释)

    一.[实验目的及要求] 理解Huffman树的概念及其存储结构: 熟悉Huffman树的构造: 掌握Huffman树的编码方法. 二.[实验内容] 1.代码实现Huffman编码 2.请统计每个字符出 ...

  10. 哈夫曼(Huffman)编码问题(C++)

    一.题目描述 哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法.其压缩率通常在20%-90%之间.哈夫曼编码算法用字符在文件中出现的频率表来建立一个用0,1串表示各字符的最优表示方式.一个包含1 ...

最新文章

  1. 简单配置jena在eclipse的开发环境
  2. 排序算法java 简书_史上最全经典排序算法总结(Java实现)
  3. Windows Azure 真实案例:CCH 财政服务独立软件开发商(ISV)通过托管服务获得了灵活性并节省成本...
  4. 简要描述安装配置apache的一个开源Hadoop集群
  5. 【墙裂推荐】十九款优质免费PDF处理工具精选推荐
  6. 对于arm嵌入式系统的一点认识
  7. C# 实现Excel导出图片
  8. 本地java源代码上传码云
  9. 利用photoshopcs6将gif格式图片变为背景透明
  10. 通过负载均衡器+域名实现容灾切换-(11)深信服负载均衡器
  11. AWB(Attention WaveBlock)
  12. visio移动变得很卡的解决办法
  13. Altium Designer调整PCB丝印位号经验
  14. 【本周Python热点回顾】画一棵漂亮的樱花树,Python3*和**运算符,Python入门,这就是Python3.8么,i了
  15. syn flood 攻击 c 语言源代码,以太网模拟syn flood攻击
  16. 基础计算机教学论文,计算机基础教学论文范文
  17. 使用JS代码简单实现九九乘法表
  18. 3、kubeadm部署Kubernetes 网络插件flannel、Calico、weave 并设置集群角色
  19. 光标实现为员工涨工资
  20. Rational Ratio

热门文章

  1. ofdm导频信道估计matlab,基于导频的OFDM系统信道估计
  2. 6 二十五项反措--防止锅炉事故
  3. python机械臂仿真_如何用ROS+Rviz+Arbotix控制器仿真为六自由度机械臂建模-工业电子-与非网...
  4. 计算机硕士工资一览表 (时间有点久远了)
  5. 分布式数据同步工具之DataX Web的基本使用
  6. Ansys-结构动力学分析-有预应力琴弦横向振动模态分析学习收获
  7. Terrasolid点云分类_分类算法简述
  8. linux安装vim
  9. 45+最佳免费WordPress主题(2021年)
  10. julia 调用python库_install julia with python