哈夫曼树原理及哈夫曼编码

(一) 哈夫曼树

  • 目的:找出存放一串字符所需的最少的二进制编码
  • 原理:
  • 统计出每种字符出现的频率!(也可以是概率)//权值
  • 选择最小的两个,其根节点值为这两个元素权值的和;将出现频率(权值)最小的放在根节点左侧,次小值放在根节点右侧;
  • 用权值和替代原来的两个元素的权值;接着重复第二步,直到所有元素都被放置好为止;

例题:

假如我有A,B,C,D,E五个字符,出现的频率(即权值)分别为5,4,3,2,1

  1. 那么我们第一步先取两个最小权值作为左右子树构造一个新树,即取1,2构成新树,其结点为1+2=3
    在这里插入图片描述
  2. 虚线为新生成的结点,第二步再把新生成的权值为3的结点放到剩下的集合中,所以集合变成{5,4,3,3}
    在这里插入图片描述
  3. 剩下的集合中: {5,4,6}
  4. 选择4和5, 则集合为{9,6}
  5. 最后为:
    在这里插入图片描述
    权值: (1+2)3 + 32+ (4+5)*2
    (二)哈夫曼编码
  • 利用哈夫曼树来编码,出现得越多的元素,他的编码越短 ,出现频率越少的元素,他的编码越长
  • 上面案例的编码如下所示:
    在这里插入图片描述
    所以各字符对应的编码为:A->11,B->10,C->00,D->011,E->010
    霍夫曼编码是一种无前缀编码。解码时不会混淆。其主要应用在数据压缩,加密解密等场合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值