香河住房与建设局网站,网络推广怎么做?,wordpress 4.0 wp-config.php,自己注册公司有什么弊端今天主要学习了哈夫曼树。
哈夫曼树
哈夫曼树是二叉树的一种#xff0c;它是一种WPL最优二叉树。
叶子结点#xff08;也称叶节点#xff09;#xff1a;指的是自己下面不再连接有节点的节点#xff08;即末端#xff09;#xff0c;称为叶子节点#xff08;又称为终…今天主要学习了哈夫曼树。
哈夫曼树
哈夫曼树是二叉树的一种它是一种WPL最优二叉树。
叶子结点也称叶节点指的是自己下面不再连接有节点的节点即末端称为叶子节点又称为终端结点。
WPL是二叉树的带权路径长度是指所有叶节点的路径长度乘以当前叶节点的权值之和打一个比方
下面有一个字符串我们以字母出现次数作为权值a所对应的权值4我们需要构造一个二叉树最优WPL的二叉树。 这是最优的哈夫曼树了你再也找不到一个比这更优的了那么它的WPL值为
1*31*32*23*24*224
还有一个更简洁的计算方法就是将图中的非叶结点值相加1147224.
存储元素的结点为2*n-1我们原来有5个结点最后变成了9个结点
这很巧妙了接下来讲解如何构建一个哈夫曼树。
在表中找俩个最小值作为结点的左右孩子 很明显是d e所代表的权值新结点的权值为俩孩子的权值之和即是2 我们需要更新权值的数组就是删除数组中c d的权值把新节点的权值写入数组 再继续找俩最小值是c代表的2和另外一个没名字的结点从下往上插入哦。 重复这些操作知道权值数组没有数值最后就会变成开篇讲的那样子。
构建哈夫曼树主要是为了满足哈夫曼编码。
哈夫曼编码是编码的一种它是用来压缩文本的主要压缩一段较长并且重复率较高的代码。
之所以那样子建立树是为了将出现次数多的字符放在前面出现次数少的字符放在后面保证访问率的快慢。 如上面所示将左边赋值为0右边为1我们可以发现一个特性叶节点所构成的值是不会有重复前缀的。当然末尾俩个端点是会有一样的前缀我们通常按照大小将其左右左边是较小的右边的较大的 继而会变成上面那样子我写的时候带了空格为了美观实际存储时不带的我们只需要根据哈夫曼树按顺序找第一次出现的叶节点的编码就可以凑成以上的字符串你可以自己试一试。
哈夫曼编码是不等长编码。在一段长的重复率较高的文章特别适用。