Qual é a probabilidade de que, entre 25 números aleatórios entre 1 e 100, o maior apareça mais de uma vez?


23

Em muitos jogos online, quando os jogadores concluem uma tarefa difícil, às vezes é dada uma recompensa especial que todos que concluíram a tarefa podem usar. geralmente é uma montaria (método de transporte) ou outro item de vaidade (itens que não melhoram o desempenho do personagem e são usados ​​principalmente para personalização da aparência).

Quando essa recompensa é dada, a maneira mais comum de determinar quem recebe a recompensa é através de números aleatórios. O jogo geralmente possui um comando especial que gera um número aleatório (provavelmente pseudo-aleatório, não aleatório criptografado) entre 1 e 100 (às vezes o jogador pode escolher outro spread, mas 100 é o mais comum). Cada jogador usa esse comando, todos os jogadores podem ver quem rolou o quê e o item é concedido à pessoa que rola mais alto. A maioria dos jogos possui um sistema interno, onde os jogadores apenas pressionam um botão e, quando todos pressionam o botão, o jogo faz o resto automaticamente.

Às vezes, alguns jogadores geram o mesmo número alto e ninguém os vence. isso geralmente é resolvido pelos jogadores que regeneram seus números, até que haja um número mais alto exclusivo.

Minha pergunta é a seguinte: Suponha um gerador de números aleatórios que possa gerar qualquer número entre 1 e 100 com a mesma probabilidade. Suponha que você tenha um grupo de 25 jogadores que geram 1 número com um gerador de números aleatórios (cada um com sua própria semente). Você terá 25 números entre 1 e 100, sem limitações sobre quantos jogadores rolam um número específico e nenhuma relação entre os números. Qual é a chance de o maior número gerado ser gerado por mais de um jogador? Em outras palavras, qual é a probabilidade de empate?


7
World of Warcraft eh?
— Behacad

11
sim, é uniforme aleatória, como indicado na pergunta (qualquer número entre 1 e 100 inclusinve tem a mesma probabilidade.
— Nzall

Boa pergunta, mas isso me parece uma maneira ruim de escolher um vencedor. Basta listar os jogadores de alguma forma (você pode dizer "nome em ordem alfabética" ou embaralhá-la e mostrar a todos a lista ou classificar de outra maneira) e escolher um número aleatório entre 1 e 25. O número correspondente ao jogador vence.
— Tim S.

2
Noobs, use DKP!
— Davor

2
Sugestão: dada uma amostra aleatória de , precisamos calcular usando o que sabemos da teoria das estatísticas da ordem. U { 1 , … , 100 } P ( X ( 24 ) < X ( 25 ) )X1 1,...,X25você{1 1,...,100}P(X(24)<X(25))
— Zen

Respostas:


25

Deixei

  • é o limite superior do seu intervalo, x = 100 no seu caso.xx=100
  • seja o número total de empates, n = 25 no seu caso.nn=25

Para qualquer número , o número de sequências de n números com cada número na sequência ≤ y é y n . Destas seqüências, o número que contém noy s é ( y - 1 ) n e o número que contém um y é n ( y - 1 ) n - 1 . Portanto, o número de seqüências com dois ou mais y s é y n - ( y - 1 ) ny≤xn≤yyny(y-1 1)nyn(y-1 1)n-1 1y O número total de seqüências de n números com o número mais alto y contendo pelo menos dois y s é x ∑ y = 1 ( y n - ( y - 1 ) n - n ( y - 1 ) n - 1 )

yn-(y-1 1)n-n(y-1 1)n-1 1
nyy
∑y=1 1x(yn-(y-1 1)n-n(y-1 1)n-1 1)=∑y=1 1xyn-∑y=1 1x(y-1 1)n-∑y=1 1xn(y-1 1)n-1 1=xn-n∑y=1 1x(y-1 1)n-1 1=xn-n∑y=1 1x-1 1yn-1 1

xn

xn-n∑y=1 1y=x-1 1yn-1 1xn

x=100,n=25

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

Este programa gerou

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

2
2000000,11957

xn

Simulei usando perl e obtive um 0,005 muito consistente. pastebin.com/gb7JMLt6
— agweber

xnx=20,n=515600/160000=0,0975x,ne a probabilidade da fórmula I derivada. Estou curioso para saber qual é a fonte do desacordo entre nosso código.
— TooTone

4
1070.119983,n = 10^7; Total[Boole[Equal @@ (#[[Ordering[#, -2]]])] & /@ x = RandomInteger[{1, 100}, {n, 25}]] / n

3

Eu consideraria encontrar a probabilidade de ter um vencedor único primeiro

x(251 1)(x-1 1)2410025y-1 1

O vencedor pode ganhar com seu número igual a 2 a 100, portanto a probabilidade total é

∑Eu=210025(Eu-1 1)2410025=25∑Eu=1 199Eu2410025=-1 14+25∑Eu=1 1100Eu2410025≈-1 14+251 124+1 110024+1 1+1 1210024+2421 161002310025=0,88

10023

1 1-0,88=0,12


-3

p1 1-pp=1 1∗(1 1-1 1/100)∗(1 1-1 1/100)......∗(1 1-1 1/10)=(1 1-1 1/100)24P=1 1-p=1 1-(1 1-1 1/100)24=0,214


isso significa que a probabilidade é de 21,4%? parece bastante alto, mas, novamente, o paradoxo do aniversário tem uma resposta surpreendente semelhante. obrigado.
— Nzall 14/03

6
-1 Como está, esta resposta não está correta. A resposta correta foi fornecida pelo @TooTone.
— COOLSerdash
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.