zoukankan      html  css  js  c++  java
  • 树-哈夫曼树(Huffman Tree)

    概述

    哈夫曼树:树的带权路径长度达到最小。

    构造规则

    1. 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
    2. 在森林中选出根结点的权值最小的两棵树进行合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
    3. 从森林中删除选取的两棵树,并将新树加入森林;
    4. 重复(02)、(03)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。

    基本操作

    定义

    1 权值

    2 左孩子

    3 右孩子

    4 父节点

    构造哈夫曼树(使用最小堆)

    1 构造最小堆;

    2 进入for循环:

    (01) 首先,将最小堆中的最小节点拷贝一份并赋值给left,然后重塑最小堆(将最小节点和后面的节点交换位置,接着将"交换位置后的最小节点"之前的全部元素重新构造成最小堆);

    (02) 接着,再将最小堆中的最小节点拷贝一份并将其赋值right,然后再次重塑最小堆;

    (03) 然后,新建节点parent,并将它作为left和right的父节点;

    (04) 接着,将parent的数据复制给最小堆中的指定节点。

  • 相关阅读:
    面向过程编程
    生成器
    迭代器
    装饰器
    函数对象与闭包
    名称空间和作用域
    Django中的as_view方法源码分析
    DRF3序列化反序列化
    DRF4级联与外键字段
    django--BBS项目,后端业务逻辑整理
  • 原文地址:https://www.cnblogs.com/lucas-hsueh/p/3736772.html
Copyright © 2011-2022 走看看