偶然看到这个帖子,我来回答一下。
Size Balanced Tree (SBT)是我高中时写的一篇集训队论文。有兴趣的读者可以看看我以前整理的SBT资料(从
http://www. stanford.edu/~cqf/SBT.z ip下载)。
首先澄清一点,SBT跟算法导论里面的Weight-balanced Tree (WBT) 有所不同。WBT维护的是子树与儿子的关系,SBT维护的是子树与侄子(兄弟的儿子)的关系。
从理论上来讲,SBT和其他流行的平衡树在摊平时间复杂度上没有区别。
从实用角度来说,SBT在某些方面可能会超越其他平衡树。在SBT的左/右旋转过程中,所有节点的平均深度在下降,那么查询操作的期望深度也在降低(如果一个节点在深度d,那么我们只需要走d步)。当查询操作比较多的时候,SBT会有优势。另外,SBT保存的子树大小可以用来查询第k大,而AVL,Treap,红黑树存储的额外信息不能用来查询第k大。