哈夫曼编码

一、哈夫曼编号:

又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。是一种高效的编码方式,在信息存储和传输过程中用于对信息进行压缩。

把人类能看懂的各种信息,转换成计算机能够识别的二进制形式,被称为编码。
编码的方式可以有很多种,我们大家最熟悉的编码方式就属ASCII码了。
在ASCII码当中,把每一个字符表示成特定的8位二进制数,比如:
在这里插入图片描述
显然,ASCII码是一种等长编码,也就是任何字符的编码长度都相等。

等长编码
优点:因为每个字符对应的二进制编码长度相等,容易设计,也很方便读写。
缺点:计算机的存储空间以及网络传输的宽带是有限的,等长编码最大的缺点就是编码结果太长,会占用过多的资源。

为什么这么说呢?让我们来看一个例子:

假如一段信息当中,只有A,B,C,D,E,F这6个字符,如果使用等长编码,我们可以把每一个字符都设计成长度为3的二进制编码:
在这里插入图片描述
如此一来,给定一段信息 “ABEFCDAED”,就可以编码成二进制的 “000 001 100 101 010 011 000 100 011”,编码总长度是27。

这样的编码方式是最优的设计吗?如果我们让不同的字符对应不同长度的编码,结果会怎样呢?比如:
在这里插入图片描述
如此一来,给定的信息 “ABEFCDAED”,就可以编码成二进制的 “0 00 10 11 01 1 0 10 1”,编码的总长度只有14。

这样的编码设计可一使总长度大大缩短,但是这样设计会带来歧义,如A的编码是0,B的编码是00,那么000既可能代表AB也可能代表AAA,所有这种不定长的代码是不能随意设计的。

问题:什么样的前缀编码能使得电文总长最短?

      ——哈夫曼编码

方法:

1、统计字符集中每个字符在电文中出现的平均概率(概率越大,要求编码越短)。
2、利用哈夫曼树的特点:权越大的叶子离根越近;将每个字符的概率值作为权值,构造哈夫曼树。则概率越大的结点,路径越短。
3、在哈夫曼树的每个分支上标上0或1:
 结点的左分支标0,右分支标1
 把从根到每个叶子的路径上的标号连接起来,作为该叶子代表的字符编码

两个问题:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值