小算法求助(关于概率)

rockets311 2012-08-03 03:33:53
模拟一个概率事件:程序从入口进来后可能会执行三个分支A、B、C,其中执行A的概率是80%、执行B的概率是50%,执行C的概率是20%。
...全文
143 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sk811229 2012-08-03
  • 打赏
  • 举报
回复
楼主的命题很有意思,首先分析下它的数学模型。
假设是在一个系统内,三个事件的概率分别为 80%,50%,20%,这是不可能的,因为全部加起来总的概率大于 1 了。就好像下面的方程组在实数范围内应该是无解的一样:
a/(a+b+c)=0.8
b/(a+b+c)=0.5
c/(a+b+c)=0.2
所以我认为三个事件应该是相互独立互不干扰的。

算法设计:首先取得一个随机数,然后对这个随机数对 10 取模,根据余数确定事件是否执行(注意不是根据余数确定执行哪个事件)。并且由于三个事件互相独立,每判定一次是否执行事件就需要取一次随机数。所以在程序中不能使用 switch 语句,只能使用 if() else 语句判断。

int i;
int RandomInt() //定义一个取得随机数的函数
{
......
}
if(((i=RandomInt()%10)==8)||(i==9)) //余数为8或者9时
{
//执行概率为20%的事件3
}else if(((i=RandomInt()%10)>0)&&(i<6)) //重新取得随机数并对10取模进行判定是否在0-6之间
{
//执行概率为50%的事件2
}else if(((i=RandomInt()%10)>=0)&&(i<=8)) //重新取得随机数并对10取模进行判定是否为0-8
{
//执行概率为80%的事件
}

因为前两个事件的概率太高,为了保证低概率的事件也有机会执行,我先判定了低概率的事件,还有上面的代码不一定严谨,只是为了方便说明问题。

最后,如果说是同一系统下的三个事件,比如说概率为:20%。30%,50%,就只需要取一次随机数的模。依次判定就可以了,并且可以使用switch语句。
linhx_syg 2012-08-03
  • 打赏
  • 举报
回复
坐等程序高手解析
wby13579 2012-08-03
  • 打赏
  • 举报
回复
一个事件要分成A:0.8、B:0.5、C:0.2,从逻辑上说A与B中有共同符合的条件,存在两个不确定因素
首先共同条件占整个事件比从0.00...01到0.5都有可能
当是共同条件,LZ要如何执行?


坐等高手解答
iGoodLoser 2012-08-03
  • 打赏
  • 举报
回复
这个问题不对吧,总共有三个分支,也就说执行三个分支的总概率是1,但是楼主的概率不符合实际情况啊
iGoodLoser 2012-08-03
  • 打赏
  • 举报
回复
楼上的概率不对,成了8/15,5/15,2/15了,与题目不符
daxiang253 2012-08-03
  • 打赏
  • 举报
回复
把8个A,5个B,2个C 放入不排序的数组中
再直接遍历判断就可以了
gukuitian 2012-08-03
  • 打赏
  • 举报
回复
数组里放8个A,5个B,2个C,
随机(0-14)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