没有随机化的跳表?

7

我阅读了一些关于跳表的内容,并正在实现它。但是有一件事情到目前为止我还没有完全理解,那就是为什么跳表是随机的?在我找到的所有资料中,跳表都使用随机数来决定插入项目的级别。难道不能计算出最优解吗?或者不能说“每四个项目”应该插入到上一级吗?

1个回答

7

Skip lists可以被确定性地构建,例如为了最小化摊销访问成本。然而,对于任何确定性的构建方法,更高级别的列表条目集总是已知的,因此很容易构造一组“敌对”的删除操作,使性能退化到O(n)。通过随机构建,仍然存在最坏情况的删除集,但对于任何相当大的列表,仅凭偶然发现最坏情况的删除序列的可能性是微乎其微的。


我知道这是一个老问题,但是要不要考虑使用计数器而不是随机数呢?然后将计数器的前几位作为伪随机数。在开始时,我们可以用一些随机值初始化这个计数器,以使计数器的值变得“不可预测”。 - Nick
1
@Nick,我并没有看到这改变了我的答案的实质。使用计数器是一种完全可预测的方法,只需要一个观察就可以探测到计数器的初始值。也许我对你的建议有所误解?如果是这样的话,为什么不将其作为一个单独的问题提出来呢? - pjs
我们使用随机化仅仅是为了防止拒绝服务攻击? - undefined
@Lem 我不会这么说。我们使用随机化是因为它既能很好地工作,又能关闭一个本来很容易攻击的向量。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接