标签:儿子 log 树高 旋转 splay 科技 平衡 二叉
0.前言
我们都知道,二叉搜索树在随机数据下具有优良的性质,可以 \(O(\log n)\) 内实现插入、删除、按值找排名、按排名找值等操作。
但这是建立在随机数据保证的一个节点左右儿子的大小几乎相同的前提下的,如果有居心叵测的出题人构造有序或者几乎有序的序列依次插入二叉搜索树,那树高将会变为 \(O(n)\),那就寄了。
所以我们希望搞一些动作使得树高在任何情况下都能维持期望 \(O(\log n)\) 的树高。
这时便有了splay。
1.splay的基本思想
splay维护树基本平衡的方法是它的splay操作,通过旋转,将每一次要访问的结点旋转到根,splay的同时维护一下树的平衡。
2.spaly的基本操作
- 旋转(rotate)操作
假设我们现在有这样的一个东西:
我想要把 \(X\) 变成 \(Y\) 的爹,但我又不能破坏二叉搜索树的性质,那么显然应当是这样的:
\(Y\) 成为 \(X\) 的左儿子,
\(A\) 成为 \(Y\) 的右儿子,
\(X\) 成为 \(R\) 的某个儿子。
另一种旋转反向与此类似。
写成代码便是:
标签:儿子,log,树高,旋转,splay,科技,平衡,二叉 来源: https://www.cnblogs.com/wapmhac/p/16595661.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。