• 最优二叉树(哈夫曼树)


    预备知识:

      路径:从树中一个结点到另一个结点之间的通路,路径上的分支数目成为路径长度;

        树的路径长度:从树根到每一个叶子之间的路径长度之和;

      结点的带权路径长度:从该结点到树根之间的路径长度与该结点权值的乘积;

      树的带权路径长度:所有叶子结点的带权路径长度之和;

      结构相同的任意两颗二叉树,由于他们的叶子结点权值可能不同,所以他们的带权路径长度也会不同;哈夫曼树是指带权路径长度最小的二叉树;

    构造哈夫曼树的方法:

      假设有一组权值{5,29,7,8,14,23,3,11},下面我们将利用这组权值演示构造哈夫曼树的过程。

      第一步:以这8个权值座位根节点的权值构造具有8棵树的森林;

      

      第二步:从中选择两个根的权值最小的树3,5座位左右子树构成一棵新树,新树根节点的权值为3+5,并将这两棵树从森林中删除,并将新树添加进去;

      第三步:重复第二步过程,直到森林中只有一棵树为止,此处选择7,8;

      第四步:

      第五步:

      第六步:

      第七步:

    哈夫曼编码:

    哈夫曼树中只存在叶子节点和度为2的结点。叶子节点的个数=度为2的节点数+1。

  • 相关阅读:
    设计模式-抽象工厂模式
    设计模式-工厂方法模式
    设计模式-简单工厂模式
    设计模式-代理模式
    Retrofit原理学习
    Google Flutter的学习与使用
    Robolectric结合Android Studio的使用
    Android中app的启动步骤
    汽车系统实现--增加数据和删除数据
    vue--实现跑马灯效果
  • 原文地址:https://www.cnblogs.com/ImaY/p/4309863.html
Copyright © 2020-2023  润新知