**skip list(스킵 리스트)**는 여러 "급행 차선(express lane)" 레벨로 보강된 정렬된 linked list입니다. 상위 레벨은 많은 노드를 건너뛰므로, 검색이 아래로 내려가며 오른쪽으로 이동하여 O(log n) 기대 시간을 달성합니다. balanced tree의 확률적이고 더 단순한 대안과 같습니다.
구조
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 (전체 리스트)
각 노드는 확률 p(흔히 0.5)로 상위 레벨로 승급되므로, 평균적으로 각 레벨은 그 아래 레벨의 절반만큼의 노드를 갖습니다.
검색
text
search(25): 좌상단에서 시작, next <= target인 동안 오른쪽으로 이동,
아니면 한 레벨 아래로 내려감. 레벨 0까지 반복.
