7.数据结构与算法--树(二叉树--赫夫曼树)

本文介绍了赫夫曼树的概念、重要性及其构造流程,包括如何创建赫夫曼树和构建赫夫曼码表,提供了编码和解码的思路,并给出了在VS2019环境下运行的代码示例。
摘要由CSDN通过智能技术生成

前言 (感谢小甲鱼数据结构与算法视频的指导!!

  • 有损压缩

对于一个图片而言:图片的每个像素各自都有一个颜色,如果把16个像素混成一个颜色,那么图片的大小就会变小,但是就不那么清晰了。这就是压缩编码

  • 无损压缩

赫夫曼编码 (知名的压缩编码方案)

例如:一个字节是8位,比如要发送'ABCD'这个4个字符,那么要用4个字节(32位)才能发出去。如果说发送方和接收方都约定用赫夫曼编码,那么可能只要发送8位就行可以了。

1.赫夫曼树(是Huffman编码前身)

1.1定义及介绍:

  • 由相同权值的一组叶子结点所构成的二叉树可能有不同的形态和不同的带权路径长度,具有最小带权

路径长度的二叉树称为赫夫曼(Haffman)树。也称最优二叉树,它是n个带权叶子节点构成的所有二

叉树中,带权路径长度最小的二叉树。

  • 赫夫曼树是带权路径长度最短的树,权值较大的节点就离根较近。
  •  

 

1.2几个重要的概念

  • 节点的权:二叉树中的每个叶子节点对应的一个实际意义的权重数据,这个数据称为节点的权
  • 节点的路径长度:从根节点到该节点的路径上的连接数
  • 树的路径长度:根节点到所有叶子节点路径长度之和
  • 节点的带权路径长度: 节点的路径长度节点权值乘积

  • 树的带权路径长度:WPL(Weight Path Length)是树中所有叶子节点的带权路径长度之和
  • WPL的值越小(权值越大的节点离根节点越近),说明构造出了的二叉树性能越优,最优的二叉树称为赫夫曼树

例如:求下面树的带路径长度 ?

由图可知: 节点A的权值为9,路径长度为1;节点C的权值为5,路径长度为2;

节点B的权值为4,路径长度为3;节点D的权值为2,路径长度为3;

WPL= 9*1 + 5*2 + 4*3 + 2*3 = 37 

 

2.赫夫曼树的构造流程

  1. 取出权值最小的2个节点,权值小的放左子树,权值大的放右子树。
  2. 模拟出一个节点n1,n1节点的权值是两个最小权值节点的权值之和,这个n1节点连接两个子节点
  3. 再取出权值最小的节点,与n1节点作比较,权值小的放左边,权值大的放右边

 

 

---取出最小的两个节点-->---模拟出一个节点n1--》---再取出权值最小的节点--》

--第2步---》 ---第3步---》-----》这样就构造了一个哈夫曼树

 

2.1赫夫曼树编写

huffmanTree

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值