1
no1xsyzy 2018-01-05 13:13:37 +08:00
比如 x=7,10^7 mod 7≠0,所以并不存在完全等概率。
至于算法 1,在 x=7 的时候,开出 1+7*i, i=0,1,2,3,...都能得到最终=1 重新看一遍取余 |
2
vjnjc 2018-01-05 14:02:50 +08:00
1 楼+1。
感觉算法 2 太啰嗦,也不是等概率。 你要么在 1 的基础上升级下算法,所有的数都是 1index 的 假设 y 在区间[1, 10000000]中,x 在区间[1, 7], 10000000 mod 7 = 3,那么把最后面 4 个数字单独走算法 3. 也就是 if x in [1,9999995] 算法 1 else 算法 3 所谓的算法 3 就是 9999996 9999997 9999998 9999999 这 4 个数字均匀的映射到[1, 7]里面去,不好意思这个算法我写不出来(哈哈哈哈哈 |
3
zoeyzhang 2018-01-05 15:59:06 +08:00
根据 index 取值不就好了?
|
4
ballshapesdsd 2018-01-05 16:06:42 +08:00
智商不够,看不懂算法 2
|
5
ballshapesdsd 2018-01-05 16:28:28 +08:00
看了 2 楼,感觉楼主的问题是,如何把 x 面的均匀色子,变成 y 面的色子。
y>x,明显不可能。 y=x,不需要转换。 x%y==0,很简单。 x%y!=0,从我感觉上来讲,貌似不可能。把条件放宽一点,x 面的色子可以扔无数次,根据概率的加和和乘法原理,无论怎么组合,概率的分母都应该是 x 的 n 次方,x 的 n 次方%y 仍然!=0,所以貌似是无解的。 不信你试试用 3 面的色子,看看能不能产生 1/2 的概率。 |
6
qidizi OP 感谢各位围观,我补充一下,
这个算法的目的是解决这个问题: 奖品被设定成达到 n 人就开奖的形式; 贡献值大的人中奖机会大; 开奖方式够随机公平,能经得起“我们开奖方绝对无法做手脚”推论; 所以我想了上面的方案。 * 每人按先后顺序领号 * 每人的贡献值基数是 1,根据上面的编号做先后顺序,以贡献值为区间组合得到一个连续的区间 1~x,也就是贡献是 10 的人且在第一位,那它的得奖区间为 1~10 ; * 人数达到后,公示 1 天;大家可以拿上面信息存档; * 第三方 7 星彩每期的开球是随机的 0~9 的数字,7 个球,刚好解决随机公正问题,设这个组合数为 y * 最后我们和用户都可以拿到存档区间 x 根据 y 计算出中奖那个数,然后,看它在那个人的中奖区间, * 最后,拥有这个区间的用户得到这个奖品; |
7
ballshapesdsd 2018-01-05 16:47:37 +08:00
贡献值是 x,10**7%x!=0 的情况下绝对做不到完全公平
@qidizi |
8
shd 2018-01-05 16:58:21 +08:00
这其实就是一元夺宝吧,奖品 a 所需的贡献值为 100 分,相当于卖 100 元,每份 1 元,对应的幸运码[0-99],参与者按认购的份额获取随机幸运码,例如 a 认购 10 份,获取的应的幸运码例如[1, 3,5,19,28,45,58,59,79,91]这 10 个码,每人个参与者的码不同,一共一百个,最后根据外部彩票的数字用 100 取余,得到的幸运码即为开奖结果。
|
9
qidizi OP 类似于 1 元夺宝,但是我们目的是足够的人参与情况下,贡献值与概率成正比,公平且不容置疑即可。因为变量只要用我们能触及的数据就有值得怀疑。大家可以提供另外一个方案也行
|