当前位置: 首页 > article >正文

数据结构——5.5 树与二叉树的应用

5.5 树与二叉树的应用

在这里插入图片描述

  • 概念
  1. 结点的权:大小可以表示结点的重要性

  2. 结点的带权路径长度:从树的根到该结,的路径长度(经过的边数)与该结点权的乘积

  3. 树的带权路径长度:树中所有叶结点的带权路径长度之和(WPL)

    在这里插入图片描述

  4. 哈夫曼树(最优二叉树):在含有n个带权叶结点的二叉树中,其中带权路径长度(WPL) 最小的二叉树

  5. 编码方式

    1. 每个字符对应二进制长度分:

      1. 固定长度编码,每个字符对应相同长度的二进制编码

      2. 可变长度编码,允许不同字符用不同长度的二进制编码

    2. 按是否有歧义分:

      1. (解码无歧义)前缀编码:没有一个编码是另一个编码的前缀

      2. (解码有歧义)非前缀码

    3. 哈夫曼编码:利用构造哈夫曼树的方法得到哈夫曼编码,左边0,右边1

      在这里插入图片描述

  6. 并查集

    1. 如何查到一个元素到底属于哪一个集合?

      ·指定元案出发,一路向北,找到根节点

    2. 如何断两个元素否属于同一个集合?

      ·分别查到两个元素的根,判断根节点是否相同即可

    3. 如何把两个集合并为一个集合?

      ·让一棵树成为另一棵树的子树即可

    4. 采用双亲表示法存储并查集树的好处

      1. 容易向上溯源(易于查)

      2. 另一棵树的根指向目标树的根即可实现并(易于并)

  • 理解
  1. 哈夫曼树的构造

    在这里插入图片描述

  2. 并查集的实现

    1. 定义:有n个元素则定义大小为n的数组,根的值为-1,其他结点值为根节点的下标

    2. 查操作:往上溯源找到只为-1的根节点的下标(最坏复杂度O[n])

    3. 并操作:两个集合合并成一个,把其中一个集合的根的值改成另一个根节点的下标即可(复杂度O[1])

    4. 并操作的优化:尽可能降低并查集的高度

      1. 修改复杂度为O[1]的并操作,该方法使得构造的树高不超过log₂n(向下取整)+1,从而查操作的复杂度降到O[log₂n]

      2. 每次合并的时候让小树合并到大树的根下

      3. 根的值仍然取负值,但是绝对值是该树的所有节点数目,从而可以体现树的大小

    5. 查操作的优化:压缩路径(复杂度O[α(n)])

      1. 路径上经过的结点都直接挂到根节点下面

        1. while循环向上溯源,目的是找到根(与优化前一样)

        2. 再次while循环,目的是把路上的结点都直接转接到根节点下面(优化内容)(如果每个叶结点都经过这个操作,那么原来的树的高度就变成了2,一个根,其他全是叶子)

    6. 在这里插入图片描述

  3. 在这里插入图片描述

  • 技巧
  1. 在有n个叶子结点的哈夫曼二叉树中,非叶子结点一共有n-1个,总共有2n-1个结点,叶结点个数即为可编码的个数

  2. 哈夫曼编码不超过4,已经编码两个:1、01,则最多还可以编码4个:0000、0001、0010、0011

  3. 哈夫曼二叉树的度只有0和2两种情况

  4. n个有序的序列和m个有序的序列合并,最坏情况要比较m+n-1次大小


http://www.kler.cn/a/233670.html

相关文章:

  • 【机器学习】如何配置anaconda环境(无脑版)
  • 微服务各组件整合
  • 【2024软考架构案例题】你知道 Es 的几种分词器吗?Standard、Simple、WhiteSpace、Keyword 四种分词器你知道吗?
  • 更改Ubuntu22.04锁屏壁纸
  • 代码 RNN原理及手写复现
  • 【pytorch】常用强化学习算法实现(持续更新)
  • 【错误文档】This与Here的区别、主系表结构、如何合并两个句子、祈使句结构
  • linux 07 存储管理
  • kali最新最简单安装
  • 社区店选址要素揭秘:人流量与商业潜力的关键
  • 十大排序算法之线性时间非比较类排序
  • 电商小程序05用户注册
  • 吉他学习:C大调第一把位音阶,四四拍曲目练习 小星星,练习的目的
  • Mac OS 取消隔离扩展属性
  • HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-时间管理
  • #vu3# element plus表格的序号字段
  • STM32CubeMX,定时器之定时功能,入门学习,如何设置prescaler,以及timer计算PWM输入捕获方法(重要)
  • C语言笔试题之求出二叉树的最大深度(递归解决)
  • 【MATLAB源码-第138期】基于matlab的D2D蜂窝通信仿真,对比启发式算法,最优化算法和随机算法的性能。
  • Centos7.9安装SQLserver2017数据库
  • 【Make编译控制 01】程序编译与执行
  • 备战蓝桥杯---动态规划(基础3)
  • 虚拟飞控计算机:飞行控制系统验证与优化的利器
  • 汇编语言程序设计(二)十六位汇编框架、子程序与堆栈
  • 小周带你读论文-2之“草履虫都能看懂的Transformer老活儿新整“Attention is all you need(4)
  • 2024年-视觉AI检测的面试题目总结