平衡へいこう

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん

平衡へいこうこれ计算つくえ科学かがくなかてき一类数据结构,为改进的二叉查找树一般いっぱんてき二叉查找树的查询复杂度取决于目标结点到树根的距离(そく深度しんど),いん此当结点てき深度しんど普遍ふへん较大时,查询てきひとし摊复杂度かいじょうます[1]。为了实现さらだかこうてき查询,产生りょう平衡へいこう

平衡へいこうてき树结构

ざい这里,平衡へいこうゆび所有しょゆうかのうてき深度しんど趋于平衡へいこうさら广义てきゆびざい树上所有しょゆう可能かのう查找てきひとし摊复杂度へんひく

平衡へいこうてき树结构

基本きほん操作そうさ[编辑]

旋转(rotate):几乎所有しょゆう平衡へいこう树的操作そうさもと树旋转操作そうさ也有やゆう部分ぶぶんもと于重构,如がえざいひつじ),つう过旋转操作そうさ以使とく树趋于平衡へいこう。对一棵查找树(search tree)进行查询、しんぞう、删除とう动作,しょはなてき时间与树的高度こうどhなり比例ひれい,并不あずか树的容量ようりょうnなり比例ひれい。如果以让树维平衡へいこう,也就让h维持ざいてき左右さゆう,就可以在てき复杂ない完成かんせいかく基本きほん操作そうさ[1]

插入そうにゅう(insert):ざい树中插入そうにゅういち个新值。

删除(delete):ざい树中删除いち个值。

查询ぜん驱(predecessor):ぜん驱定义为しょうx,且最大さいだいてきすう

查询きさき继(successor):きさき继定义为だいx,且最小さいしょうてきすう

ざい维护节点大小だいしょう(size)きさき支持しじ以下いか操作そうさ

查询はいめい(rank):はいめいてい义为xしょうてきすうてき个数いち

查询だいkだいそくはいめいkまとすう

