Prima di tutto, non sono sicuro di dove pubblicare questa domanda. Sto chiedendo se un problema di statistica è NP-Complete e se non risolverlo a livello di codice. Lo sto postando qui perché il problema statistico è il punto centrale.
Sto cercando di trovare una formula migliore per risolvere un problema. Il problema è: se ho 4d6 (4 dadi a 6 facce ordinari) e li lancio tutti in una volta, rimuovo un dado con il numero più basso (chiamato "lancio"), quindi somma i restanti 3, qual è la probabilità di ogni possibile risultato ? So che la risposta è questa:
Sum (Frequency): Probability
3 (1): 0.0007716049
4 (4): 0.0030864198
5 (10): 0.0077160494
6 (21): 0.0162037037
7 (38): 0.0293209877
8 (62): 0.0478395062
9 (91): 0.0702160494
10 (122): 0.0941358025
11 (148): 0.1141975309
12 (167): 0.1288580247
13 (172): 0.1327160494
14 (160): 0.1234567901
15 (131): 0.1010802469
16 (94): 0.0725308642
17 (54): 0.0416666667
18 (21): 0.0162037037
La media è 12,24 e la deviazione standard è 2,847.
Ho trovato la risposta di cui sopra con la forza bruta e non so come o se esiste una formula per essa. Sospetto che questo problema sia NP-Complete e quindi possa essere risolto solo con la forza bruta. Potrebbe essere possibile ottenere tutte le probabilità di 3d6 (3 dadi a 6 facce normali), quindi inclinarli verso l'alto. Questo sarebbe più veloce della forza bruta perché ho una formula veloce quando tutti i dadi sono tenuti.
Ho programmato la formula per tenere tutti i dadi al college. Ne avevo chiesto al mio professore di statistica e aveva trovato questa pagina , che poi mi ha spiegato. C'è una grande differenza prestazionale tra questa formula e la forza bruta: 50d6 ha impiegato 20 secondi ma 8d6 ha fatto cadere gli arresti più bassi dopo 40 secondi (la memoria di Chrome si esaurisce).
Questo problema è NP-Complete? In caso affermativo, fornire una prova, in caso contrario fornire una formula di forza non bruta per risolverlo.
Nota che non so molto su NP-Complete, quindi potrei pensare a NP, NP-Hard o qualcos'altro. La prova della NP-completezza è inutile per me l'unica ragione per cui lo chiedo è di impedire alle persone di indovinare. E, per favore, mettiti a nudo con me dato che è da molto tempo che non mi occupo di questo: non ricordo le statistiche e potrei aver bisogno di risolverlo.
Idealmente sto cercando una formula più generica per il numero X di dadi con i lati Y quando N di loro viene lasciato cadere, ma sto iniziando con qualcosa di molto più semplice.
Modificare:
Preferirei anche la formula per emettere frequenze ma è accettabile solo l'output delle probabilità.
Per gli interessati ho programmato la risposta di Whuber in JavaScript sul mio GitHub (in questo commit solo i test utilizzano effettivamente le funzioni definite).