Unverified Commit d6c6fcf6 authored by Zhikai Zeng's avatar Zhikai Zeng Committed by GitHub
Browse files

Update skiplist.md

parent a1921fbd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -360,7 +360,7 @@ bool erase(const K &key) {

访问跳表中第 $k$ 个节点,相当于访问初始有序链表中的第 $k$ 个节点,很明显这个操作的时间复杂度是 $O(n)$ 的,并不足够优秀。

跳表的随机访问优化就是对每一个前向指针,再多维护这个指针的长度。假设 $A$ 和 $B$ 都是跳表中的节点,其中 $A$ 为跳表的第 $a$ 个节点, $B$ 为跳表的第 $b$ 个节点 $(a < b)$ ,且在跳表的某一层中 $A$ 的前向指针指向 $B$ ,那么这个前向指针的长度为 $b - a$ 。
跳表的随机访问优化就是对每一个前向指针,再多维护这个前向指针的长度。假设 $A$ 和 $B$ 都是跳表中的节点,其中 $A$ 为跳表的第 $a$ 个节点, $B$ 为跳表的第 $b$ 个节点 $(a < b)$ ,且在跳表的某一层中 $A$ 的前向指针指向 $B$ ,那么这个前向指针的长度为 $b - a$ 。

现在访问跳表中的第 $k$ 个节点,就可以从顶层开始,水平地遍历该层的链表,直到当前节点的位置加上当前节点在该层的前向指针长度大于等于 $k$ ,然后移动至下一层。重复这个过程直至到达第一层且无法继续行操作。此时,当前节点就是跳表中第 $k$ 个节点。