MIT《算法导论》课程第10课《平衡搜索树》学习笔记.
我们希望搜索树的数据结构有$n$个元素,树高为$O(\log n)$。
红黑树
一种BST,每个结点都有称为“色域”的额外信息。
红黑树的特性
- 每个结点或红或黑
- 根结点和叶子结点都是黑色
- 每个红色结点的双亲结点是黑色
- 从结点x到x的子孙结点的所有简单路径,具有相同的黑色结点数,称为“黑高度”。
有n个键的红黑树的高度h满足:
$$
h \le 2 \log(n + 1) = O(\log n)
$$
证明如下。
将红色结点合并入其双亲结点。
此时所有的叶子结点有相同的深度h’,即为黑深度(Black height),因为从根结点到每个叶子结点经过同样多的黑色结点,而现在只剩下了黑色结点。
叶子结点的数目=n+1(由归纳法)
在2-3-4树中,
$$
2^{h’} \le 叶子结点的数目 \le 4^{h’}
$$
于是:
$$
2^{h’} \le n + 1 \
h’ \le \log(n + 1)
$$
而
$$
h’ \ge \frac{1}{2}h(由于从跟结点到叶子结点的简单路径中,黑色结点至少占一半)
$$
因此
$$
h \le 2\log(n+1)
$$
红黑树的查询在$O(\log(n))$时间内完成。
红黑树的增删
1 | Update(Insert & Delete) -> modify the tree |
1 | RB_Insert(x): |
1 | RB_Insert_Fixup(T, x): |
1 | RB_Delete_Fixup(T, x): |