哈夫曼编码

哈夫曼编码:

哈夫曼编码常用于通讯中压缩数据

每一字母在文中出现的次数就是一个结点的权值

然后按照权值生成最小二叉树(哈夫曼树)  确保字母节点都是叶节点

然后用哈夫曼树查询每个字母的编码

构造哈夫曼编码:

构造哈夫曼编码需要用到哈夫曼树

哈夫曼树:

我们现在有 一段讯息 "a b h c d c c b h d" 只考虑字母,那么:

a                            1

b                            2

c                            3

d                            2

h                            2

哈夫曼编码旨在使用的多的编码长度更小,而使用少的就可以长一些  所以我们从小的开始  每次取两个最小的合并

取ab合并为一个权值为3的新节点删除ab  现在的节点为

重复上述步骤会得到:


我们规定向左为0向右为1

所以 a->000 b->001 c->01 d->10 h->11

在这里有一个性质

那就是传输的总长度就是各个新节点的和

a       b      h      c      d      c      c      b      h      d

000   001   11    01    10    01     01    001   11    10

3    + 3  +  2 +   2 +   2 +   2  +   2  +  3  +  2  +   2 = 23

而各个新节点  10+6+4+3=23



构建哈夫曼树可以用优先队列实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值