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

数据结构和算法学习记录——平衡二叉树(基本介绍、平衡因子、平衡二叉树的定义、平衡二叉树的高度)

目录

基本介绍

平衡因子

平衡二叉树 

平衡二叉树的高度 


基本介绍

什么是平衡二叉树?

以一个例子来解释一下:

搜索树结点按不同的插入次序,将会导致不同的深度和平均查找长度ASL

 

在二叉搜索树中查找一个元素: 

(a)要找到Jan,需要查找一次;要找到Feb,需要查找两次;

要找到Mar,也需要查找两次......要找到Nov,需要查找六次。

把所有查找次数加起来,再除以12,

得到平均查找长度:ASL(a) = ( 1 + 2 * 2 + 3 * 3 + 4 * 3 + 5 * 2 + 6 * 1 ) / 12 = 3.5

(b)要找到July,需要查找一次;要找到Feb,需要查找两次;

要找到May,也需要查找两次......要找到Sept,需要查找四次。

算出平均查找长度:ASL(b) = (1 + 2 * 2 + 3 * 4 + 4 * 5) / 12 = 3.0

(c)要找到Apr,需要查找一次;要找到Aug,需要查找两次......

要找到Sept,需要查找十二次。

算出平均查找长度:ASL(c) = ( 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12) / 12 = 6.5 

 通过上面的例子,我们可以看到方式b的平均查找长度最短,在观感上结点的分布也比较均匀。

所以二叉树,我们要求比较平衡,才能够让查找的长度更短一些。

而如何衡量一颗二叉树平衡不平衡呢?

  1. 是左右两边的结点数差不多
  2. 是左右两边的高度差不多

这样我们就认为基本上平衡,即为平衡二叉树。

平衡因子

平衡因子(Balance Factor,简称BF):

BF(T) = h_{L}-h_{R}, 其中h_{L}h_{R}分别为T的左、右子树的高度。

平衡二叉树 

平衡二叉树(Balanced Binary Tree) (AVL树)

空树,或者任一结点左、右子树高度差的绝对值不超过1,即 \left | BF(T) \right |\leqslant 1

下面来判断一下以下几颗二叉树是否为平衡二叉树:

(1)

(2)

 

(3) 

 先来看第一棵二叉搜索树:

再来看第二棵二叉搜索树:

 

最后看第三棵二叉搜索树:

 

平衡二叉树的高度 

我们要二叉树平衡,其目的是为了让二叉树的高度更低一些,

越平衡的二叉树高度就越低。

一棵结点总数为n的完全二叉树高度为 h = log2n,

那么平衡二叉树的高度是否能达到{log_{2}}^{n}呢?

n_{h}为 高度为h的平衡二叉树的最少结点数。 结点数最少时: 

总结出: 

可以得到一个公式:n_{h} = n_{h-1} + n_{h-2} + 1 

我们会发现,这个公式有点眼熟,是与斐波那契序列的公式有点像。

从这里我们就来分析一下nh跟斐波那契序列的F_{i}有什么关系。

 

在数学上,F_{i}有一个公式: F_{i}\approx \frac{1}{\sqrt{5}}\left ( \frac{1+\sqrt{5}}{2} \right )^{i}

 当i逐步增大时,F_{i}大致等于公式算出来的值。

F_{i}是一个指数函数。

根据我们上面分析出来的F_{i}n_{h}的关系,就可以代入得到n_{h}的相关公式。

 n_{h}\approx \frac{1}{\sqrt{5}}\left ( \frac{1+\sqrt{5}}{2} \right )^{h+2}-1

所以反过来我们就得到h的表达式:

h=O(log_{2}^{n})

用自己的想法把他推一遍:

综上所述,我们可以得到结论:

给定结点数为n的AVL树的最大高度为O(log_{2}^{n})


end 


学习自:MOOC数据结构——陈越、何钦铭 

 

 

 

 

 

 

 

 

http://www.lryc.cn/news/61804.html

相关文章:

  • 【浓缩概率】浓缩概率思想帮我蒙选择题的概率大大提升!
  • 两小时让你全方位的认识文件(一)
  • 基于Java+Springboot+vue网上商品订单转手系统设计和实现
  • 旅游-商场购物
  • 毕业论文用什么流程图软件比较好?
  • 算法刷题|70.爬楼梯(进阶)、322.零钱兑换、279.完全平方数
  • 【MCS-51】51单片机结构原理
  • 软件测试技术之如何编写测试用例(3)
  • 移远通信笔试题
  • python算法中的机器学习算法之监督学习知识点(详解)
  • Flink主要有两种基础类型的状态:keyed state
  • js录音支持h5 pc ios android
  • mybatis04-mybatis缓存、分页插件、注解开发(一对一、多对一、多对多)
  • 软件平台接口常见问题汇总
  • SparkStreaming学习之——无状态与有状态转化、遍历kafka的topic消息、WindowOperations
  • 上市公司碳排放测算数据(1992-2022年)
  • Springboot 整合 JPA 及 Swagger2
  • android aidl
  • MYSQL---主从同步概述与配置
  • WebClient学习
  • 「计算机控制系统」6. 直接设计法
  • 什么是JWT?
  • STM32—0.96寸OLED液晶显示
  • Mysql的简介和选择
  • 3D视觉之深度相机方案
  • Mysql列的完整性约束详解(主键约束)
  • 母婴市场竞争激烈,如何通过软文营销脱颖而出
  • java--线程池
  • asp.net765数码手机配件租赁系统
  • 有关态势感知(SA)的卷积思考