






















这是一个创建于 943 天前的主题,其中的信息可能已经有所发展或是发生改变。
假设抽奖有两个奖品 A 和 B ,中奖概率都是 50%,我的实现是用随机数来确定每次抽奖中哪个,但是问题是会有误差,比如某次的抽奖统计结果是:A 被抽中 500 次,B 被抽中 471 次。产品经理认为误差有点大,他想要比较精准的概率。
我现在想实现一个绝对公平的抽奖算法,例如,第一次抽奖可以是随机的,比如中了 B ,那么第二次一定中 A ,第三次一定中 B ,循环往复。
而这种在只有两个奖品的时候,还是好实现的,问题是奖品可能是三个,四个......,中奖概率也是可以任意分配的,这样的有什么好的算法去实现吗?
第 1 条附言 · 2023 年 11 月 14 日
1 brader 2023 年 11 月 14 日数学概率就是这样的啊,只有次数足够大的时候,概率才会比较接近。 |
3 ricwangcom 2023 年 11 月 14 日这还需要算法?按请求顺序下发奖品不就行了[狗头],ABABABABABABABABABABABAB |
5 R18 2023 年 11 月 14 日奖品总数是固定的吗?如果是这样,就生成好队列。每次都取一个出来,取到哪个是哪个。 |
6 murmur 2023 年 11 月 14 日如果是公司内部抽奖,领导主动放弃参与,员工随机抽,这就是最公平的 哪里有绝对公平 |
7 murmur 2023 年 11 月 14 日你的需求来看不像抽奖,倒像是原神的保底,如果第一次歪了第二个金一定是当期 up |
8 bsg1992 2023 年 11 月 14 日游戏的暴击 PRO 算法 可以参考一下,稍微改一下就能满足你这个需求 |
9 chairuosen 2023 年 11 月 14 日count%2===0?A:B |
10 whosesmile 2023 年 11 月 14 日你可以设置一个奖品数组:P = [A,B,C,D],然后用随机数选取 [0 - length),选到了就将对应的奖品移除,重置 P 值 上面是假定每个奖品只有一个,如果你有 500 个 A ,500 个 B ,类似的处理为: |
12 whileFalse 2023 年 11 月 14 日 via Android有那么难吗... |
13 leonshaw 2023 年 11 月 14 日算出前面已经抽出的每种奖品频率,取目标概率减频率最大的那个 |
15 sillydaddy 2023 年 11 月 17 日@sillydaddy 我在上面的回复有点武断。 今天又思考了一下这个问题,发现有一个很简单的方法,就是增加抽奖的次数。比如你想抽 1000 次分配给 A 和 B ,但觉得抽 1000 次的标准差(你说的误差)太大,那就可以抽 10000 次,然后用 10000 次抽奖的最终结果除以 10 。比如 10000 次里面 A 得 5050 次,B 得 4950 ,分别除以 10 ,得到 A 得 505 次,B 得 495 次。为什么举这个数字呢,因为投掷 10000 次硬币,标准差就是 50 。相比投掷 1000 次时的标准差 15 ,并不是增大到 10 倍,而是只有 3 倍左右。 除以 10 这个操作,相当于把标准正态分布的图像在 x 轴方向上压扁了,然后在 1 个标准差内的概率就增大了。如果想实时显示抽奖过程,那就累积 A 或 B 的中奖次数,每累积到 10 次,就算作真实中奖 1 次。当抽完 10000 次,A 和 B 真实中奖总次数就是 1000 次。 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。