栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

产生poisson和二项式随机数的算法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

产生poisson和二项式随机数的算法?

poisson分布

下面是维基百科说,克努特说,这样做:

init:     Let L ← e^(−λ), k ← 0 and p ← 1.do:     k ← k + 1.     Generate uniform random number u in [0,1] and let p ← p × u.while p > L.return k − 1.

在Java中,将是:

public static int getPoisson(double lambda) {  double L = Math.exp(-lambda);  double p = 1.0;  int k = 0;  do {    k++;    p *= Math.random();  } while (p > L);  return k - 1;}

二项分布
继续阅读Luc Devroye(我从Wikipedia文章链接到该书)的非均匀随机变量生成(PDF)的第10章,可以得出以下结论:

public static int getBinomial(int n, double p) {  int x = 0;  for(int i = 0; i < n; i++) {    if(Math.random() < p)      x++;  }  return x;}

请注意
这些算法都不是最优的。第一个是O(λ),第二个是O(n)。根据这些值通常的大小以及您需要调用生成器的频率,您可能需要更好的算法。我上面链接的论文有更复杂的算法,这些算法可以在恒定时间内运行,但是我会将这些实现留给读者练习。:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399982.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号