哈夫曼编码

哈夫曼编码是一种用于数据压缩的前缀编码方法,通过构造哈夫曼树实现最优化编码,使得频繁出现的字符编码更短,从而节省存储空间。本文介绍了哈夫曼编码的概念、原理及其与最优前缀编码的关系,并提供了测试数据展示编码过程。
摘要由CSDN通过智能技术生成

要谈哈夫曼编码,先简单介绍一下编码的概念:对现实生活中非二进制码信息的二进制表示,通俗一点讲就是将生活中的各种信息用机器语言也即二进制语言来表示,那么对于每一个信息,我们就需要赋予它一个二进制码,当然对于不同的信息赋予相同位数的不同二进制代码,这样做可以,比如说:

有a,b,c,d四个数字,那么我们需要用二个二进制码来表示,因为n个二进制码可以唯一标识2^n种,那么相应的我们可以分别用00,01,10,11来对字母a,b,c,d进行唯一标识,这样做在某种 程度上其实很浪费空间,虽然很有效,因为他确保了编码与信息的一一对应关系,而且在解码的时候也不存在二义性。但是我们有更有效的方式来减少二进制编码数量,也即变码的概念,与定长编码最大的区别就是它的编码长度是可变的,这样在很大程度上增加了编码的灵活性,也更节省空间,但它也存在根本的问题:

例如:加入我们用0,01,10,11来分别标识a,b,c,d,这样编码上是没有问题的,因为仍然是一一对应关系,但是解码的时候就会产生二义性了,例如在计算机中就存放有这样的一段二进制代码:0 0 1 10 11,本来意图是想解码出a,b,c,d,但计算机执行时就有问题,因为0对应a,或者是01对应b,那么计算机运行时就不知道是该直接译成a.还是与后面的1一起组成01译成b,这样显然是不行的,那么如何解决呢?就又引出了前缀编码的概念,前缀编码的定义:对于任何的编码,都不存在某一个编码是另一个编码的前缀,比如0,01就不是前缀编码了(感觉很奇怪,对吧!应该写成非前缀编码的,但谁叫它的发明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值