平衡树
- splay: 属于二叉树, 伸展树, 代码还可以, 功能强大 非常灵活
- 红黑树: 属于二叉树,
c++
里 用的是他, 效率很高, 但是代码非常大! 几乎不可能手写一个红黑树 - treap: 属于二叉树,
trea heap
代码短 效率也高, 但是有很多操作, 他实现不了
- avl: 属于二叉树,
A V L 是其发明者的名字
- b树: 属于多叉树, 在计算机的硬盘里, 硬盘的实现, 会使用到他
- b+树: 属于多叉树, 在计算机的硬盘里, 硬盘的实现, 会使用到他
Splay
左旋右旋, 都要保证:
- 不能改变, 整个树的 中序遍历
splay会保证, 每次操作 时间都是log(n)
的
每操作一个节点插入 / 查询...
, 都会将这个节点 旋转到 树根root
这个思路是源于: 一个点会使用到, 那么在(后续), 他可能还会再使用到
这是个偏概率的问题
比如, 短视频里的热门视频, 很多用户都喜欢它, 他的访问频率就非常高