已知随机函数old_rand(),以p的概率产生0,以1-p的概率产生1,
//现在要求设计一个新的随机函数newRand(),使其以等概率生成1和0
我当时用的是求异或,对此之后概率值最终会收敛到0.5,0.5。
正确答案是:http://www.51projob.com/a/souhu/20120911/651.html
[cpp] view plaincopy
- int old_rand()
- {
- return rand()%2;
- }
- int new_rand()
- {
- int first_bit = old_rand();
- int second_bit = old_rand();
- if (first_bit == 1 && second_bit == 0)
- return 1;
- elseif (first_bit == 0 && second_bit == 1)
- return 0;
- else
- return new_rand();
- }
通过分析已有的随机函数old_rand(),利用异或操作,设计了一个新的random函数new_rand(),确保生成0和1的概率均等。当old_rand()连续两次返回不同结果时,返回它们的异或值,从而达到概率平衡。详细解决方案参考链接:http://www.51projob.com/a/souhu/20120911/651.html
117

被折叠的 条评论
为什么被折叠?



