如何构造一个0.5的概率发生器简单事件的概率概率

概率论的起源_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
概率论的起源
简​要​介​绍​资​料​的​主​要​内​容​,​以​获​得​更​多​的​关​注
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢1203人阅读
1.有一个随机数发生器,能以概率p生成0,以概率1-p生成1,问如何做一个随机数发生器&
使得生成0和1的概率相等。&
2.用上面那个生成0和1的概率相等的随机数发生器,怎样做一个随机数发生器使得它生成&
的数在1...N之间均匀分布。&
&第一题比较简单,可以用原发生器周期性地产生2个数,直到生成01或者10。&
由于生成01和10的概率均为p(1-p),故预先任意指定01为0(或1),10为1(或0)即可。即可等概率的产生0和1,但然,要考虑其他组合的不可用性,获取题目本身就隐含了这个bug或是缺陷吧。&
int Rand()
int i1 = rand();
int i2 = rand();
if(i1==0 && i2==1)
else if(i1==1 && i2==0)
return Rand();
return -1;
& & &第二题,需要一些思考......想到位运算,因为i个二进制位随机的选择0或1,可以随机的构成0~2^i的数,而这些数构成了所有的组合数。因此是等概率出现的。比如:2位二进制位,这两位可以随机为0或1而互不影响,随机的构成了00 01 10 11,它们代表了四个数,且这四个数是等概率的。&
int newRand()
int result = 0;
for(int i = 0 ; i & ++i)
if(Rand() == 1)
result |= (1&&i);
if(result & n)
return newRand();
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:391027次
积分:5649
积分:5649
排名:第2145名
原创:177篇
转载:136篇
评论:29条
(13)(2)(2)(5)(3)(9)(6)(7)(3)(7)(9)(2)(5)(2)(7)(8)(7)(4)(5)(1)(3)(4)(6)(7)(4)(1)(3)(8)(1)(1)(3)(3)(3)(14)(10)(16)(15)(5)(19)(26)(12)(1)(15)(13)(12)(1)大学数学论文构造概率模型的解题策略_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
大学数学论文构造概率模型的解题策略
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢随机数函数a,产生0的概率0.7,1的概率0.3。怎样用该随机函数生成一个随机函数b,使得b产生0和1的概率为0.5_百度知道
随机数函数a,产生0的概率0.7,1的概率0.3。怎样用该随机函数生成一个随机函数b,使得b产生0和1的概率为0.5
我有更好的答案
#include &stdio.h&#include &stdlib.h&#include &time.h&void main(){ srand(time(NULL)); for(int i=0;i&10;i++) {
a = rand()%2;//随即产生0-1的数,只有这两个数,概率肯定是一样的都是0.5
printf(&%d\n&,a); }}
用0,1随机生成10000个数。按理说应该有00个1。如果0少于7000个则b=0,如果0多与7000个则b=1。如果0等于7000个就再来一次。int alpha = 0;int beta = 0;int total = 0;for (int t=0;t&10000;t++){ int small = 0; int big = 0; for (int i=0;i&10000;i++) {
int val = rand() % 10;
if (val&3) small++;
else big++; } if (big&7000) alpha++; else if (big&7000) beta++; if (big!=7000) total++;}printf(&%f-%f=%f&,(float)alpha/(float)total,(float)beta/(float)total,(float)alpha/(float)total-(float)beta/(float)total);程序里生成了10000次b,生成0的概率为,0.504892。生成1的概率为0.495108。
// a()的产生很简单int a(){
srand(time(NULL));
return (rand()%10) & 7;}// b()需要利用a()实现,较复杂int b(){
int sum = 0;
for(int i=0;i&RAND_MAX; ++i) sum += a();
return (sum & RAND_MAX*3/10);}
int c=random%10;//0~9if(a==1&&c&2)//0.3*0.7return 0;else if(a==0&&c&3)//0.7*0.3return 1;else if(c&4)//0.5return 0;else//0.5return 1
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 概率发生器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信