かく种平衡树[编辑]

  • AVL树最早もはや发明てき平衡へいこう二叉查找树ざいAVL树中,にん一节点对应的两棵子树的最大高度差为1,いん此它也被しょう高度こうど平衡へいこう树。查找、插入そうにゅう删除ざい平均へいきんさい坏情况下てき时间复杂みやこただし增加ぞうか删除元素げんそてき操作そうさ可能かのう需要じゅようよしいちあるつぎ树旋转,以实现树てきおもしん平衡へいこう。AVL树得めい于它てき发明しゃG. M. Adelson-VelskyかずEvgenii Landis,们在1962ねんてき论文An algorithm for the organization of information 中公ちゅうこう开了这一すうすえ结构。 节点てき平衡へいこう因子いんし它的ひだり树的高度こうど减去它的右子ゆうこ树的高度こうどゆう相反あいはん)。带有平衡へいこう因子いんし1、0ある -1てき节点认为平衡へいこうてき。带有平衡へいこう因子いんし -2ある2てき节点认为平衡へいこうてき,并需要じゅようじゅう新平にっぺい衡这个树。平衡へいこう因子いんし直接ちょくせつそん储在ごと个节てんちゅうある可能かのうそん储在节点ちゅうてき树高计算出来でき
  • 树堆(Treap):ゆう一个随机附加域满足うずたかまとせい质的また搜索そうさく,其结构相とう于以ずいつくえすうすえ插入そうにゅうてきまた搜索そうさく。其基本きほん操作そうさてきもち时间复杂あい对于其他てき平衡へいこうまた搜索そうさく,Treapてきとくてん实现简单,且能基本きほん实现ずいつくえ平衡へいこうてき结构。
  • 伸展しんてん(Splay tree):のうざいひとしてき时间ない完成かんせいもと伸展しんてん(Splay)操作そうさてき插入そうにゅう、查找、おさむあらため删除操作そうさ。它是ゆかりたん尔·斯立とく(Daniel Sleator)罗伯とく·とうざい1985ねん发明てきざい伸展しんてん树上てき一般操作都基于伸展操作:かり设想よう对一个二叉查找树执行一系列的查找操作,为了使せい个查找时间更しょう查频りつだかてき些条就应とう经常处于もたれきん树根てき位置いち。于是想到そうとう设计いち个简单方ほうざい每次まいじ查找きさき对树进行调整,查找てき条目じょうもく搬移いた离树きんいち些的地方ちほう伸展しんてん树应运而せい伸展しんてん树是一种自调整形式的二叉查找树,它会沿着从某个节てんいた树根间的みちつう过一系列的旋转把这个节点搬移到树根去。 它的优势ざい于不需要じゅよう记录よう于平衡树てき冗余しんいき
  • 红黑树 (Red–black tree):ざい1972ねんゆかり鲁道おっと·贝尔发明,しょう为"对称またB树",它现だいてき名字みょうじげん于Leo J. GuibasRobert Sedgewick1978ねんうつしてきいちへん论文。红黑树的结构复杂,ただし它的操作そうさゆう良好りょうこうてきさい坏情况运行时间,并且ざい实践中高なかだかこう:它可以在时间ない完成かんせい查找,插入そうにゅう删除,这里てきn树中元素げんそてきすうもく
  • 权平衡树(Weight balanced tree):权平衡树てきまい个结てん储存这个结点树的大小だいしょう以用らい实现顺序统计树操作そうさ。优势ざい于占ようそら间相对较しょう
  • 2-3树:其内节点(存在そんざい节点てき节点)よう么有2个孩1个数すえ元素げんそよう么有3个孩2个数すえ元素げんそかのう节点ぼつゆう孩子,并且ゆう1个或2个数すえ元素げんそ。2–3树和AA树これとう距同构てき,换句话说,对于ごと个2–3树,みやこいたるしょうゆう1个AA树和它的元素げんそ排列はいれつしょうどうてき
  • AA树:AA树是红黑树てきいち种变种,Arne Andersson教授きょうじゅざい1993ねんねんざいてき论文"Balanced search trees made simple"ちゅうかい绍,设计てき目的もくてき减少红黑树こう虑的同情どうじょう况,别于红黑树的,AA树的红节てんただのうさく为右かのう,从而だいだい简化りょう维护2-3树てき拟。
  • がえざいひつじじゅ:其平衡基于部分ぶぶんじゅうけんざい平衡へいこうてきまた搜索そうさくなか每次まいじ操作そうさ以后检查操作そうさみち,找到最高さいこうてき满足左右さゆう树大しょうだい平衡へいこう因子いんし(alpha)じょう自身じしん大小だいしょうてき结点,じゅうたてせい个子树。这样就得いたりょうがえざいひつじ树,而被じゅうけんてき树的ばららいてき就被しょう为替ざいひつじ节点。

其他类型[编辑]

以下いかすうすえ结构支持しじ平衡へいこう树大多数たすう操作そうさただし实现ゆう根本こんぽん不同ふどう:

应用[编辑]

よう表示ひょうじゆうじょてき线性すうすえ结构,如优先队列关联すう、键(key)-值(value)てきうつひとし平衡へいこうてき二叉查找树与哈希表的相比,かくゆう优缺。平衡へいこう树在按序へん所有しょゆう键值时是りょう级最优的,哈希ひょう不能ふのう平衡へいこう二叉查找树在查找一个键值时,さい坏情况下时间复杂优于哈希ひょう对比ただし平均へいきん时间复杂逊于hashひょう对比

平衡へいこう树的はいじょ方法ほうほう,虽然ざい平均へいきん时间复杂じょう也是ただしよし于cache性能せいのう、树的调整操作そうさとう性能せいのうじょう快速かいそくはいじょうずたかはいじょ归并はいじょひとしどう复杂てきはいじょ

参考さんこう文献ぶんけん[编辑]

  1. ^ 1.0 1.1 Donald Knuth. The Art of Computer Programming, Volume 3: Sorting and Searching, Second Edition. Addison-Wesley, 1998. ISBN 0-201-89685-0. Section 6.2.3: Balanced Trees, pp.458–481.

外部がいぶ链接[编辑]