哈夫曼编码

哈夫曼编码:

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

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

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

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

构造哈夫曼编码:

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

哈夫曼树:

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

a                            1

b                            2

c                            3

d                            2

h                            2

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

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

哈夫曼编码_第1张图片

重复上述步骤会得到:

哈夫曼编码_第2张图片


我们规定向左为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



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

你可能感兴趣的:(数据结构,编码,ACM)