You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
obsidian-sync/日常学习/数据结构/哈夫曼树(最优二叉树).md

38 lines
1.7 KiB

用途:用于数据传输过程中,将信息转换为二进制后进行**编排**,可以在一定程度上减少信息传输的大小。
定义带权路径长度WPL最短的二叉树
### 一、基本概念
路径:从树中一个结点到另一个节点之间的分支构成这两个结点间的路径
路径长度:两结点间路径上的分支数
树的路径长度:从树根到每一个结点的路径长度之和
权:将树中结点赋给一个有某种含义的数值,则这个数值成为该结点的权
结点的带权路径长度:从根结点到该节点之间的路径长度与该节点的权的乘积
树的带权路径长度:树中所有叶子结点的带权路径长度之和。
树的带权路径长度越小可以认为性能越好
### 二、哈夫曼树的特点
+ 具有相同带权结点的哈夫曼树不唯一
+ 哈夫曼树中权值越大的叶子离根越近
![[微信截图_20221219105340.png]]
### 三、如何构造哈夫曼树
口诀:
1. 构造森林全是根
2. 选用两小造新树
3. 删除两小添新人
4. 重复2、3剩单根
![[微信截图_20221219113815.png]]
### 四、哈夫曼树的应用
#### 1. 设计一个既能节省空间、有没有重码的编码
1.统计字符集中每个字符在电文中出现的平均概率(概率越大、要求编码越短)
2.将每个字符的概率值作为权值,构造哈夫曼树。(利用哈夫曼树的特点:权越大的叶子离根越近;概率越大的结点,路径越短)
3.在哈夫曼树的每个左分支标0、右分支标1把从根到每个叶子结点路径上的标号连接起来作为该叶子代表的字符编码即哈夫曼编码。
![[微信截图_20221219121106.png]]