【数据结构-N】哈夫曼树带权路径计算

那个闪闪发光的人
会在某一天的雨后,不经意地出现在你的迷茫路口。

目录:

  • 哈夫曼树的构建
  • 带权路径长度计算

>>构建

哈夫曼树,又称最优二叉树,是一类带权路径长度最短的树。

构建哈夫曼树的算法如下:

  1. 对给定的n个权值{W1,W2,W3,...Wi,...,Wn}构成n个二叉树的初始集合F={T1,T2,T3,...Ti,...Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,他的左右子树均为空;
  2. 从F中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和;
  3. 从F中删除这两棵树,并把这棵树新的二叉树同样以升序排列加入到集合F中;
  4. 重复2.、3.直到集合F中只有一棵二叉树为止。

假设给定a,b,c,d,e,f的权值分别为{15,6,3,9,12,5}

【数据结构-N】哈夫曼树带权路径计算_第1张图片

 构造哈夫曼树的过程如下:

  1. 首先将权值进行排序即:3,5,6,9,12,15;
  2. 选取最小的两个权值3和5构建子树;3+5=8作为3和5的父节点(左子节点要小于右子节点);
  3. 6作为左子节点,8作为右子节点,将6+8=14作为其父节点;
  4. 接下来是9和12,这两个数都小于14,故将9,12作为子节点,9+12=21作为其父节点构建子树;
  5. 15要大于14,故将14作为左节点,15作为右节点,将14+15=29作为其父节点;
  6. 最后将上述两个子树的父节点21和29分别作为左节点和右节点。将21+29=50作为其父节点。这时,一棵哈夫曼树就构建好了。

>>带权路径的计算

  • a,b,f(对应的权值:9,12,15)三个元素距父节点的距离都为2;
  • c(对应的权值:6)元素距父节点的距离为3;
  • d,e(对应的权值:3,5)元素距父节点的距离为4;
  • 所以这棵哈夫曼树的WPL= (9 + 12 + 15) * 2 + 6 * 3 + (3 + 5) * 4=122.

 

 

 

 

~bye~

 

你可能感兴趣的:(数据结构)