C#伪随机抽奖系统出来的结果不符合概率,求解。

2020-04-08 15:24:39 +08:00
 leeneo
我想做一个伪随机的抽奖系统,抽不中概率会慢慢增加。思路大概是这样:中奖概率 X%——就在 1~100 中随机抽取 X 个数当“中奖号码池”,然后再随机抽取一个数进行比对,在其中就视为中奖,不中就抽取 N(不中的抽奖次数+1)倍 X 的数量放进“中奖号码池”,然后再抽取一个数字进行比对,直到中奖 就使 N=0 。
结果就是中奖概率偏高,比如 3%的中奖概率,结果有将近 10%的中奖数(一万次抽奖)。
我创造伪随机数用的是 RNGCryptoServiceProvider() 。
1423 次点击
所在节点    问与答
9 条回复
sun1991
2020-04-08 15:55:47 +08:00
看不懂 LZ 描述. 试试关键字: weighted random
shintendo
2020-04-08 16:00:08 +08:00
看不懂描述+1
你说的偏高是相对什么偏高?你不是抽不中会加概率吗?
leeneo
2020-04-08 16:37:40 +08:00
@shintendo 抽不中会加增加概率,但是大数量下的测试结果和预定概率有偏差(偏高)。
leeneo
2020-04-08 16:43:14 +08:00
@sun1991 简单的来说就是,抽奖不中就不断扩大中奖号码池以达到中奖概率增加的效果,但是在测试之后发现实际中奖概率偏高,3%的设定中奖概率,结果有将近 10%的中奖概率(一万次抽奖一千多的中奖次数)。
leeneo
2020-04-08 16:47:40 +08:00
中奖概率 X% 多次不中
抽奖次数 1:号码池数量 X
抽奖次数 2:号码池数量 X*2
抽取次数 3:号码池数量 X*3
N: X*N
kop1989
2020-04-08 16:51:39 +08:00
这不是很正常么,因为你的中奖概率在提高啊,你设定的 3%是首次中奖概率
@leeneo
kop1989
2020-04-08 16:53:03 +08:00
你第一天吃一个馒头,没吃饱的话第二天吃两个,还没饱第三天吃三个,然后你问 7 个馒头为何 3 天就吃完了?
leeneo
2020-04-08 18:06:23 +08:00
@kop1989 看来是我对伪随机的理解错了。 请问那伪随机应该是如何设计呢?
sun1991
2020-04-08 21:43:06 +08:00
@leeneo 感觉类似 BJ 车牌摇号的规则, 一次抽不中就下次就会增加抽中的概率? 那样的话应该增加权重啊. 关键字 weighted random.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/660470

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX