从1到100之间的25个随机数中,最高的概率出现多次的概率是多少?


23

在许多在线游戏中,当玩家完成一项艰巨的任务时,有时会给予特殊奖励,每个完成任务的人都可以使用。这通常是坐骑(运输方式)或其他虚荣物品(不会提高角色性能的物品,主要用于外观定制)。

当给出这样的奖励时,确定谁获得奖励的最常见方法是通过随机数。游戏通常有一个特殊的命令,该命令会生成一个介于1到100之间的随机数(可能是伪随机数,而不是加密安全随机数)(有时玩家可以选择另一种价差,但100是最常见的)。每个玩家都使用此命令,所有玩家都可以看到谁掷出了哪些东西,并且该物品被授予了掷骰最高的人。大多数游戏甚至都具有内置系统,玩家只需按下一个按钮,而每个人都按下按钮后,游戏就会自动完成其余的工作。

有时,有些玩家会产生相同的高数字,而没人能击败他们。这通常由那些重新生成号码的玩家来解决,直到有一个唯一的最高号码为止。

我的问题如下:假设一个随机数生成器可以以相同的概率生成1到100之间的任何数字。假设您有一组25位玩家,每个玩家使用这样的随机数生成器生成1个数字(每个都有自己的种子)。您将拥有25个介于1到100之间的数字,对多少个掷骰子的玩家没有限制,并且数字之间没有关系。超过1个玩家产生最高生成数字的机会是什么?换句话说,平局的可能性是多少?


7
魔兽世界吗?
Behacad 2014年

1
是的,它是均匀随机,如问题陈述(1个100之间。内含任意数量的具有相同的概率。
Nzall

这是一个很好的问题,但这使我震惊,这是选择获胜者的一种糟糕方法。只需以某种方式列出玩家(您可以说“按字母顺序命名”,或将其随机排列并向所有人显示列表,或以其他方式排序),然后从1到25之间选择一个随机数。对应于玩家的数字获胜。
Tim S.

2
新手,请使用DKP!
Davor 2014年

2
建议:给定来自的随机样本,我们需要计算使用我们从订单统计理论中了解的信息。 U { 1 ... 100 } P X 24 < X 25 X1,,X25U{1,,100}P(X(24)<X(25))
2014年

Answers:


25

  • x = 100x是您范围的上限,在您的情况下,。x=100
  • n = 25n是总抽奖次数,在您的情况下为。n=25

对于任何数字,数字的序列数为,序列中的每个数字。在这些序列中,不包含 s 的数为,而包含一个的数为。因此,具有两个或多个 s 的序列数为 包含最高的个数 为序列的总数至少两个是 Ñ ÿ ÿ Ñ ý Ý - 1 ñ Ý Ñ Ý - 1 ñ - 1个 Ÿ Ÿ ñ - Ý - 1 ñ - ñ Ý - 1 ñ - 1 ñ ÿ ÿ X Σ y = 1y ny 1yxnyyny(y1)nyn(y1)n1y

yn(y1)nn(y1)n1
nyy
y=1x(yn(y1)nn(y1)n1)=y=1xyny=1x(y1)ny=1xn(y1)n1=xnny=1x(y1)n1=xnny=1x1yn1

序列的总数仅为。所有序列的可能性均等,因此概率为 xn

xnny=1y=x1yn1xn

在我得出的概率为0.120004212454。x=100,n=25

我使用以下Python程序进行了测试,该程序对手动匹配的序列进行计数(对于低),并使用上述公式进行模拟和计算。x,n

import itertools
import numpy.random as np

def countinlist(x, n):
    count = 0
    total = 0
    for perm in itertools.product(range(1, x+1), repeat=n):
        total += 1
        if perm.count(max(perm)) > 1:
            count += 1

    print "Counting: x", x, "n", n, "total", total, "count", count

def simulate(x,n,N):
    count = 0
    for i in range(N):
        perm = np.randint(x, size=n)
        m = max(perm)
        if sum(perm==m) > 1:
            count += 1
    print "Simulation: x", x, "n", n, "total", N, "count", count, "prob", count/float(N)

x=100
n=25
N = 1000000 # number of trials in simulation

#countinlist(x,n) # only call this for reasonably small x and n!!!!
simulate(x,n,N)
formula = x**n - n*sum([i**(n-1) for i in range(x)])
print "Formula count", formula, "out of", x**n, "probability", float(formula) / x**n

该程序输出

Simulation: x 100 n 25 total 1000000 count 120071 prob 0.120071
Formula count 12000421245360277498241319178764675560017783666750 out of 100000000000000000000000000000000000000000000000000 probability 0.120004212454

2
+1 R中的简短模拟与此结果兼容。经过仿真,我得到了的估计值。2000000.11957
COOLSerdash

@COOLSerdash谢谢你。我通过在和较小值上发布(我将在一分钟内列出python程序)之前列出所有排列来测试我的公式,但是我没有想到要模拟所提出的实际问题。xn
TooTone 2014年

我使用perl进行了仿真,得到非常一致的0.005。pastebin.com/gb7JMLt6
agweber 2014年

@agweber感谢您编写和运行模拟。我不是Perl程序员,所以我无法在看起来不错的高水平上评论您的程序的详细信息。您是否使用已知概率测试了仿真代码,这些概率很容易通过简单地计算低和来生成?例如,确切概率为。我还用模拟代码增强了Python程序,该代码与低的确切概率以及我得出的公式的概率相符。我很好奇,我们的代码之间存在分歧的根源是什么。xnx=20,n=515600/160000=0.0975x,n
TooTone

4
数学模拟与次迭代产生这很可能是通过前四位是正确的。代码是1070.119983,n = 10^7; Total[Boole[Equal @@ (#[[Ordering[#, -2]]])] & /@ x = RandomInteger[{1, 100}, {n, 25}]] / n
whuber

3

我会考虑找到首先拥有独特赢家的可能性

拥有唯一获胜者且其人数为概率等于,因为获胜者有25种选择,而剩余的数字范围可以从1到x(251)(x1)2410025y1

获胜者可以赢得等于2到100的数字,因此总概率为

i=210025(i1)2410025=25i=199i2410025=14+25i=1100i241002514+25124+110024+1+1210024+242161002310025=0.88

在这里,我使用了大约的近似值 作为参考:https ://en.wikipedia.org/wiki/Faulhaber的s_formula10023

因此,平局的概率为10.88=0.12


-3

这似乎与生日悖论(http://en.wikipedia.org/wiki/Birthday_problem)非常相似,唯一的区别是在这种情况下,您不想匹配任何数字,而只希望匹配最高的数字。计算的第一步计算出非随机数重叠的概率()。(请参见上面的链接),然后25个数字中的一些重叠的概率为,其中p是您已经计算出的概率。在这种情况下,25个数字与最大值不重叠的概率为: 那么您寻找的概率为1 - p p = 1 * 1 - 1 / 100 * 1 - 1 / 100 * 1 - 1 / 10 = 1 - 1 / 100 24 P = 1 - p = 1 - 1 - 1 / 100p1pp=1(11/100)(11/100)......(11/10)=(11/100)24P=1p=1(11/100)24=0.214


这是否意味着概率为21.4%?似乎很高,但话又说回来,生日悖论也有类似的令人惊讶的答案。谢谢。
Nzall 2014年

6
-1就目前而言,此答案不正确。正确答案由@TooTone提供。
COOLSerdash
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.