言語を学習するための継続的な取り組みの一環として、Java で宇宙戦闘ゲームを開発しています。ある戦闘で、k隻の船が n 隻の極悪非道な敵艦隊に向けて発砲しました。どれだけの数の敵に命中するかに応じて (各船は 1 つの敵に命中する 1 つの発砲を発射します)、一部は損傷し、一部は破壊されます。1 回攻撃された敵の数、2 回攻撃された敵の数などを把握したいので、最終的に 100 発の発砲に対して次のような表が得られます。
Number of hits | Number of occurences | Total shots
----------------------------------------------------
1 | 30 | 30
2 | 12 | 24
3 | 4 | 12
4 | 7 | 28
5 | 1 | 5
明らかに、少数のショットと敵に対して、各ショットをランダムに敵に配置し、最後に各ショットが何回撃たれたかを数えることで、これを力ずくで行うことができます。しかし、この方法は、1,000 万の敵の群れに対して 300 万の勇敢な英雄が発砲する場合、非常に非現実的です。
理想的には、私が望むのは、正確に何発のショットが当たる可能性があるかの分布を生成する方法です。次に、乱数ジェネレーターを使用してその分布上のポイントを選択し、このプロセスを繰り返して、ほぼすべてのショットが説明されるまで、毎回ヒット数を増やします。一般的な統計分布/どのくらいの数の敵が何回のショットで攻撃されるかを概算する方法はありますか?
私は、誕生日の問題から、何人の誕生日が正確に何人かの人々によって共有される確率を計算しようとしてきましたが、大きな進歩はありませんでした.
これをJavaで実装します。
編集:解決しやすいかもしれないこれの簡略化を見つけました: n敵がまったく攻撃されない確率の分布は何ですか? つまり、0 がヒットしない、1 がヒットしない、2 がヒットしない、などの確率です。
これは似たような問題です (わかりました、同じ問題ですが単純化されています) が、より簡単に解決できるように思われ、数回の反復で完全な分布を生成できます。