zoukankan      html  css  js  c++  java
  • 哈夫曼树

    给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
    哈弗曼树的基本概念思路: 五个叶子的权值是
    9 1 3 5 6 (1) 将权值从小到大排序后是 1 3 5 6 9 (这是有序序列) (2) 每次提取最小的两个节点,取节点1和节点3,组成新节点N4,其权值=1+3=4, 节点1的数值较小,作为左分支,节点3就作为右分支. (3) 将新节点N4放入有序序列,保持从小到大排序: N4 5 6 9 (节点1和3已经提取掉) (4) 重复步骤(2),提取最小的两个节点,N4与节点5组成新节点N9,其权值=4+5, N4的数值较小,作为左分支,节点5就作为右分支. (5) 将新节点N9放入有序序列,保持从小到大排序: 6 9 N9 (注意,要将新节点N9排在后,如果顺序是 6 N9 9 则会有不同的结果) (6) 重复步骤(2),完成剩下的节点,最后,得到"哈夫曼树": N24 / N9 N15 / / N4 5 6 9 / 1 3 根节点N24到节点9的路径长度是2,节点9的带权路径长度是9*2 根节点N24到节点6的路径长度是2,节点6的带权路径长度是6*2 如此类推,可以得出其它节点的带权路径长度. 所以,哈夫曼树的带权路径长度WPL等于 9*2 + 6*2 + 5*2 + 3*3 + 1*3 = 52 哈夫曼编码: 规定哈夫曼树的左分支代表0,右分支代表1. 从根节点N24到节点9,先后经历两次右分支,节点9的编码就是11 从根节点N24到节点6,先经历右分支,再经历左分支,节点6的编码就是10 从根节点N24到节点5,先经历左分支,再经历右分支,节点5的编码就是01 如此类推,可以得出所有的节点的"哈夫曼编码": 权值9: 11 权值6: 10 权值5: 01 权值3: 001 权值1: 000

     视频https://www.bilibili.com/video/av19665344/?p=93

  • 相关阅读:
    js 操作文件
    Thymeleaf在js中使用表达式
    JUnit5常用注解
    .Net开发步骤
    springboot自定义 HandlerMapping
    期末加分+总结
    SAP ABAP 性能优化技巧 – 修改一组纪录
    SAP ABAP 性能优化技巧 – 视图取代基本表
    Sql Server 日期格式化函数 (转)
    SAP ABAP 性能优化技巧 — 使用二分查找(Binary Search)选项
  • 原文地址:https://www.cnblogs.com/zoulingjin/p/8676700.html
Copyright © 2011-2022 走看看