zoukankan      html  css  js  c++  java
  • Python 数据结构与算法 —— 哈弗曼树

    1. 从扩充二叉树到哈弗曼树

    扩充二叉树:对二叉树 T,加入足够多的新叶节点(而不是任意),使 T原有结点都变成度数为 2 的分支节点,得到的二叉树称为 T 的扩充二叉树。

    对于扩充二叉树而言,

    • 扩充二叉树新增的结点称为其外部结点(external node);
    • 原树 T 的结点称为内部结点(internal node);
    • 规定空树的扩充二叉树仍为空树;

    2. 哈弗曼树的实现

    树节点的定义:

    class BinTNode:
        def __init__(self, data, left, right):
            self.data = data
            self.left = left
            self.right = right

    哈弗曼树节点的定义:

    class HTNode(BinTNode):
        def __lt__(self, other):
            return self.data < other.data

    用小顶堆实现哈弗曼树,极为简洁:

    from Queue import PriorityQueue
    def HuffmanTree(weights):
        trees = PriorityQueue()
        map(trees.put, weights)
        while trees.qsize() > 1:
            trees.put(trees.get() + trees.get())
        trees.get()
  • 相关阅读:
    C#:反射
    静态和非静态类
    数据的存入取出(注册机方式)
    退出unity运行
    网络流基础
    欧拉回路
    博弈论问题
    洛谷P5304 [GXOI/GZOI2019] 旅行者
    [ZJOI2006]物流运输
    POJ3278 Catch that cow
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9424010.html
Copyright © 2011-2022 走看看