关于算法:什么是概率数据结构?

What are probabilistic data structures?

我读过Bloom过滤器和跳过列表等数据结构。

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


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

这里有多少东西?约1523425,概率99%

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

https://highlyscalable.wordpress.com/2012/05/01/probability-structures-web-analytics-data-mining/


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

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

  • 它们使用少量的内存(您可以控制多少内存)
  • 它们可以很容易地并行(散列是独立的)
  • 它们的查询时间是固定的(甚至不像字典中那样分摊常量)

常用的概率数据结构有:

  • 布卢姆过滤器
  • 计数最小草图
  • 超日志


如果你对概率数据结构感兴趣,你可能想读我最近出版的书"大数据应用的概率数据结构和算法"(isbn:9783748190486,可从Amazon获得),我已经解释了许多这种空间高效的数据结构和快速算法,它们在现代大数据中非常有用。数据应用程序。

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

  • 成员查询(Bloom过滤器、计数Bloom过滤器、商过滤器、布谷鸟过滤器)。
  • 基数(线性计数、概率计数、日志、超日志、超日志++)。
  • 频率(多数算法,频率,计数草图,计数最小草图)。
  • 等级(随机抽样,Q-摘要,T-摘要)。
  • 相似性(lsh、minhash、simhash)。

你可以在https://pdsa.gakhov.com上免费预览这本书以及所有相关信息。


维基百科中有一个概率数据结构列表供您参考:https://en.wikipedia.org/wiki/category:概率数据结构

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

  • 有许多"概率数据结构"具有概率性行为,如所提到的bloom过滤器和hyperloglog其他答案。

  • 同时,还有其他"概率数据结构"具有确定的行为(从用户的角度),例如跳过名单。对于跳过列表,用户可以将其类似地用作平衡的二进制搜索树,但在内部使用一些与概率相关的思想来实现。根据Skip List的作者William Pugh的说法:


    Skip lists are a probabilistic data structure that seem likely to
    supplant balanced trees as the implementation method of choice for
    many applications. Skip list algorithms have the same asymptotic
    expected time bounds as balanced trees and are simpler, faster and use
    less space.