概率搜索数据结构有用吗?


9

SkipList提供与平衡树相同的搜索范围,其优点是不需要重新平衡。由于SkipList是使用随机硬币翻转构成的,因此只要SkipList的结构足够“平衡”,这些界限就成立。特别是,对于某些常数,概率为,插入元素后,平衡结构可能会丢失。O(logn)1/ncc>0

假设我想将跳过列表用作可能永远运行的Web应用程序中的存储后端。因此,经过一些多项式运算之后,SkipList的平衡结构很可能会丢失。

我的推理正确吗?这样的概率搜索/存储数据结构是否具有实际应用,如果可以,那么如何避免上述问题?

编辑:我知道SkipList有确定性变体,与(经典)随机化SkipList相比,实现起来要复杂得多。


1
您打算使用什么特定的应用程序?
Pratik Deoghare'3

Answers:


6

我认为失去“平衡”没有多项式的可能性。在跳过列表中插入元素之后,您可以通过翻转硬币直到其正面朝上,在其上方构建一个副本塔。

因此,到达顶部时,层中的元素越来越少。由于塔的高度为,概率为,因此在高度处有一个元素的概率(联合约束)小于。因此,具有级别的元素的概率小于。高度为塔具有次多项式概率。设为最大水平,则有k2kkn/2kclogn1/ncω(logn)M

E[M]=k1Pr(Mk)log(n)+klog(n)n/2k=log(n)+2.

此外,在级别,有元素的概率很高,因为这是独立随机变量的总和,您可以使用Chernov界。kn/2kn

由于您还可以证明每个级别只能执行恒定数量的步骤(概率很高!),因此搜索成本是对数的。

因此,您最终确实会很不幸,最终导致列表不平衡。请注意,此处的“好运”与您的数据无关,例如在不平衡的搜索树中。跳过列表中的硬币翻转总是随机的。

据我所知,跳过列表具有很大的实际意义,因为将它们实现为无锁搜索结构相对容易,并且具有明显的好处。另一方面,B树很难在并发访问下表现出色。


二叉搜索树的预期深度也是对数的;为什么这里的情况更好?(此外,您假设随机排列,对吗?)
拉斐尔

2
在搜索树中,深度取决于数据。如果输入随机数,则其对数深度的可能性很高。但是,实际上,数据不是随机的。跳过列表不会将数据用作随机性的来源,因此不存在此问题。
adrianN

1

跳过列表具有其他属性,在使用除插入/查找/删除之外的其他操作的情况下,它们可能很有吸引力。

例如,当修改位置已知时,跳过列表具有预期时间本地更新。对于某些平衡的二进制搜索树,这在最坏的情况下当然是可能的,但是这些结构的实现往往非常复杂。O 1 O(1)O(1)

此外,跳过列表是实现并发基于比较的搜索结构的一种流行方法。从历史上看,在高并发竞争下,平衡搜索树的性能不佳。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.