如何建立哈夫曼编码树

哈夫曼编码的运用场景比较多,而且适用于数据压缩,且压缩率最高可达90%,可见其重要性。哈夫曼编码是基于0,1串表示的,且哈夫曼编码是变长码,即它的长度不是固定的,而是可变的。那么我们怎么建立哈夫曼编码树呢?

给出一组数据:{45,13,12,16,9,5}

先初始化,比如说{45,13,12,16,9,5},共6个数;

其中n=5,n为下标最大值;由公式[n-2]/2,得出1.5,向上取整为2(向下取整:1.5取1,去掉小数部分,仅保留整数部分;而向上取整:去掉小数部分,整数部分+1;不同于四舍五入);

值为2,指向12,即调整12及其子节点,12跟它的子节点5比较,12比5大,互换两者位置,结果为{45,13,5,16,9,12};

然后,指针左移,值为1,指向13,即调整13及其子节点,13跟它的子节点16和9比较,其中9比俩者都小,因此互换13和9,得出{45,9,5,16,13,12};

指针继续左移,值为0,指向45,即调整45及其子节点,其中5比9或45都小,因此5和45互换,得出{5,9,45,16,9,13,12};

45比12大,继续调整两者位置,最终为{5,9,12,16,13,45};

可以知道,堆顶元素一定是最小的。

将堆顶元素5取出,然后将最后一个子节点-45移动到堆顶,

 

继续按照上面的方法来进行排序,得出最终结果:

我们取出堆顶元素9,此时构建哈夫曼编码树:

 

 

然后又接着取出12,13,16,45;

最终构建的结果为:

 

 这个为算法构建过程,其实我们自己理解的话,不需要这么复杂的想法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值