【发布时间】:2021-05-16 00:43:28
【问题描述】:
我正在学习skip lists,但有些东西我无法理解。
当我们插入一个新节点时,我们扔一个硬币,如果我们得到 1,我们会在上层再次插入节点,依此类推,直到我们得到 0,我们停止。
但是为什么我们需要这个呢?
【问题讨论】:
-
这个问题听起来很像“为什么跳过列表的结构类似于跳过列表?”这是一个重言式。您是在问“跳过列表的意义何在?”您可以在连续数组上进行二进制搜索,但不能在链表上进行。这就是链表需要做的事情才能获得这种能力。插入时的随机“硬币翻转”似乎是一种选择分裂大约一半时间的方法,而不会像平衡红黑树这样的成本复杂性。
-
跳过列表的实现细节on wiki很好地解释了抛硬币促销的原因。简而言之,翻转的随机性将数据结构构建为伪平衡。
-
如果不进行额外的插入,跳过列表中就不会跳过。
标签: c++ list algorithm skip-lists