• Data Structure 之 最优二叉树


          给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

          最优二叉树的总结点数为 2n - 1

    1、路径和路径长度
          在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长
    为L-1。
    2、结点的权及带权路径长度
          若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。
    3、树的带权路径长度
          树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL。

    构造最优二叉树的哈夫曼算法如下:
    (1)根据给定的n个权值{wi,w2,…,wn},构成n棵二叉树的集合T2,…, Tn},其中每棵二叉树乃中只有一个带权为%的根结点,其左右子树均空。
    (2)在F中选取两棵权值最小的二叉树作为左、右子树构造一棵新的二叉树,置新 构造二叉树的根结点的权值为其左、右子树根结点的权值之和。
    (3)从F中删除这两棵树,同时将新得到的二叉树加入到F中。
    (4)重复(2)、(3),直到F中只含一棵树时为止。这棵树便是最优二叉树(哈夫曼树)。

    例如给定权值集合{8,5,2,6}根据题中给出的权值集合,构造哈夫曼树的过程如下图所示。

      

  • 相关阅读:
    ASP.NET零碎
    My97DatePicker 和转换 数据库中日期(/Date(1351699200000)/) 的格式
    生成验证码
    自己封装的AJAX (带JSON)
    WebForm
    配置进程外Session
    使用Xcode和Instruments调试解决iOS内存泄露
    IOS block 教程<转>
    iOS app支付宝接口调用的一点总结(补充支付宝SDK&Demo下载地址)
    支付宝在ios应用上的开发[转]
  • 原文地址:https://www.cnblogs.com/xinaixia/p/4424746.html
Copyright © 2020-2023  润新知