离散随机变量的有效采样

时间:2018-09-01 18:50:52

标签: python-3.x algorithm random

假设 X 以概率 p(i)取值 i ,其中 i = 0,...,k -1 ,用于某些 k 。概率是有理数 a(i)/ b ,可以安全地假设 b <1000000 (但可能不是 b <100 000 >)和 k <= 10

最有效的采样算法是什么?样本数量在 b 左右,即高。

我可以提出两种不完全令人满意的方法:

  1. 构造列表 c = [p(0),p(0)+ p(1),...,p(0)+ ... + p(k-1),1.5] < / em>
  2. 生成均匀分布的随机数 p 并返回 i ,这样 c [i] <= p

第二步是 k (对分)中的对数。我们可以做得更好吗?当然可以:

  1. 构造列表 c = [0,...,0,1,...,1,......,k-1,...,k-1] ,其中 i 的出现次数与 p(i)成正比。
  2. 生成均匀分布的随机数 p 并返回 c [floor(length(c)* p)]

第二步现在需要固定时间,但是计算可能会占用太多空间。

(如果此信息很重要,它将在Python3中实现。)

0 个答案:

没有答案