摘要: 问题:有函数rand5(),它能够等概率生成[0,5)之间的整数。由rand5()构造rand(n)使其能够等概率生成[0,n)之间的整数。思路1:有rand5()先生成等概率生成0和1的rand01(),有了rand01就可以像上一篇文章一样生成rand(n)。思路2:rand5和rand01有何区别?一个是生成01,一个是生成01234,(一个以2为基,一个以5为基),既然rand01能用来构造rand(n),那么rand5也可以通过同样的原理得到rand(n).Java代码://用rand5生成rand(n) public int rand2(int n){ whil... 阅读全文
posted @ 2013-09-21 16:53 orchid 阅读(687) 评论(0) 推荐(0) 编辑
摘要: 问题:有函数rand01()能够等概率的生成0和1,用rand01生成rand(n),使其能够等概率的生成0-n-1的整数。java代码: 1 public int rand(int n){ 2 while(true){ 3 int bits=(int)Math.ceil((Math.log(n)/Math.log(2))); 4 int v=0; 5 for(int i=0;i<bits;i++){ 6 if(random01()==1){ 7 ... 阅读全文
posted @ 2013-09-21 16:21 orchid 阅读(621) 评论(0) 推荐(0) 编辑
摘要: 问题:现有函数rand()能够以p的概率生成0,1-p的概率生成1,利用此函数新函数newrand()使其能够等概率的生成0和1。int newrand(){ while(true){ int r1=rand(); int r2=rand(); if(r1==0 && r2==1){ return 0; } if(r1==1 && r2==0){ return 1; } }//while end} 分析:r1和r2的所有情况:(1)r1=0,r2=0 概率p*p(2)r1=0,r2=1... 阅读全文
posted @ 2013-09-21 15:40 orchid 阅读(663) 评论(0) 推荐(0) 编辑