跳过列表:插入

Skip List: Insertions

我试图了解跳跃列表是如何用于插入的,但是当我把它画出来时,它不起作用。

|-inf<---------------------------->+inf|0
|-inf<--------->4<---------------->+inf|1
|-inf<--------->4<--->9<--->11<--->+inf|2
|-inf<--->1<--->4<--->9<--->11<--->+inf|3

所以我想在上面的链表中插入5

从第 0 行开始:从 -inf 开始,将 5 与 +inf 进行比较,移至下一行。

移至第 1 行:

是 5 <= 4,不是。与右侧的内容进行比较,+inf。从元素 4 向下移动到第 2 行。

移至第 2 行:

现在我们在 4 和 9 之间遍历,所以比较类似于 5 <= 4?不,是 5 <= 9 吗?是的。在 4 和 9 之间插入。

但是现在 5 没有出现在第 3 行? 我做错了什么?

当你看到 5 <= 9 时,你必须继续往下走,直到到达底部。在较低级别之一中可能还有 4 到 9 之间的任何数字。当您确定它在底行的位置时,您将它插入那里,然后根据 RNG 的结果开始将它插入更高一排。插入的完整序列类似于:

  1. 5 > +信息?否:下移。
  2. 5 > 4?是:向右移动。
  3. 5 > +信息?否:下移。
  4. 5 > 9?否:下移。
  5. 5 > 9?否:下移。
  6. 上一步无法向下移动,所以在底部插入 4 和 9 之间。
  7. 按概率将 5 添加到更高的行。