MIT算法导论课程:Lec12跳跃表。
1. Skip Lists
跳跃表:随机化动态搜索结构,简单容易实现。\(O(\lg n)\)的期望运行时间, 并且有很大的概率\(1-\frac{1}{e^\alpha}\)。
其他高效的动态搜索结构,比如树堆、红黑树、B-trees。
sorted linked list
search:\(\Theta(n)\) time,如何提速呢?
Two linked list
IDEA:新加一个list来作为“快速通道”。
search(x)
- 从list L1向右搜索,直到搜索过头
- 向下到list L2
- 向右搜索,直到搜索到元素
Analysis
粗略估计:\(|L1|+\frac{|L2|}{|L1|}\). \(|L2|=n\)
最小化: \(|L1|=\sqrt n\)
2 sort lists: \(2 \sqrt n\)
3 sort lists: \(3n^{1/3}\)
k sorted lists: \(kn^{1/k}\)
\(\lg n\) sorted lists:\(\lg n*n^{1/\lg n}=2\lg n\)
\(\lg n\) sorted lists 像一个二分树。
Ideal skip list is this \(\lg n\) linked list structure.
上一次与下一层的比为1:2,负无穷存在所有表中的最左边。
1 | INSERT(x) |
不仅平均为\(O(\lg n)\),并且高概率为\(O(\lg n)\)
2. With-high-probability theorem
THEOREM: 有很高的概率,每次搜索的时间消耗是\(O(\lg n)\)
Boole’s inequality
如果\(k=n^{O(1)}\),每一个\(E_i\)都具有高概率,那么\(E_1 \cap E_2,...,\cap E_k\).