01
解法
有序结构如果用平衡树实现,每次更新后都必须重新平衡,这意味着旋转、变颜色以及小心维护不变量——这些都很容易出错,而且难以并行化。
跳表用一条概率规则取代了那套机制。每个节点的层级按陡降分布随机分配,所以多数层级低,少数层级高,查找时可以先跳过较长的一段低层级链,再逐级下降。
因为层级是随机的,每层节点数的期望呈几何分布,查找、插入、删除的期望时间复杂度都是O(log n)。代码很短,而且之后无需维护任何簿记。
02
取得了什么结果
让抛硬币而不是旋转来维持平衡
03
为什么有效
随机层级提供了高度界限,免去了重新平衡的代码。
局部操作友好并发,容易并行化。
简洁意味着更少需要维护和出错的不变量。
04
可以借鉴什么
当确定性的重新平衡代价高且易错时,用诚实的随机性取而代之:局部简单操作就能达到与手动维护不变量相同的期望性能。
05
后续
跳表成为库和数据库中平衡树的常见替代品,最著名的是Redis的有序集合,其简洁性有助于并发和可预测的性能。
从这里,追溯依据
参考来源
- Skip Lists: A Probabilistic Alternative to Balanced Trees William Pugh / University of Maryland · cs.umd.edu
- Skip list Wikipedia · en.wikipedia.org