带你入门哈夫曼编码和哈夫曼树

注:(1)本文章适合阅读人群:上过高中数学,有基本计算机基础;(2)本文只是简单的入门篇,若想深入请查看专业书籍

一. 编码

1.什么是编码?

首先我们得区分“信息”和“信息载体”这两个概念,如“hello”这个单词,在自然语言中是一种代表问好的信息,而“hello”这五个字母构成单词就是一种信息载体,当然“你好”也是该信息的另一种信息载体。

编码,其实就是自定义一种信息载体的过程。在计算机中,计算机只认识0和1,为了让计算机来存储传播运行人类的信息,就需要用01这两个基本单元来构造信息载体,这个过程就是计算机中的编码;

如:"hello" 的ascII编码就是“0x68 0x65 0x6c 0x6c 0x6f” 

2 编码的基本分类

编码可以简单的分为“定长编码”和“变长编码”,定长编码就是每一个信息符号都对应一个相同长度的bit串的编码方式(如上面例子中的ascii编码就是8bit表示一个字符,以及usc2编码等等),而bit串长度不固定就是变长编码了(如utf8编码,哈夫曼编码等等);

3.为什么使用变长编码

变长编码能够用更少的存储空间来存储更多的信息,从而避免资源浪费;
一般用平均比特率(Σ码长×出现概率) 来描述编码的质量(直接影响压缩率)

4.变长编码的要求

在我们日常生活中,要阅读文章,首先得学会断句和断词,而断句和断词就要求文字有一定的规律和要求。
同样,在我们将一个大的数据编码存储后,读取时也应该能区分出每一个编码,最简单方法就是编码时,不同的编码不能是相互的前缀(前缀编码的概念)。


二.哈夫曼编码

哈夫曼编码是变长编码,有被称为最佳编码,其做到了平均比特率很低,实现的简单思路就是“越大概率出现的信息块用最少的bit来表示

具体实现如下:

假设对一篇文章进行统计后,发现文章只有n个单词,按概率从大到小排序后,用W(n)来表示单词序列(单个元素用w(n)表示),而单词出现的概率序列用P(n)(单个元素用p(n)表示)来表示概率序列;
1.构造哈夫曼树
(1)以w(n)和w(n-1)作为左右子节点,再添加一个父节点w1(n-1),而p1(n-1)=p(n)+p(n-1),形成一个树;
(2)把w(0)...w(n-2),w1(n-1)作为新序列,而p(0)....p(n-2),p1(n-1)作为新的概率数列;
(3)把(2)得出的序列按概率重排,得到新的序列W'(n-1)和概率序列P'(n-1);
(4)重复1-3步,直到新序列只有一个元素为止;
2.编码
(1)将树枝编码1|02)沿着路径就能得到每个节点的编码

例子:假如A,B,C,D出现的概率分别为:0.55,0.35,0.08,0.02,则如下图所示狗仔哈夫曼树以及对树枝编码:
这里写图片描述

那么 ABCD的编码分别为:1 01 001 000

那么,哈夫曼编码和哈夫曼树的基本概念已经讲完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值