Antes de mais nada, não tenho certeza de onde essa pergunta deve ser publicada. Estou perguntando se um problema estatístico é NP-Complete e se não é para resolvê-lo programaticamente. Estou postando aqui porque o problema das estatísticas é o ponto central.
Estou tentando encontrar uma fórmula melhor para resolver um problema. O problema é: se eu tenho 4d6 (4 dados comuns de 6 lados) e os rolar todos de uma vez, remova um dado com o número mais baixo (chamado "dropping") e, em seguida, some os 3 restantes, qual é a probabilidade de cada resultado possível ? Eu sei que a resposta é esta:
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
A média é 12,24 e o desvio padrão é 2,847.
Encontrei a resposta acima por força bruta e não sei como ou se existe uma fórmula para isso. Suspeito que esse problema seja NP-Complete e, portanto, só pode ser resolvido com força bruta. Pode ser possível obter todas as probabilidades de 3d6 (3 dados normais de 6 lados) e inclinar cada uma delas para cima. Isso seria mais rápido que a força bruta, porque eu tenho uma fórmula rápida quando todos os dados são mantidos.
Programei a fórmula para manter todos os dados na faculdade. Eu perguntei ao meu professor de estatística e ele encontrou esta página , que ele me explicou. Há uma grande diferença de desempenho entre esta fórmula e a força bruta: 50d6 levou 20 segundos, mas 8d6 eliminou as falhas mais baixas após 40 segundos (o chrome fica sem memória).
Esse problema é NP-Completo? Se sim, forneça uma prova; se não, forneça uma fórmula de força não bruta para resolvê-lo.
Observe que eu não sei muito sobre o NP-Complete, portanto, posso estar pensando em NP, NP-Hard ou outra coisa. A prova da NP-Completeness é inútil para mim, a única razão pela qual peço é impedir as pessoas de adivinharem. E, por favor, fique comigo, pois já faz um longo tempo que não trabalhei nisso: não me lembro de estatísticas e preciso resolver isso.
Idealmente, estou procurando uma fórmula mais genérica para o número X de dados com os lados Y quando N deles forem descartados, mas estou começando com algo muito mais simples.
Editar:
Eu também preferiria a fórmula para emitir frequências, mas é aceitável apenas para probabilidades de saída.
Para os interessados, programei a resposta do whuber em JavaScript no meu GitHub (neste commit, apenas os testes realmente usam as funções definidas).