平衡树

✍ dations ◷ 2025-09-16 20:24:57 #数据结构,树结构

平衡树是计算机科学中的一类数据结构,为改进的二叉查找树。一般的二叉查找树的查询复杂度取决于目标结点到树根的距离(即深度),因此当结点的深度普遍较大时,查询的均摊复杂度会上升。为了实现更高效的查询,产生了平衡树。

在这里,平衡指所有叶子的深度趋于平衡,更广义的是指在树上所有可能查找的均摊复杂度偏低。

旋转(Rotate):几乎所有平衡树的操作都基于树旋转操作(也有部分基于重构,如替罪羊树),通过旋转操作可以使得树趋于平衡。对一棵查找树(search tree)进行查询、新增、删除等动作,所花的时间与树的高度h成比例,并不与树的容量 n 成比例。如果可以让树维持平衡,也就是让h维持在 O ( log n ) {\displaystyle O(\log {n})} ,且最大的数。

查询后继(successor):后继定义为大于,且最小的数。

在维护节点大小(size)后,可以支持以下操作:

查询排名(rank):排名定义为比x小的数的个数加一。

查询第k大:即排名为的数。

以下数据结构支持平衡树大多数操作,但实现有根本不同:

用于表示有序的线性数据结构,如优先队列、关联数组、键(key)-值(value)的映射等。自平衡的二叉查找树与哈希表的相比,各有优缺。平衡树在按序遍历所有键值时是量级最优的,哈希表不能。自平衡二叉查找树在查找一个键值时,最坏情况下时间复杂度优于哈希表, O ( log n ) {\displaystyle O(\log n)} 对比 O ( n ) {\displaystyle O(n)} ;但平均时间复杂度逊于hash表, O ( log n ) {\displaystyle O(\log n)} 对比 O ( 1 ) {\displaystyle O(1)}

平衡树的排序方法,虽然在平均时间复杂度上也是 O ( n log n ) {\displaystyle O(n\log n)} ,但由于cache性能、树的调整操作等,性能上不如快速排序、堆排序、归并排序等同为 O ( n log n ) {\displaystyle O(n\log n)} 复杂度的排序。

相关

  • World Organisation for Animal Health世界动物卫生组织(法语:Organisation mondiale de la santé animale,缩写来自旧名-“国际兽疫局”,法语:Office international des épizooties, OIE),是1924年成立的一个国际组织
  • CuS硫化铜是一种铜和硫的化合物,化学式CuS,在自然界中以深蓝色的靛铜矿形式存在。它是一种中等导电性的的导体。 硫化氢气体通入铜盐溶液时可形成硫化铜的胶状沉淀。 目前也有研
  • Giardia lambliaLamblia intestinalisGiardia duodenalis蓝氏贾第鞭毛虫(学名:Giardia lamblia)又称蓝布尔吉亚尔氏鞭毛虫、梨形鞭毛虫,简称贾第虫。属于鞭毛虫纲,主要寄生在人体肠道内,引起腹痛
  • 胡安·狄克逊胡安·狄克逊(英语:Juan Dixon,1978年10月9日-),美国NBA联盟前职业篮球运动员。他在2002年的NBA选秀中第1轮第17顺位被华盛顿奇才选中。
  • 四氯化二磷四氯化二磷是一种无机磷化合物,化学式为P2Cl4,于1910年首次合成。四氯化二磷可由三氯化磷和氢气在低压下放电得到。2 PCl3+H2→P2Cl4+2 HCl
  • 盟军由巴黎到莱茵的推进美国: 240,082人伤亡 盟军由巴黎到莱茵的推进是于第二次世界大战的西欧法德疆界附近发生的战事,维持了约半年,其结果是盟军占领法国、比利时、卢森堡的大部分领土、荷兰的南部
  • 鲁彦鲁彦(1901年-1944年8月20日),原名王衡、王燮臣,字返我、忘我,曾用笔名王鲁彦、鲁彦,浙江镇海人,中国现代作家。他创作了以《柚子》和《黄金》为代表的一批短篇小说,以乡村小有产者和
  • 尼达 (立陶宛)尼达(立陶宛语:Nida)是位于立陶宛西部的一个城市,靠近立陶宛和俄罗斯飞地加里宁格勒。尼达也是立陶宛著名的度假城市,约有人口1650人。坐标:55°18′N 21°00′E / 55.300°N 21.0
  • 裘建功裘建功(?-?),中国清朝官员,于1761年上任台湾府经历,隶属于台湾道台湾府,为台湾清治时期的地方官员,官职品等则为正七品以下,该官职主要从事台湾府府内典簿奏章的收发与校注,也分掌章奏文
  • 西佛落镇西佛落镇,是中国河北省安国市下辖的一个乡镇级行政单位。西佛落镇下辖以下地区:西伏落村、张家营村、中伏落村、东伏落村、西伯章村、康庄村、娄营村、大营村、小营村和郭北庄