哈夫曼算法的理解及原理分析,算法实现,构造哈夫曼树的算法

哈夫曼算法的理解及原理分析,算法实现,构造哈夫曼树的算法,第1张

  哈夫曼树的介绍

  Huffman Tree,中文名是哈夫曼树或霍夫曼树,它是最优二叉树。

  定义:给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小,则这棵树被称为哈夫曼树。 这个定义里面涉及到了几个陌生的概念,下面就是一颗哈夫曼树,我们来看图解答

  哈夫曼算法的理解及原理分析,算法实现,构造哈夫曼树的算法,哈夫曼算法的理解及原理分析,构造哈夫曼树的算法,第2张

  (1) 路径和路径长度

  定义:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。

  例子:100和80的路径长度是1,50和30的路径长度是2,20和10的路径长度是3。

  (2) 结点的权及带权路径长度

  定义:若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。

  例子:节点20的路径长度是3,它的带权路径长度= 路径长度 * 权 = 3 * 20 = 60。

  (3) 树的带权路径长度

  定义:树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL。

  例子:示例中,树的WPL= 1*100 + 2*50 + 3*20 + 3*10 = 100 + 100 + 60 + 30 = 290。

  比较下面两棵树

  哈夫曼算法的理解及原理分析,算法实现,构造哈夫曼树的算法,哈夫曼算法的理解及原理分析,构造哈夫曼树的算法,第3张

  上面的两棵树都是以{10, 20, 50, 100}为叶子节点的树。

  左边的树WPL=2*10 + 2*20 + 2*50 + 2*100 = 360

  右边的树WPL=290

  左边的树WPL 》 右边的树的WPL。你也可以计算除上面两种示例之外的情况,但实际上右边的树就是{10,20,50,100}对应的哈夫曼树。至此,应该对哈夫曼树的概念有了一定的了解了,下面看看如何去构造一棵哈夫曼树。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2540582.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-05
下一篇 2022-08-05

发表评论

登录后才能评论

评论列表(0条)

保存