【数据结构】哈夫曼编码和哈夫曼树


不积跬步,无以至千里;不积小流,无以成江海。要沉下心来,诗和远方的路费真的很贵!

哈夫曼编码和哈夫曼树

哈夫曼编码

概念

  • 又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种。
  • 依据字符出现概率来构造异字头的平均长度最短的码字,称之为最佳编码

目的

  • 根据使用频率来最大化的节省字符(编码)的存储空间
  • 用于加密解密

编码思想

核心思想:按照出现频率进行构造树,令出现频率大的节点靠近根节点。

  • 以五个字符(A,B,C,D,E)为例子,它们的频率分别是5,4,3,2,1
  1. 选取其中频率最小的两个节点,构造二叉树,它们的父结点频率是它们的频率和。
    在这里插入图片描述

  2. 将父结点加入原先的集合中,集合变成{5,4,3,3},再选取其中的最小两个。
    在这里插入图片描述

  3. 第三次变为{5,4,6},继续选取最小两个。
    在这里插入图片描述

  4. 第四次变成{9,6},只剩下两个了,连起来当作左右子树即可。
    在这里插入图片描述

  • 到A的编码是11,B的编码是10,C的编码是00,D的编码是011,E的编码是010。
  • 所以可以看出,频率大的节点,编码越短,这就是最优编码之称的来历。
  • 带权路径值 = 每个叶子节点的值 * 节点所在的层数(根节点为0)之和。
  • 所以频率越大的节点距离根越近,表示该方法构造的树的带权路径值最短,即为最优二叉树。

哈夫曼树

概念

  • 最优二叉树:带权路径长度值最小的树。
  • 效率最高判别树:用于描述分类过程的二叉树。
  • 又称赫夫曼树霍夫曼树

目的

  • 用哈夫曼树设计总长最短的二进制前缀编码,即哈夫曼编码。

注意点

  • 满二叉树不一定是哈夫曼树。
  • 哈夫曼树中权越大的叶子离根越近 (很好理解,WPL最小的二叉树)
  • 具有相同带权结点的哈夫曼树不唯一。
  • 哈夫曼树的结点的度数为02, 没有度为 1的结点。
  • 包含n 个叶子结点的哈夫曼树中共有 2n – 1 个结点。
  • 包含 n 棵树的森林要经过 n–1 次合并才能形成哈夫曼树,共产生 n–1 个新结点。

猜你喜欢

转载自blog.csdn.net/qq_46546793/article/details/122539171