作者goliathplus (No Comment)
站内Programming
标题Re: [问题] 机率问题
时间Sat Jun 1 01:22:17 2013
※ 引述《hirabbitt (兔子)》之铭言:
: 有未知数量的红球与绿球
: 希望给出红球的机率是绿球的三倍
: 不知道应该怎麽做比较好
: 有想过先把红绿球分开
: 然後再75%取红的25%取绿的
: 但是因为数量有可能非常庞大
: 使用这种方式虽然精确度100%但是难以保证时间
: 另外也想过先用75%25%决定要红球还绿球
: 目标确定後就一直取取到想要的颜色出现为止
: 但也可能红绿球比例相差过大(例如1颗绿球配99999颗红球)
: 或根本没有某色球而造成无穷回圈
: 考虑到根本没有某色球的情况
: 精确度其实没有要求到100%
: 目前我的想法是每次都决定要红球还绿球(一样用75%25%)
: 然後再去取球
: 取出错的颜色时就用75%25%重新决定要红球还绿球
: 不知道有没有其他更好的方式?
: 感谢
int n = totalNum;
int redTotal = ((totalNum*3)/4); // total number of red ball
// 3/4 of total ball in your case
while (n>0)
{
r = rand()*n;
if (r<redTotal){
isRedBall();
redTotal --;
}else{
isGreenBall();
}
n--;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.34.253.77
1F:推 hirabbitt:redTotal不一定是((totalNum*3)/4)耶 60.248.111.82 06/03 09:36
2F:→ goliathplus:要1:3不是? 也可以改成其他需要的值 211.22.107.139 06/03 17:03
3F:推 hirabbitt:预期产出要1:3 但是原集合非1:3 60.248.111.82 06/04 11:28
4F:推 hirabbitt:喔喔大概懂你的意思了 isRedBall是去取 60.248.111.82 06/04 11:31
5F:→ hirabbitt:红球对吧 但现在卡在红球可能很少或根本 60.248.111.82 06/04 11:32
6F:→ hirabbitt:没有红球 那isRedBall就会跑很久或卡住 60.248.111.82 06/04 11:32