Re: 要望・感想スレッド4 ( No.96 )
日時: 2013/10/21 01:31
名前: SUN
参照: http://pokemon-trainer.net/

>>95 what?さん
数学Aですね。
ここなんか参考になるかもしれません。
http://ja.wikibooks.org/wiki/%E9%AB%98%E7%AD%89%E5%AD%A6%E6%A0%A1%E6%95%B0%E5%AD%A6A_%E5%A0%B4%E5%90%88%E3%81%AE%E6%95%B0%E3%81%A8%E7%A2%BA%E7%8E%87
反復試行の確率というやつです。

これをそのままプログラミングすると計算量がとんでもないことになるので無理ですね。
コンピュータの世界ではオーダー表記を使ってO(N^M)の計算量とかいうのですが、
N=16(乱数の数)、M=10(ターン数)とすると1兆になって多分スパコンでも苦労すると思います笑

なので上のほうでも言っているように残りHPで考えます。
エクセルの縦軸をその残りHPである確率、横軸をターン数にします。
0ターン目は最大HPが1でほかは0ですね。
1ターン目は各乱数のダメージを0ターン目の残りHP(=0ターン目は最大HPしかない)からそれぞれ引いて、その残りHPであった確率×その乱数を引く確率を、ダメージを受けた後の残りHPの部分に足し込みます。
それを10ターン目なり必要なところまで順番に計算していくと完了ですね。
この計算量はO(N*M*L)でL=200(最大HP)とすると32000で、概ねさっきの3000万倍高速に計算できます。

まあプログラムまでは示さないのであとは頑張ってください笑
私もプログラミングを始めたのはwhat?さんくらいの時でしたかねー
懐かしいです。