数据结构:霍夫曼树与霍夫曼编码(Huffman Tree)
霍夫曼树与霍夫曼编码(Huffman Tree) 在这样的情况下,如果大多数人都是90分以上,那么大多数人需要进行4次判断才能有结果,造成时间的浪费。 【引申:判断的时候要把最常发生、最可能发生的情况放在前面】 —>如何根据节点不同的查找频率构造更有效的搜索树? 霍夫曼树的定义 带权路径长度(WPL) 设二叉树有n个叶子结点,每个叶子结点带有权值 w k w_k w k ,从根节点到每个叶子结点的长度为 I k I_k I k (这个 I k I_k I k 不是边的长度,而是从根节点到这个节点的边长+1,即根节点为1,往下数依次加一(假设边权为1)),则每个叶子结点的带权路径长度之和就是: W P L = ∑ k − 1 n w k I k WPL = \sum\limits_{k-1}^{n}w_kI_k W P L = k − 1 ∑ n w k I k 最优二叉树 或 霍夫曼树 WPL最小的二叉树。 霍夫曼树的构造 核心:每次把权值最小的两颗二叉树合并 合并后,即出现一颗新的树,该树的节点为两个子树的权值的和,把这个 和 去与其他的权值比较,再选出两个最小的合并,以此类推,知道最后只剩下两个节点(子树),将他们合并。 “选取两个最小的”:用** 最小堆 **实现 霍夫曼树的特点 1、没有度为1的节点。构造的时候始终是两两合并。 2