哈夫曼树/哈夫曼编码

哈夫曼树也就是哈夫曼编码,它是由哈夫曼这个人想到的一种编码方式。

通常存储信息和发送消息在计算机上存储和传输的信息都是二进制,计算机只认识二进制的数,然后再通过某种方法转换为我们可以看到的信息,这种方法就是某种编码,通俗来讲就是密码本。

美国用的编码是ASCII码 中国用的是GBK编码,国际通用的编码就是Unicode编码,它们都是等长编码格式,也就是某个字符只占了2位比特而它必须来用这个特定的长度(其他位置用0表示)来表示这个字符,这样就非常浪费内存。

哈弗曼编码的特点就是变长编码格式,但是一般的变长编码格式解码人无法解码总会产生错误,但是哈夫曼编码解决了这个问题。

用哈夫曼树来产生哈夫曼编码来解决变长编码解码会产生错误的问题。

哈夫曼树的结构如下:

1.路径固定

2.权:也就是节点的值

3.带权路径长度:从根节点到该节点所经过路径的长度与该节点的权的乘积

4.树带权路径长度(WPL):从根节点叶子节点所经过路径长度与该节点权的乘积之和

5.最小哈夫曼树:WPL最小的树,通常用它来产生哈夫曼编码

6.每个节点的左路径用0表示,右路径用1表示

示例:I LOVE YOU用哈夫曼树来表示和每个字符的哈夫曼编码?

 I LOVE YOU中空格出现了两次,O出现了两次所以空格和O的权是2,其他字符的权都是1,根据他们的权来构建最小哈夫曼树。

根据构建的最小哈夫曼树如下图:

每个字符编码如下:

 I:000

L:001

V:010

E:011

U:100

Y:101

空格:110

O:111

这个例子比较特殊,构建出的编码是等长的,但是从上图也可以看到根据路径的0和1可以精准的找到某个字符,这样就压缩了等长编码的格式,节约了内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sshm_666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值