python哈夫曼树压缩_哈夫曼树及python实现

最近在看《tensorflow实战》中关于RNN一节,里面关于word2vec中涉及到了哈夫曼树,因此在查看了很多博客(文末)介绍后,按自己的理解对概念进行了整理(拼凑了下TXT..),最后自己用python实现Haffuman树的构建及编码。

哈夫曼(huffman)树

基本概念

路径和路径长度:树中一个结点到另一个结点之间的分支构成这两个结点之间的路径;路径上的分枝数目称作路径长度,它等于路径上的结点数减1.

结点的权和带权路径长度:在许多应用中,常常将树中的结点赋予一个有着某种意义的实数,我们称此实数为该结点的权;结点的带权路径长度规定为从树根结点到该结点之间的路径长度与该结点上权的乘积.

树的带权路径长度:为树中所有叶子结点的带权路径长度之和,公式为:

WPL=∑i=1nwili W P L = ∑ i = 1 n w i l i

其中,n表示叶子结点的数目,wi和li分别表示叶子结点ki的权值和树根结点到ki w i 和 l i 分 别 表 示 叶 子 结 点 k i 的 权 值 和 树 根 结 点 到 k i之间的路径长度。

如下图中树的带权路径长度 WPL = 9 x 2 + 12 x 2 + 15 x 2 + 6 x 3 + 3 x 4 + 5 x 4 = 122

哈夫曼树:哈夫曼树又称最优二叉树。它是 n 个带权叶子结点构成的所有二叉树中,带权路径长度 WPL 最小的二叉树。如下图为一哈夫曼树示意图。

你可能感兴趣的:(python哈夫曼树压缩)