《数据结构》-哈夫曼编码的基本概念(四)

哈夫曼树的基本概念
哈夫曼树的构造算法
哈夫曼树的构造示例
哈夫曼编码的基本概念
哈夫曼编码的程序实现

引言

假设要传送的字符为:ABACCDA

ASCII 码

可以使用 ASCII 编码每个字符占 8 个字节来进行编码

A:00001010
B:...

占用内存较多,这里不展开讨论

前缀码

若编码为:

A - 0
B - 00
C - 1
D - 01

那么就可以用 000011010 来表示,但是 0000 表示什么含义呢AAAA/ABA/BB 都是有可能的,这里就重码

关键:要设计长度不等的编码,则必须使任一字符的编码都不是另一个字符的编码的前缀,这种编码称为前缀编码

哈夫曼编码

哈夫曼编码能够保证是前缀编码:因为没有一篇树叶是另一片树叶的祖先,所以每个叶结点的编码就不可能是其它叶结点编码的前缀

哈夫曼编码能够保证字符编码总长最短:因为哈夫曼树的带权路径长度最短,故字符编码的总长最短

这里就是哈夫曼编码的两个性质

  • 哈夫曼编码是前缀码
  • 哈夫曼编码是最优前缀码

哈夫曼编码实现的方法

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

哈夫曼编码示例

示例一

假设要传输的字符集 Data = {C A S T ;}
字符出现的频率为 Weight = {2 4 2 3 3}

构造哈夫曼树

在这里插入图片描述

求哈夫曼编码

从上面的哈夫曼树中求出对应的哈夫曼编码如下

T 00
; 01
A 10
C 110
S 111

例如电文是:CAS;CAT;SAT;AT
则对应的哈夫曼编码使:11010111011101000011111000011000

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值