スキップリストは、複数の**「高速レーン」**レベルで拡張された順序付きリンクリストです。上位レベルは多くのノードをスキップするため、検索は下降して右に移動し、**O(log n)**の期待時間を実現します。これは、バランスツリーに対する確率的でより単純な代替案です。
構造
text
L3: head ------------------------> 30 -------> NIL
L2: head ----------> 17 ---------> 30 -------> NIL
L1: head ----> 9 --> 17 --> 25 --> 30 --> 42 -> NIL
L0: head -> 3->9->12->17->25->30->39->42 ----> NIL (full list)
各ノードは確率 p(通常0.5)で上位レベルに昇格されるため、平均的には各レベルは下位のレベルの半分のノード数を持ちます。
検索
text
search(25): start top-left, move RIGHT while next <= target,
else drop DOWN a level. Repeat to level 0.
python
random
():
lvl =
random.random() < p lvl < max_level:
lvl +=
lvl
