skip list的实现?level随机化策略?skip list的实现?level随机化策略?
跳表:多层有序链表,底层为完整有序链表,上层为「索引」、每层为下层的稀疏子集。从顶层头开始,向右走直到下一节点大于目标则下一层,直到底层找到或确定不存在。查找、插入、删除期望 O(log n),实现简单,无需平衡(如红黑树)的复杂旋转。
每个节点有一个 level(高度);插入时用随机决定 level:常见策略为「以概率 p(如 1/2 或 1/4)加一层」,即 level 0 必选,level i+1 以 p 概率选。这样高层节点数约为下层的 1/p,形成类似「二分」的索引,期望层数 O(log n)。随机化避免刻意构造的退化,期望性能稳定。
每节点含 forward 数组(各层后继);头节点层高为最大层。查找:从最高层头开始,本层向右走到「下一个 > key」则下一层。插入:随机出 level,自顶向下找插入位置,在各层链入新节点。删除:找节点并在各层摘链。
| 返回模块 | 返回总览 |