2019独角兽企业重金招聘Python工程师标准>>>

在看一道Google笔试题时用到哈夫曼编码,于是去搜了下资料。题目如下:

用二进制来编码字符串“abcdabaa”,需要能够根据编码,解码回原来的字符串,最少需要()长的二进制字符串?

A:12     B:14      C:18        D:24

应选B

以下是百度百科对Huffman编码原理的解释:

设某信源产生有五种符号u1、u2、u3、u4和u5,对应概率P1=0.4,P2=0.1,P3=P4=0.2,P5=0.1。首先,将符号按照概率由大到小排队,如图所示。

编码时,从最小概率的两个符号开始,可选其中一个支 路为0,另一支路为1。这里,我们选上支路为0,下支路为1。再将已编码的两支路的概率合并,并重新排队。多次重复使用上述方法直至合并概率归一时为止。

从图(a)和(b)可以看出,两者虽平均码长相等,但同一符号可以有不同的码长,即编码方法并不唯一,其原因是两支路概率合并后重新排队时,可能出现几个支路概率相等,造成排队方法不唯一。一般,若将新合并后的支路排到等概率的最上支路,将有利于缩短码长方差,且编出的码更接近于等长码。这里图(a)的编码比(b)好。

图1 赫夫曼编码原理

赫夫曼码的码字,各符号的代码是异前置码字,即任一码字不会是另一码字的前面部分,这使各码字可以连在一起传送,中间不需另加隔离符号,只要传送时不出错,收端仍可分离各个码字,不致混淆。

之所以会出现:任一码字不会是另一码字的前面部分这种情况,是因为从上到下(如图中的右上方至左下方)的每一次分支,都会导致两个分支的码字开始不同。就像河流一样,假设从头到尾最长的那条分支是主流,则每条分流(除主流)绝不会与主流的前部分重合,因为分流的最后一个拐向一定与主流不同,这也是出现该分流的原因。

从上可以看出,出现频率最多的字符的码字是最短的。这就使得一个字符串编码后的总码字更短,所以是最佳编码(当需要编码的是图像视频等时,应该是按各像素出现频率等要素来编码)。

转载于:https://my.oschina.net/henryking/blog/690821

Huffman(哈夫曼)编码--又称最佳编码(最有效的二进制编码)相关推荐

  1. C++实现huffman哈夫曼编码的算法(附完整源码)

    C++实现huffman哈夫曼编码的算法 C++实现huffman哈夫曼编码的算法完整源码(定义,实现,main函数测试) C++实现huffman哈夫曼编码的算法完整源码(定义,实现,main函数测 ...

  2. [源码和文档分享]C语言实现的基于Huffman哈夫曼编码的数据压缩与解压缩

    一.实验题目 用哈夫曼编码实现文件压缩 二.实验目的 了解文件的概念 掌握线性链表的插入.删除等算法 掌握Huffman树的概念及构造方法 掌握二叉树的存储结构及遍历算法 利用Huffman树及Huf ...

  3. C#,哈夫曼编码(Huffman Code)压缩(Compress )与解压缩(Decompress)算法与源代码

    David A. Huffman 哈夫曼编码简史(Huffman code) 1951年,哈夫曼和他在MIT信息论的同学需要选择是完成学期报告还是期末考试.导师Robert M. Fano给他们的学期 ...

  4. JPEG编码过程中的霍夫曼编码

    JPEG编码过程中的霍夫曼编码 jpeg文件中的霍夫曼编码分两个部分对DC系数编码和对AC系数的编码. DC系数的编码 编码过程 DC系数的编码由两部分组成, huffman 编码的bitlen + ...

  5. 电文的编码和译码,哈夫曼编码译码(C语言)

    内容: 从键盘接收一串电文字符,输出对应的Huffman(哈夫曼)编码,同时,能翻译由Huffman编码生成的代码串,输出对应的电文字符串.设计要求: (1)构造一棵Huffman树:         ...

  6. 哈夫曼编码和二进制编码_案例

    哈夫曼编码优于二进制编码案例: 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10.试为这8个字母设计哈夫曼 ...

  7. 2022黄文嵩商盛兰张阳徐铭信息论课程作业 哈夫曼编码(Huffman Coding)简介

    目录 5G,华为,土耳其--我花了两个月,搞懂了5G背后的秘密_哔哩哔哩_bilibili 一.什么是编码? 二.哈夫曼编码 1.编码过程 2.码方差 3.编码特点 4.人无完人,码无完码 三.总结 ...

  8. 数据结构——哈夫曼(Huffman)树+哈夫曼编码

    哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种.Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头 ...

  9. 哈夫曼树(Huffman Tree),与哈夫曼编码

    目录 一.哈夫曼树 1.什么是哈夫曼树? 2.哈夫曼树关键字说明 3.用代码实现哈夫曼树思路分析 4.代码实现 二.哈夫曼编码 1.哈夫曼编码基本介绍 2.原理剖析 3.代码实现 一.哈夫曼树 1.什 ...

最新文章

  1. E667:Fsync failed(how to solve)
  2. win10pin不可用进不去系统_华为鸿蒙系统来了!若安卓不可用,鸿蒙随时顶上!
  3. HMM学习最佳范例三:隐藏模式
  4. 二进制安装kubernetes1.14.1-pod配置清单之客户端访问方式03
  5. 使用Jdom2将一个xml文件添加到另一个xml中
  6. SQL SERVER PIVOT 行转列、列传行
  7. Oracle数据库查询优化
  8. linux驱动之设备号与创建设备节点
  9. Atitit. 解决80端口 System 占用pid 4,,找到拉个程序或者服务占用http 80服务
  10. java打印某年日历_java打印指定年月份的日历
  11. python随机出100道加法题_python3 随机生成10以内的加法算术题
  12. 免费开源好用还佛系的国产PDF软件:pdf补丁丁下载 | 含pdf补丁丁使用手册
  13. 苹果充电线android头断了,【黑科技数据线!断了都能用!】 苹果安卓数据线 快速修复永不断线...
  14. JAVA基础 网络编程
  15. 20行Python代码爬取网站美女图,哇太多了,我U盘装满了
  16. android自动唤醒屏幕软件下载,抬手唤醒软件下载-抬手唤醒安卓版下载V1.6手机版-西西软件下载...
  17. r语言实现sem_利用R语言做结构方程模型分析
  18. save-ps-to-svg1.0百度网盘资源
  19. codeforces#710
  20. 编译Android源码,执行lunch命令时报错“No such file: /root/.lunchrc”的解决办法

热门文章

  1. python3.6与3.7有什么区别_Python3.6.6和Python3.7.0的坑
  2. 如何用df的两列作复杂的运算
  3. 天翼云从业认证(1.2)存储的概念、体系结构、块存储、对象存储、文件存储以及 RAID 磁盘管理技术
  4. 【软考】信息系统项目管理师--知识点
  5. grep查询不到中文 或 Binary file xx matches
  6. Spring单例的线程安全性
  7. 《系统集成项目管理工程师》必背100个知识点-17项目管理计划制订的步骤
  8. Geoserver中切割离线瓦片TileLayer预览时放大之后缺失
  9. Vue+Openlayers加载Geoserver发布的TileWMS后更换shp数据源的流程
  10. Java中通过NetworkInterface获取主机地址和物理地址等