当前课程知识点:数据结构(下) > 第七章 二叉搜索树 > (d1)AVL树:重平衡 > 07D1-1 AVL=BBST
同学们好
作为二叉搜索树这一章的最后一节
我们来介绍最为经典的一种
平衡二叉搜索树
也就是AVL树
回顾此前的几节
我们首先介绍的是
二叉查找树BST
然而我们也看到
尽管从同时兼顾高效的静态操作
和动态操作的角度讲
BST相对此前
简单的向量和列表
已经具有某种优势和潜质
但是毕竟它并不能保证这一点
其原因在于 它的高度
无论是从平均情况 还是最坏情况
都不能保证做到足够的低
具体来说 也就是做到logn以下
当然 在BST中的确存在
这么一种特殊的类型
也就是所谓的
Complete Binary Tree
完全二叉树
它的高度可以达到严格的最小
也就是logn
然而 相对于整体的BST
这类BST的数量极少
而且我们如果需要将任何一棵树
转化为一棵完全二叉树
所需要的成本也太高
也正因为此
我们的建议是
或许应该适当地放松
所谓平衡的标准
也就是说 我们只需考察某一类
在渐近意义下不超过
O(logn)高度的树即可
而这样一类树
也就是我们所说的
平衡二叉搜索树
Balanced Binary Search Tree
BBST
比如我们这一节将要介绍的AVL树
就是在这种意义下的一种BBST
以AVL树为代表的这些BBST
首先并没有放弃渐近意义
logn的复杂度底线
同时正因为它已经适度地
放松了平衡的标准
所以通过精巧地设计
它们都可以具有这样一种属性
具体来说
对于任何一棵这样意义下的BBST
在其生命期内
即便在某次操作之后
它不再满足BBST的条件
也就是说 游离到BBST这个范畴之外
我们也可以通过上节所介绍的等价变换
迅速地将其重新转化为
一棵等价的BBST
也就是说 可以通过极小的代价
就使之重新归入BBST的范畴
而这种极小的代价是多少呢?
不出你的意料 依然是不超过logn
令刚刚失衡的搜索树
重新恢复为一棵BBST的过程
也称作重平衡rebalance
而对于包括AVL树在内的
各种BBST而言
其核心的技巧 无非两条
第一 如何来界定一种
适度的平衡标准
其次 则是一整套重平衡的技巧和算法
以下我们就以AVL树为例
具体地讲解如何完成这两项任务
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试