哈夫曼树以及哈夫曼编码

哈夫曼树以及哈夫曼编码 

  一、哈夫曼树

  1. 哈夫曼树的定义

   给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree),哈夫曼树是带权路径长度最短的树。权值较大的结点离根较近。

  说明:哈夫曼树是一种用于哈夫曼编码的工具结构。

  2. 哈夫曼树的构造过程 

  哈夫曼树的构造目标是:使带权路径长度(WPL)最小(贪心策略)

  即:WPL = ∑(叶子节点权值×路径长度)

  构造原则:每次选取当前权值最小的两个节点进行合并,直到只剩一棵树(贪心策略)。

  3. 哈夫曼树的特点 

  1)初始节点都在树的叶子节点上

  2)权值大的节点离根更近

  3)每个非叶子节点都有两个孩子(因为我们自下向上构造,两个孩子构成一个新树的根节点)

  4. 举例:假设有一组权值 5,29,7,8,14,23,3,11,请尝试构造哈夫曼树。

image

  计算权值:5*5+3*5+7*4+14*3+29*2+8*3+11*3+23*2 = 271

  注意:哈夫曼树不一定唯一。当构造过程中出现相同权值的节点时,可以有多种合法的合并顺序,因此可能得到不同的哈夫曼树和哈夫曼编码。但无论构造方式如何,其带权路径长度(WPL)都是最小且相同的。 

  二、哈夫曼编码

  1. 哈夫曼编码的定义

  哈夫曼编码是一种变长前缀编码(Prefix Code),具有无歧义特性;其编码长度与字符频率相关(高频短、低频长),并且在所有前缀编码中具有最优的平均编码长度,是一种高效的无损压缩编码方式。

  2. 编码规则

  在哈夫曼树中:左分支记为 0,右分支记为 1,从根到叶子的路径即为该字符编码。

  3. 举例:设有5个字符,根据其使用频率为其构造哈夫曼编码。以下编码方案中,选项 ( ) 是不可能的。

  A. {111,110,101,100,0}

  B. {0000,0001,001,01,1}

  C. {11,10,01,001,000}

  D. {11,10,011,010,000}

 选项:D000 这个编码上,有一个内部节点只有1个孩子节点,这个就不满足哈夫曼编码)

 

posted @ 2026-06-16 14:32  欢乐豆123  阅读(3)  评论(0)    收藏  举报