计算机以及通信领域的熵一般指信息熵。本文介绍信息熵与哈夫曼编码的关系,以及二进制在信息熵和哈夫曼编码中的位置。

  1. 信息熵
    香农提出,把信息中的冗余排除后剩余的平均信息量就是信息熵。信息熵是对不确定性的度量。信息熵越大,不确定性越大。
    对于一个随机变量X,其信息熵为:
    H ( X ) = − ∑ x P ( x ) l o g a ( P ( x ) ) H(X)=-\sum\limits_x P(x)log_a(P(x)) H(X)=−x∑​P(x)loga​(P(x)).
    当X服从均匀分布时,其不确定或熵最大。当X完全确定时,熵为0.
    其中 a a a可以取任意值。
    在信息论中,香农于1948年发现信源编码定理或香农编码定理:
    给定信源 X = { x i } X=\{x_i\} X={xi​}以及概率分布 P ( X ) P(X) P(X), 进行某种无损K进制编码后得 C = { c i } C=\{c_i\} C={ci​}, 则
    H ( X ) l o g a ( K ) ≤ E [ L ] ≤ H ( X ) l o g a ( K ) + 1 \frac{H(X)}{log_a(K)}\leq E[L]\leq\frac{H(X)}{log_a(K)}+1 loga​(K)H(X)​≤E[L]≤loga​(K)H(X)​+1,
    其中L为对X进行编码后的随机编码C的长度。
    该定理说明,X进行无损编码后平均编码长度大于等于以K为底的信息熵。
    注: H ( X ) l o g a ( K ) \frac{H(X)}{log_a(K)} loga​(K)H(X)​相当于更换 H ( X ) H(X) H(X)的底为 K K K。

  2. 哈夫曼编码
    基于香农编码定理思想,哈夫曼于1952年提出一种无损二进制编码方法,属于熵编码中的一种。
    其主要思想是通过构建最优二叉树(哈夫曼数),也就是带权路径长度最短的二叉树,来对字符集进行编码。哈夫曼证明其是一种最优二进制编码,也就是说路径之和最小。
    E [ L ] = ∑ P ( s i ) ∗ L e n g t h ( s i ) E[L]=\sum P(s_i)*Length(s_i) E[L]=∑P(si​)∗Length(si​)
    也就是说平均bit数最小。
    当概率是2的幂次方时,哈夫曼编码可达到信息熵所指明的最小平均bit数。

熵,哈夫曼编码,二进制相关推荐

  1. 二进制哈夫曼编码c语言实现,二进制霍夫曼编码

    通过查看其他博客的内容,整理一篇关于二进制霍夫曼编码的笔记供大家参考和讨论,如果有错误,欢迎大家联系我批评指正. 一.二进制霍夫曼的原理 我们可以将二进制霍夫曼编码拆分理解: 二进制即 0.1: 二进 ...

  2. 算数编码与哈夫曼编码的比较【转载】

    算数编码 vs 哈夫曼编码 这其实是我想重点探讨的一个部分.在这里默认你已经懂哈夫曼编码,因为这是一种最基本的压缩编码,算法课都会讲.哈夫曼编码和算数编码都属于熵编码,仔细分析它们的原理,这两种编码是 ...

  3. 图像压缩编码——香农/哈夫曼编码

    图像压缩编码--香农/哈夫曼编码 一.信息熵 二.香农-范诺编码 2.1 香农-范诺编码简述 2.2 特例详解 三.哈夫曼编码 3.1 哈夫曼编码简述 3.2 特例详解 四.RGB图像压缩 Endin ...

  4. 5.1 Python图像处理之图像编码-哈夫曼编码

    5.1 Python图像处理之图像编码-哈夫曼编码 文章目录 5.1 Python图像处理之图像编码-哈夫曼编码 1 算法原理 2 代码 3 效果 1 算法原理 哈夫曼编码是一种根据词频变化的变长二进 ...

  5. 哈夫曼编码及文本文件的压缩解压(c++SourceCode)

    哈夫曼编码是一种编码方式,是可变字长编码(VLC)的一种.以哈夫曼树-即最优二叉树,带权路径长度最小的二叉树,经常应用于数据 压缩. 在计算机信息处理中,"哈夫曼编码"是一种一致性 ...

  6. 霍夫曼树与霍夫曼编码

    霍夫曼树以及哈夫曼编码 一.什么是哈夫曼树与哈夫曼编码 编码是什么 答: 在ASCII 编码中 'a' = 97 = ( 01100001 ) 2 (01100001)_2 (01100001)2​ ...

  7. 信息论与编码_哈夫曼编码

    哈夫曼树 哈夫曼树(Huffman Tree)也是一种特殊的二叉树,这种树的所有叶子结点都带有权值,从中构造出带权路径长度最短的二叉树,即哈夫曼树. 哈夫曼树的定义 ​ 设二叉树具有n个带权值的叶子结 ...

  8. 【数据结构-树】4.图解平衡二叉树和哈夫曼编码(逐步演绎,一文读懂)

    一.平衡二叉树 1.1 什么是平衡二叉树? 规定在插入和删除二叉树结点时,要保证任意结点的左.右子树高度之差的绝对值不可以超过1 平衡因子:结点左子树和右子树的结点高度差为该结点的平衡因子,也就是说平 ...

  9. Huffman(哈夫曼)编码--又称最佳编码(最有效的二进制编码)

    2019独角兽企业重金招聘Python工程师标准>>> 在看一道Google笔试题时用到哈夫曼编码,于是去搜了下资料.题目如下: 用二进制来编码字符串"abcdabaa&q ...

最新文章

  1. IDC评述网:2012年11月全国IDC品牌排行榜
  2. javascript语言学习
  3. 功夫熊孟军贤:如何拿到10万种子用户,创业的经验分享
  4. Spring IoC 源码系列(三)Spring 事件发布机制原理分析
  5. Tree前序反序列化
  6. java mousepress_Java线程原语弃用
  7. dcc garch matlab,如何用Eviews或者MATLAB实现DCC-garch模型?
  8. linux 串口text模式安装,使用串口安装centos操作系统
  9. BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
  10. 单工、半双工、双工通信详解
  11. Qt开源作品40-图片及文字与base64编码互换
  12. 学习笔记—网络规划和设计
  13. php记录sql语句,sql语句记录
  14. latex参考文献bib基本格式_在Latex中利用.bib进行参考文献管理
  15. 无人机边缘计算中的计算卸载——Stackelberg博弈方法论文复现附matlab代码
  16. 汇率实时行情查询接口
  17. 麦肯锡三部曲_《学会提问:麦肯锡工作法》—读书笔记导图分享
  18. 30分钟java桌球小游戏_Java桌球小游戏(兴趣制作)
  19. 定义一个类,并且在测试类中使用
  20. EF实体类种的Virtual关键字作用

热门文章

  1. BC70 空心三角形图案
  2. 写给当初的你,现在的我
  3. 测试用例经典设计方法之 因果图法
  4. Scala+Hadoop+Spark开发
  5. SQL之having关键字用法
  6. 【001】Visual Studio
  7. [机器学习笔记] 将数据拆分成训练集和测试集的几种方法
  8. Qt QVector “isDetached()“
  9. java的图片上传详解
  10. python如何生成指定均值向量和协方差矩阵的多维正态分布数据