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()
  • 相关阅读:
    Flink-Record
    Linux Performance Observaibilty Tools
    DEC-UPDATE
    经济与选择(持续更新)
    GIS操作汇集(更新)
    JULY-Record-update
    GO (待更新)
    Python打包分发工具setuptools简介(转)
    HashMap源码分析
    nginx配置负载均衡
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9424009.html
Copyright © 2011-2022 走看看