Qual è la probabilità che da 25 numeri casuali tra 1 e 100, il più alto appaia più di una volta?


23

In molti giochi online, quando i giocatori completano un compito difficile, a volte viene dato un premio speciale che tutti coloro che hanno completato il compito possono usare. di solito si tratta di un supporto (metodo di trasporto) o di un altro oggetto di vanità (oggetti che non migliorano le prestazioni del personaggio e sono utilizzati principalmente per la personalizzazione dell'aspetto).

Quando viene data una tale ricompensa, il modo più comune per determinare chi ottiene la ricompensa è attraverso numeri casuali. Il gioco di solito ha un comando speciale che genera un numero casuale (probabilmente pseudocasuale, non criptato sicuro casuale) compreso tra 1 e 100 (a volte il giocatore può scegliere un altro spread, ma 100 è il più comune). Ogni giocatore usa questo comando, tutti i giocatori possono vedere chi ha lanciato cosa e l'oggetto viene assegnato alla persona che ottiene il punteggio più alto. La maggior parte dei giochi ha anche un sistema integrato in cui i giocatori premono semplicemente un pulsante e una volta che tutti hanno premuto il loro pulsante, il gioco fa automaticamente il resto.

A volte, alcuni giocatori generano lo stesso numero alto e nessuno li batte. questo è di solito risolto da quei giocatori che rigenerano i loro numeri, fino a quando non c'è un numero unico univoco.

La mia domanda è la seguente: supponiamo un generatore di numeri casuali in grado di generare qualsiasi numero compreso tra 1 e 100 con la stessa probabilità. Supponi di avere un gruppo di 25 giocatori che generano ciascuno 1 numero con un tale generatore di numeri casuali (ognuno con il proprio seme). Avrai 25 numeri tra 1 e 100, senza limiti sul numero di giocatori che tirano uno specifico numbder e nessuna relazione tra i numeri. Qual è la possibilità che il numero più alto generato sia generato da più di 1 giocatore? In altre parole, qual è la probabilità di un pareggio?


7
World of Warcraft eh?
Behacad,

1
sì, è casuale uniforme, come indicato nella domanda (qualsiasi numero compreso tra 1 e 100 inclusinve ha la stessa probabilità.
Nzall

Bella domanda, ma questo mi sembra un brutto modo di scegliere un vincitore. Basta elencare i giocatori in qualche modo (potresti dire "nomi in ordine alfabetico" o mescolarlo e mostrare a tutti la lista, o ordinare in qualche altro modo), e scegliere un numero casuale tra 1 e 25. Il numero corrispondente al giocatore vince.
Tim S.

2
Noobs, usa DKP!
Assapora il

2
Suggerimento: dato un campione casuale da U { 1 , ... , 100 } , dobbiamo calcolare P ( X ( 24 ) < X ( 25 ) ) usando ciò che sappiamo dalla teoria delle statistiche dell'ordine. X1,...,X25U{1,...,100}P(X(24)<X(25))
Zen,

Risposte:


25

Permettere

  • è il limite superiore dell'intervallo, x = 100 nel tuo caso.XX=100
  • è il numero totale di pareggi, n = 25 nel tuo caso.nn=25

Per qualsiasi numero , il numero di sequenze di n numeri con ciascun numero nella sequenza y è y n . Di queste sequenze, il numero contenente no y è ( y - 1 ) n e il numero contenente uno y è n ( y - 1 ) n - 1 . Quindi il numero di sequenze con due o più y s è y n - ( y - 1 ) nyXnyyny(y-1)nyn(y-1)n-1y Il numero totale di sequenze di n numeri con il numero più alto y contenente almeno due y è x y = 1 ( y n - ( y - 1 ) n - n ( y - 1 ) n - 1 )

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

xn

Xn-nΣy=1y=X-1yn-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

Questo programma è uscito

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

2
2000000,11,957 mila

Xn

Ho simulato usando perl e ho ottenuto un 0.005 molto consistente. pastebin.com/gb7JMLt6
agweber

XnX=20,n=515600/160000=0,0975X,ne la probabilità dalla formula che ho derivato. Sono curioso di sapere qual è la fonte del disaccordo tra il nostro codice.
TooTone

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

3

Vorrei considerare di trovare prima la probabilità di avere un vincitore unico

X(251)(X-1)2410025y-1

Il vincitore può vincere con il suo numero uguale a 2 a 100, quindi la probabilità totale è

Σio=210025(io-1)2410025=25Σio=199io2410025=-14+25Σio=1100io2410025-14+25124+110024+1+1210024+242161002310025=0.88

10023

1-0.88=0,12


-3

p1-pp=1*(1-1/100)*(1-1/100)......*(1-1/10)=(1-1/100)24P=1-p=1-(1-1/100)24=0.214


significa che la probabilità è del 21,4%? sembra piuttosto alto, ma poi, il paradosso del compleanno ha una risposta sorprendente simile. Grazie.
Nzall

6
-1 Allo stato attuale, questa risposta non è corretta. La risposta corretta è stata fornita da @TooTone.
COOLSerdash
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.