我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下计算机中的编码问题,来看第四部分,哈夫曼编码。

哈夫曼树,又叫霍夫曼树、最优二叉树,表示带权路径最短的树,什么意思呢,没听懂......

唉,所以我说,这书上的表述实在是......

其实,为什么要搞出个哈夫曼编码呢,其实目的就是,通过一种编码方式,使得文件字符编码总长度最短。

先来看几个基本定义:

路径和路径长度:一棵树中,从一个节点向下可达到的叶子节点之间的通路,称为路径。路径中分支的数量称为路径长度。若规定根节点的层数为1,则从根节点到第L层节点的路径长度为L-1。

节点的权及带权路径长度:树中节点的数值,称为节点的权。带权路径长度=从根节点到该节点之间的路径长度*该节点的权

树的带权路径长度:所有叶子节点的带权路径长度之和,记为WPL。

好,再来看哈夫曼树构造算法。假设n个权值为w1、w2、......、wn,准备构造的哈夫曼树有n个叶子节点。具体构造的规则为:

第1步:将w1、w2、......、wn看成是有n棵树(树仅有一个节点)的森林。

第2步:在森林中选出两个根节点的权值最小的树合并,作为一棵新树的子树,且新树的根节点权值为其子树根节点权值之和。

第3步:从森林中删除选取的两棵树,并将新树加入森林。

第4步:重复2、3步,直到森林中只剩下一棵树为止,该树即为所求得的哈夫曼树。

最后就是开始哈夫曼编码。从根节点开始,为到每个叶子节点路径上的左分支赋值0,右分支赋值1,并从根到叶子的路径方向形成该叶子节点的编码。

举例,已知5种字符a、b、c、d、e,出现的频率为5、6、9、14、8,则构造哈夫曼树如下图:

哈夫曼树构造完毕后,接下来进行哈夫曼编码。

如上图,在该例子中,从根节点往下数,a的编码就是000,b的编码就是001,c的编码就是10,d的编码就是01,e的编码就是11。

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

计算机编码问题总结——哈夫曼编码相关推荐

  1. 信息论霍夫曼编码c语言,霍夫曼编码

    <信息论与编码>课程实验报告 姓 名 学 号 单 位 专 业 2014 年 12 月 4 日 实验一 一.实验目的 1.理解信源编码的意义: 2.掌握霍夫曼编码的方法及计算机实现: 二.实 ...

  2. 可逼近信道容量编码技术之霍夫曼编码的实现

    可逼近信道容量编码技术之霍夫曼编码的实现 简介 在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视.哈夫曼编码正是一种应用广泛且非常有效 ...

  3. labview霍夫曼编码_为什么霍夫曼编码好?

    7 个答案: 答案 0 :(得分:3) 如果为最常用使用的符号指定较少的数字或位或较短的代码字词,则可以节省大量存储空间. 假设您要为英文字母分配26个唯一代码,并希望根据这些代码存储英文小说(仅限字 ...

  4. 创建霍夫曼树,霍夫曼编码以及使用霍夫曼编码压缩文件

    那么,什么是霍夫曼树(赫夫曼树)呢? 给定n个权值(权值就是每个节点里面存放的数据,但是根据业务需求不同,存放的数据类型有些差别)作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样 ...

  5. 霍夫曼编码实验matlab,哈夫曼编码 MATLAB程序

    clc clear fid=fopen( 'C:\Users\yichao\Desktop\新建文本文档.txt');%打开 txt 文件 [zimu]=fscanf(fid, '%c'); %读取二 ...

  6. 信息论霍夫曼编码c语言,霍夫曼编码C语言

    编译成功 /* Note:Your choice is C IDE */ #include #include #define N 15 #define M 2*N-1 typedef struct { ...

  7. 哈夫曼编码c语言论文,哈夫曼编码的实现及应用论文.doc

    哈夫曼编码的实现及应用论文 毕 业 设 计(论文) 题目 哈夫曼编码的实现 及应用 二级学院 数学与统计学院 专 业 信息与计算科学 班 级 学生姓名 张泽欣 学号 指导教师 职称 时 间 目录 摘要 ...

  8. 树:哈夫曼树和哈夫曼编码的详细介绍以及代码实现

    闲扯前言 哈夫曼编码的代码实现对于初学数据结构的同学可能会有些困难,没有必要灰心,其实没啥,学习就犹如攀登一座又一座的山峰,每当我们攻克一个难点后,回首来看,也不过如此嘛.我们要做的就是不断的去攀越学 ...

  9. 【Java数据结构与算法】第十二章 哈夫曼树和哈夫曼编码

    第十二章 哈夫曼树和哈夫曼编码 文章目录 第十二章 哈夫曼树和哈夫曼编码 一.哈夫曼树 1.基本术语 2.构建思路 3.代码实现 三.哈夫曼编码 1.引入 2.介绍 3.代码实现哈夫曼编码综合案例 一 ...

最新文章

  1. 2434: [Noi2011]阿狸的打字机
  2. php 设置curl不超时时间,curl命令的超时时间
  3. ASP.NET MVC下使用AngularJs语言(三):ng-options
  4. 使用Java成功生成代码的7个技巧
  5. flume 中的 hdfs sink round 和roll
  6. java parseexception_Java ParseException类代码示例
  7. 基于C#的AE+IDL二次桌面端程序开发
  8. MySQL笔记(五)索引 index
  9. java pcm16位_Java – 将16位带符号的pcm音频数据数组转换为双数组
  10. 50道编程小题目之【质数的个数】
  11. 基于情感词典的网络文本情感倾向分类模型
  12. 显控触摸屏与STC51单片机modbus通讯程序,包含触摸屏程序与c51代码
  13. 二元最佳前缀码_贪心-最优前缀码
  14. select标签 selected 选中状态动态查询
  15. 不能显示隐藏文件解决方法
  16. 恢复训练记录20210809
  17. 什么是固态硬盘?它有什么好处?
  18. vue引入echarts-liquidfill水滴图并批量动态加载
  19. 在计算机桌面上的回收站作用是,计算机桌面回收站的设置(回收站的概念及设置、使用说明)...
  20. php 支持多少位的私钥,php私钥

热门文章

  1. 【长期有效】招聘-java高级开发工程师
  2. 互联网环境下决策支持系统的发展变迁
  3. Linux下安装无线网卡驱动
  4. 高分辨率目标检测——(转载)【python】小目标检测中对一幅高分辨率图分块且改变目标bounding box的坐标
  5. 学Python好还是学Java好?学哪个更好就业?
  6. spring boot 超市进销存系统源码
  7. 如何解决EDIUS总是意外停止工作问题
  8. Tomcat不自动解压war包
  9. 计算机基础原理习题,《计算机基础教学资料》第1章计算机基础原理习题.doc
  10. the mesh android,painlessMesh | F-Droid - Free and Open Source Android App Repository