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?

Nzall
fonte
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 ) nyxnyyny(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-ny=1 1x(y-1 1)n-1 1=xn-ny=1 1x-1 1yn-1 1

xn

xn-ny=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
TooTone
fonte
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=25Eu=1 199Eu2410025=-1 14+25Eu=1 1100Eu2410025-1 14+251 124+1 110024+1 1+1 1210024+2421 161002310025=0,88

10023

1 1-0,88=0,12

Gary
fonte
-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

Michel G
fonte
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