动态加载骰子的数据结构?

时间:2016-11-16 01:08:51

标签: algorithm data-structures language-agnostic probability

假设我有一个有序的频率列表,例如[1, 1, 2]。我希望能够从这个列表中快速采样,并选择一个与其值成比例的选项。

The Alias method让我们使用O(n)构造时间和O(1)查询时间进行此采样。我对此问题的版本感兴趣,我们也支持此列表的更新或插入。

以下是一些想法:

  • 增强的BST可以对所有采取O(log(n))
  • 的操作执行此操作
  • 您可以使用分层数据结构,其中有n / log(n)块大小为log(n)。每个块都存储为扩充BST,顶层数据结构是别名方法。选择BST需要O(1)并在其中选择需要O(log(log(n))),因此查询时间为O(log(log(n)))。每当更新发生时,您需要完全重建顶级结构,这需要O(n / log(n))时间。

有没有更快的解决方案?

1 个答案:

答案 0 :(得分:1)

论文"Dynamic Generation of Discrete Random Variates" by Matias, Vitter, and Ni描述了如何在不断预期的更新和查询时间内这样做。这些技术一点都不重要!