陈默 2009年09月06日 星期日 16:22 | 2662次浏览 | 0条评论
学习笔记
人到齐才开会的等待时间——伽马分布的随机数函数
当事情发生一定次数后才做某一件事情,如等够了4个人在打扑克(O_O)~
公式:x=-k*ln(r1*r2*..*rn);
其中,k为等待事件需要发生的次数,n为事情每n段时间发生一次。
//~ gamma,伽马分布函数
//~ 当某一事件发生k次之后才做另一件事情,而我们等待的事件每n时间发生一次
//~ 返回值为做另一件事情之前所等待的时间
double gama(int k,int n)
{
double s=1.0;
int i;
for(i=1;i<=k;i++) s*=rnd(1);
return -n*log(s);
}
设去参加某种活动,平均2分钟来1个人,每等够3个人则开走一辆出租车,模拟人等待开车所需的时间,程序运行一次,模拟500次。
int main(int argc,char** argv)
{
static int a[25],i,j,k=3,m=500,n=2;
double s;
rnd(-2);
printf("平均2分钟来一个人,够3个人开走一辆车,模拟等待的时间:\n");
for(i=1;i<=m;i++)
{
s=gama(k,n);
printf("%lf ",s);
j=(int)(s+0.5); //个人认为,这里+0.5之后去整相当于四舍五入,不知是不是
if(j>24) j=24;
a[j]++;
}
for(j=0;j<=24;j++) printf("等待%3d分钟,有%3d人次\n",j,a[j]);
rnd(-3);
return 0;
}
以上,都需要include在0904blog里的那个rndlib.h的头文件
Zeuux © 2024
京ICP备05028076号
暂时没有评论