专栏名称: 算法与数据结构
算法与数据结构知识、资源分享
目录
相关文章推荐
九章算法  ·  Meta猛发offer!杀疯了! ·  17 小时前  
九章算法  ·  亚马逊加大5天RTO强度!拒绝残疾员工远程办公! ·  17 小时前  
算法爱好者  ·  7000 万年薪!挖 AI 领军大牛! ·  昨天  
算法爱好者  ·  震撼!美国卡脖子下,中国工程师拖 4 ... ·  2 天前  
九章算法  ·  FAANG资深面试官,为你解决找工/面试难题! ·  2 天前  
51好读  ›  专栏  ›  算法与数据结构

生成特定分布随机数的方法

算法与数据结构  · 公众号  · 算法  · 2017-09-29 21:33

正文

请到「今天看啥」查看全文


random

  • import math

  • def exponential_rand ( lam ):

  • if lam <= 0 :

  • return - 1

  • U = random . uniform ( 0.0 , 1.0 )

  • return (- 1.0 / lam ) * math . log ( U )


  • Acceptance-Rejection Method


    一般来说ITM是一种很好的算法,简单且高效,如果可以使用的话,是第一选择。但是ITM有自身的局限性,就是要求必须能给出CDF逆函数的解析表达式,有些时候要做到这点比较困难,这限制了ITM的适用范围。


    当无法给出CDF逆函数的解析表达式时,Acceptance-Rejection Method(下文简称ARM)是另外的选择。ARM的适用范围比ITM要大,只要给出概率密度函数(下文简称PDF)的解析表达式即可,而大多数常用分布的PDF是可以查到的。


    ARM算法描述


    1. 设PDF为f(x)f(x)。首先生成一个均匀分布随机数X∼Uni(xmin,xmax)

    2. 独立的生成另一个均匀分布随机数Y∼Uni(ymin,ymax)

    3. 如果Y≤f(X),则返回X,否则回到第1步


    ARM算法说明


    通过一幅图可以清楚的看到ARM的工作原理。



    ARM本质上是一种模拟方法,而非直接数学方法。它每次生成新的随机数后,通过另一个随机数来保证其被接受概率服从指定的PDF。


    显然ARM从效率上不如ITM,但是其适应性更广,在无法得到CDF的逆函数时,ARM是不错的选择。







    请到「今天看啥」查看全文