发布网友 发布时间:2022-05-01 02:38
共1个回答
热心网友 时间:2022-06-23 19:57
这个要看你的具体需求,有几种方法可以推荐。
首先最简单:rejection sampling,思维方式非常简单,容易实现,但效率很差更复杂:逆提供,直接使用累积分布函数的逆函数(CDF)生成随机数,但涉及更复杂的计算误差函数的小块土地(非初等函数)更好:盒子-穆勒算法,生成在很长一段时间的正态分布随机数的“标准”算法。
box- muller算法的特点是效率高,易于计算(只有基本的函数)。参见:boxer - muller变换目前是最好的(与其他实用算法相比):ziggurat算法是非常有效的,许多现代编程语言都使用这个算法。
Ziggurat不是人的名字,它的意思是“Ziggurat”,而不是埃及的金字塔,但是古苏美尔人的金字塔结构建造了祭坛:神殿由多个平台组成,平台的每一层都是长方形的,椭圆形的或正方形的,面积逐渐从底部下降到顶部。ziggurat算法实际上是一个改进的拒绝采样,包含一个查找表操作。
所以不管是那种算法,都需要你去花些功夫来了解一下,是不是适合自己,是不是适合去解决现在自己正在面临的问题,毕竟别的经验都只是一些参考。在自己的实践中逐步去发现自己的问题,找到最适合自己的很重要