多数の実行の詳細な結果(確率ツリー)を取得する方法:回ベルヌーイ実験に以下の実験を想定回
IのN数を(成功Pの確率で)同じベルヌーイ試行を実行します次の情報が必要です:すべての可能な成功/失敗のシーケンスが起こる確率。
例:成功P = 40%の確率で Aベルヌーイ実験を3回実行し、以下の結果をもたらすであろう(Sは成功であり、Fは失敗である):
FFF 0.216
SFF 0.144
FSF 0.144
SSF 0.096
FFS 0.144
SFS 0.096
FSS 0.096
SSS 0.064
Iの結果を得ることをブルートフォースしようとしたが、それは唯一のN = 25と急速にチョーク、私はOutOfMemoryExceptionを取得します...
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace ConsoleApplication
{
class Program
{
static Dictionary<string, double> finalResultProbabilities = new Dictionary<string, double>();
static void Main(string[] args)
{
// OutOfMemoryException if I set it to 25 :(
//var nbGames = 25;
var nbGames = 3;
var probabilityToWin = 0.4d;
CalculateAverageWinningStreak(string.Empty, 1d, nbGames, probabilityToWin);
// Do something with the finalResultProbabilities data...
}
static void CalculateAverageWinningStreak(string currentResult, double currentProbability, int nbGamesRemaining, double probabilityToWin)
{
if (nbGamesRemaining == 0)
{
finalResultProbabilities.Add(currentResult, currentProbability);
return;
}
CalculateAverageWinningStreak(currentResult + "S", currentProbability * probabilityToWin, nbGamesRemaining - 1, probabilityToWin);
CalculateAverageWinningStreak(currentResult + "F", currentProbability * (1 - probabilityToWin), nbGamesRemaining - 1, probabilityToWin);
}
}
}
私は
(すべてのPのために3秒未満で結果を得る)タイムリーに= 3000 Nまでサポートできるようにする必要がありますが最適にこれを行うための数学的な方法はありますか?
なぜあなたは*すべて*の結果を保存したいですか? 'P(F ... S ... F ... S)== P(S)**(Sの数)* P(F)**(Fの数)' –
@DmitryBychenko一番長い勝利ストリークの平均(例えば0.216 * 0 + 0.144 * 1 + 0.144 * 1 + 0.096 * 2 + 0.144 * 1 + 0.096 * 1 + 0.096 * 2 + 0.064 * 3 = 1.104) – ibiza