Przede wszystkim nie jestem pewien, gdzie należy zadać to pytanie. Pytam, czy problem statystyczny jest NP-Complete i czy nie mam go rozwiązać programowo. Zamieszczam go tutaj, ponieważ problem statystyczny jest punktem centralnym.
Próbuję znaleźć lepszą formułę rozwiązania problemu. Problem polega na tym: jeśli mam 4k6 (4 zwykłe 6-stronne kości) i rzucam je wszystkie naraz, usuń kość o najniższej liczbie (zwanej „upuszczeniem”), a następnie zsumuj pozostałe 3, jakie jest prawdopodobieństwo każdego możliwego wyniku ? Wiem, że odpowiedź brzmi:
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
Średnia wynosi 12,24, a odchylenie standardowe wynosi 2,847.
Znalazłem powyższą odpowiedź brutalną siłą i nie wiem, jak i czy istnieje na to formuła. Podejrzewam, że ten problem jest NP-Complete i dlatego można go rozwiązać jedynie brutalną siłą. Możliwe jest uzyskanie wszystkich prawdopodobieństw 3d6 (3 normalne 6-stronne kości), a następnie przekrzywienie każdego z nich w górę. Byłoby to szybsze niż brutalna siła, ponieważ mam szybką formułę, gdy wszystkie kości są trzymane.
Zaprogramowałem formułę przechowywania wszystkich kości na studiach. Zapytałem o to mojego profesora statystyki, a on znalazł tę stronę , którą mi następnie wyjaśnił. Istnieje duża różnica w wydajności między tą formułą a brutalną siłą: 50d6 zajęło 20 sekund, ale 8d6 upuściło najniższe awarie po 40 sekundach (chrome zabrakło pamięci).
Czy to jest problem NP-Complete? Jeśli tak, proszę przedstawić dowód, a jeśli nie, proszę podać formułę bez użycia siły, aby go rozwiązać.
Zauważ, że niewiele wiem o NP-Complete, więc mogę myśleć o NP, NP-Hard lub o czymś innym. Dowód kompletności NP jest dla mnie bezużyteczny, jedynym powodem, dla którego o to proszę, jest zapobieganie zgadywaniu. I proszę, obnażcie się ze mną, bo od dawna nad tym pracuję: nie pamiętam statystyk tak dobrze, jak być może będę musiał to rozwiązać.
Idealnie szukam bardziej ogólnej formuły dla liczby X kości ze stronami Y, gdy N zostanie upuszczonych, ale zaczynam od czegoś znacznie prostszego.
Edytować:
Wolałbym również ten wzór od częstotliwości wyjściowych, ale dopuszczalne są tylko prawdopodobieństwa wyjściowe.
Dla zainteresowanych zaprogramowałem odpowiedź Whubera w JavaScript na moim GitHub (w tym zatwierdzeniu tylko testy faktycznie używają zdefiniowanych funkcji).