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

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

基本介绍

什么是平衡二叉树?

以一个例子来解释一下:

搜索树结点按不同的插入次序,将会导致不同的深度和平均查找长度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) = - , 其中 分别为T的左、右子树的高度。

平衡二叉树

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

空树,或者任一结点左、右子树高度差的绝对值不超过1,即

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

(1)

(2)

(3)

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

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


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

平衡二叉树的高度

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

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

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

那么平衡二叉树的高度是否能达到 呢?

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

总结出:

可以得到一个公式:

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

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

在数学上, 有一个公式:

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

是一个指数函数。

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

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

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

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

给定结点数为n的AVL树的最大高度为


end



 

目录
相关文章
|
2天前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
10 1
|
2天前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
7 0
|
2天前
|
存储 NoSQL 安全
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
8 1
|
2天前
|
存储 设计模式 算法
数据结构,算法宏观印象构建
数据结构,算法宏观印象构建
|
2天前
|
存储 算法 调度
算法与数据结构-栈篇
算法与数据结构-栈篇
11 0
|
2天前
|
算法 Java
《JVM由浅入深学习【八】 2024-01-12》JVM由简入深学习提升分(JVM的垃圾回收算法)
《JVM由浅入深学习【八】 2024-01-12》JVM由简入深学习提升分(JVM的垃圾回收算法)
5 0
|
3天前
|
人工智能 算法
程序技术好文:算法与数据结构
程序技术好文:算法与数据结构
|
1天前
|
算法 安全 数据库
基于结点电压法的配电网状态估计算法matlab仿真
**摘要** 该程序实现了基于结点电压法的配电网状态估计算法,旨在提升数据的准确性和可靠性。在MATLAB2022a中运行,显示了状态估计过程中的电压和相位估计值,以及误差随迭代变化的图表。算法通过迭代计算雅可比矩阵,结合基尔霍夫定律解决线性方程组,估算网络节点电压。状态估计过程中应用了高斯-牛顿或莱文贝格-马夸尔特法,处理量测数据并考虑约束条件,以提高估计精度。程序结果以图形形式展示电压幅值和角度估计的比较,以及估计误差的演变,体现了算法在处理配电网状态估计问题的有效性。
|
5天前
|
机器学习/深度学习 自然语言处理 算法
m基于深度学习的OFDM+QPSK链路信道估计和均衡算法误码率matlab仿真,对比LS,MMSE及LMMSE传统算法
**摘要:** 升级版MATLAB仿真对比了深度学习与LS、MMSE、LMMSE的OFDM信道估计算法,新增自动样本生成、复杂度分析及抗频偏性能评估。深度学习在无线通信中,尤其在OFDM的信道估计问题上展现潜力,解决了传统方法的局限。程序涉及信道估计器设计,深度学习模型通过学习导频信息估计信道响应,适应频域变化。核心代码展示了信号处理流程,包括编码、调制、信道模拟、降噪、信道估计和解调。
27 8
|
7天前
|
算法
基于GA遗传优化的混合发电系统优化配置算法matlab仿真
**摘要:** 该研究利用遗传算法(GA)对混合发电系统进行优化配置,旨在最小化风能、太阳能及电池储能的成本并提升系统性能。MATLAB 2022a用于实现这一算法。仿真结果展示了一系列图表,包括总成本随代数变化、最佳适应度随代数变化,以及不同数据的分布情况,如负荷、风速、太阳辐射、弃电、缺电和电池状态等。此外,代码示例展示了如何运用GA求解,并绘制了发电单元的功率输出和年变化。该系统原理基于GA的自然选择和遗传原理,通过染色体编码、初始种群生成、适应度函数、选择、交叉和变异操作来寻找最优容量配置,以平衡成本、效率和可靠性。