Algorithm 什么是概率数据结构?

Algorithm 什么是概率数据结构?,algorithm,data-structures,probability,Algorithm,Data Structures,Probability,我读过一些关于数据结构的书,比如bloom过滤器和跳过列表 概率数据结构的共同特征是什么?它们的用途是什么?可能有很多不同(而且很好)的答案,但在我看来,概率数据结构的共同特征是它们为您提供了近似而非精确的答案 这里有多少物品? 大约1523425,概率为99% 更新: 快速搜索生成了有关该问题的体面文章的链接: 概率数据结构不能给你一个明确的答案,相反,它们为你提供了一个合理的近似答案,以及一种近似估计的方法。它们对于大数据和流应用程序非常有用,因为它们可以显著减少所需的内存量(与提供精确答案

我读过一些关于数据结构的书,比如bloom过滤器和跳过列表


概率数据结构的共同特征是什么?它们的用途是什么?

可能有很多不同(而且很好)的答案,但在我看来,概率数据结构的共同特征是它们为您提供了近似而非精确的答案

这里有多少物品? 大约1523425,概率为99%

更新: 快速搜索生成了有关该问题的体面文章的链接:


概率数据结构不能给你一个明确的答案,相反,它们为你提供了一个合理的近似答案,以及一种近似估计的方法。它们对于大数据和流应用程序非常有用,因为它们可以显著减少所需的内存量(与提供精确答案的数据结构相比)

在大多数情况下,这些数据结构使用哈希函数来随机化项。因为它们忽略碰撞,所以大小保持不变,但这也是它们无法给出精确值的原因。它们带来的好处:

  • 它们使用的内存量很小(可以控制大小)
  • 它们可以很容易地并行化(散列是独立的)
  • 它们具有恒定的查询时间(甚至不像字典中的摊销常数)
常用的概率数据结构包括:


维基百科中有一个概率数据结构列表供您参考:

关于什么是“概率数据结构”,有不同的定义。IMHO,概率数据结构是指数据结构在内部使用一些随机算法或利用一些概率特征,但从数据结构用户的角度来看,它们不必表现出概率或不确定性

  • 有许多“概率数据结构”具有概率特性 所提到的行为,如 根据其他答案

  • 同时,还有其他“概率数据结构” 具有确定的行为(从用户的角度来看),例如。对于跳过列表,用户可以将其类似地用作平衡的二叉搜索树,但在内部采用了一些概率相关的思想。根据skip list的作者William Pugh的说法:

    跳过列表是一种概率数据结构,似乎很可能 替代平衡树作为实现方法的选择 许多应用程序。跳过列表算法具有相同的渐近性质 作为平衡树的预期时间范围更简单、更快、更易使用 更少的空间


如果您对概率数据结构感兴趣,您可能想阅读我最近出版的书《大数据应用的概率数据结构和算法》(ISBN:9783748190486,可在亚马逊上获得)在这里,我解释了许多在现代大数据应用中非常有用的节省空间的数据结构和快速算法

在本书中,您可以找到最先进的算法和数据结构,它们有助于处理大数据处理中的常见问题,如

  • 成员查询(布卢姆过滤器、计数布卢姆过滤器、商过滤器、布谷鸟过滤器)
  • 基数(线性计数、概率计数、对数、超对数、超对数+)
  • 频率(多数算法、频繁、计数草图、计数最小草图)
  • 排名(随机抽样,q-摘要,t-摘要)
  • 相似性(LSH、MinHash、SimHash)

您可以获得免费预览,而且关于这本书的所有相关信息在

不是一个在每个插槽中都没有链接列表的哈希表(因此在每个插槽中只存储一个“yes item exist”或“no item Not Not Existence”)也是一个概率数据结构?@Pacerier,您所说的实际上是一个带有k=1哈希函数的bloom过滤器。但它可以肯定地说,如果一个项目是“不存在的”,它不能肯定地说,如果该项目是“存在的”。这就是为什么,是的,它将是一个概率数据结构。跳过列表可以被视为一个概率结构,但它给出了一个确切的答案。在这种情况下,概率会影响性能,但不会影响正确性。我不相信跳过列表是概率数据结构。它们保证给出正确的结果,并且与真正的概率数据结构(如Bloom Filters或HyperLogLog)不同,没有错误率。有趣的是,链接的维基百科文章有一个关于“概率”的超链接,这导致了维基百科关于“随机算法”的文章,这是一个完全无关的主题。这就对链接的维基百科页面的有效性提出了质疑。@Shuklaswag定义了“真正的概率数据结构”甚至“概率数据结构”。我不同意你的看法。尽管跳过列表总是给出正确答案,但概率是算法的一个重要组成部分,使其变得有用。