跳过正文

数据结构与算法-5-哈夫曼树

·85 字· loading · loading ·
Masterlong
作者
Masterlong
熬夜,但是世界之夜
目录
数据结构与算法 - 这篇文章属于一个选集。
§ 7: 本文

哈夫曼树
#

Lead in

对于一段报文CAST CAST SAT AT A TASA

usu, consider to encode as A 00 T 10 C 01 S 11

{C,A,S,T} as each ch‘s frequency {2,7,4,5}

to encode them as A 0 T 10 C 110 S 111

len = 7x1+5x2+(2+4)*x3 = 35 < 18 * 2

review

加权路径长度

  • 叶子的深度*权值

树的外部路径权值/加权路径长度

  • 所有叶子的~之和

Def
#

给定

$$n_0$$

个叶子带权值叶子结点的二叉树,存在一棵 加权路径长度最小 的树,称作最优树,也即哈夫曼树

  • 叶结点的权值越小,离根越远
  • 越大,越近
  • 是满二叉树FBT
  • 是必要条件

构造:

  • 根据给定的n个符号权值对{$s_i,w_i$},造n棵二叉树的集合F={$T_1,T_2,...,T_n$},其中每棵二叉树中均只含一个符号权值对为($s_i,w_i$)的根节点,其左右子树均为空树
  • 在F中选取根结点权值最小的两棵二叉树,分别作为**左(最小)右(次小)**子树构造新树,置该树根结点权值为左右子树权值之和。
  • 从F中删除这两棵树,加入刚生成的新树。
  • Rep until one tree left

哈夫曼编码
#

利用哈夫曼树可以构造一种不等长的二进制编码,使得它是一种最优前缀编码,即所传电文的总长度最短。

前缀编码:任何一个字符的编码都不是同一字符集中另一个字符的编码的前缀。

  • 将每个字符的频度作为权值,构造哈夫曼树
  • 将每个内部结点左右两条边赋上0、1的权值
  • 将每个叶结点从根开始路径上的权值按顺序排列,即得该结点对应的字符编码码字

编码

  • 求码字
  • 把字符串->比特流
数据结构与算法 - 这篇文章属于一个选集。
§ 7: 本文

相关文章

数据结构与算法-6-堆
·426 字· loading · loading
数据结构与算法-4-树
·1738 字· loading · loading
数据结构与算法-4-树-作业1
·80 字· loading · loading