2012年8月15日
摘要: 粗一想,还不知道怎么下手。。思想如下: 设计生成一个2位二进制的数,用BIASED-RANDOM,只有四种结果:00,01,10,11. 因为生成0和1的概率不一样,但是01和10的概率是一样的。如果不处理00,11的输出,只输出01,10的输出,显然,其概率都是1/2。代码简单: int RANDOM() x = BIASED-RANDOM(); y = BIASED-RANDOM(); if(x==0 && y == 1) return 0; if(x== 1 && y ==0) return 1;// 其生成0和1的概率都是1/2. 满足条件 阅读全文
posted @ 2012-08-15 16:51 笔记吧... 可能只有自己看得懂 阅读(929) 评论(0) 推荐(1)
摘要: http://hi.baidu.com/mianshiti/blog/item/416d8ed07cef6e3a960a1611.html【一个类似问题的面试题链接】思想: 用RANDOM(0,1)生成随机的k = b-a+1位2进制随机数,即:value = n1,n2,n3,...nk. 那么,其值等于:value = n1*2^0+n2*2^1+....nk*2^k. 分析知道,value的值在0到2^k-1之间,那么我们做这样的设计,把0到2*k-1等分为k分,分别对应到a,a+1,...,b-a+1。 得到的随机数value落在k分的哪段就是a,a+1,...,b-a+1的哪个值。. 阅读全文
posted @ 2012-08-15 15:28 笔记吧... 可能只有自己看得懂 阅读(661) 评论(2) 推荐(0)