0
回答
关于概率算法的问题,求指正错误
华为云数据库免费试用   

做个骰子成功几率的分析,投n颗骰子,第一次投成功的几率是a,然后投成功的骰子,需要再投1次,这次成功的几率是b。第二次成功的骰子才算最终成功。

要分析出n颗骰子,最终成功0到n颗的概率。

我写了个算法,求出的结果,合计0到n颗的概率不近似1,而且差别很大,求教各位大大算法有什么错误。

我算法的基本思路:

1.先统计出第一次投成功0-n颗骰子的概率列表。这步我自认没有问题,合计验算结果近似1

for (var i = 0; i <= n; i++) {
    FirstSuccessRateTbl.Add(i, Utils.C(n, i)*(decimal)(Math.Pow((double)firstSucessRate,i)*Math.Pow((double)firstLoseRate,n-i)));
}

其中Utils.C是我按C概率公式写的函数。FirstSuccessRateTbl用的是哈希表。

2. 然后以第一次成功的概率表作为条件概率统计后一次成功X颗的几率,即累加第一次成功X及X以上颗骰子的情况下第二次投成功X颗的概率。

decimal sucessXRate = 0;
for (int i = x; i <= n; i++) {
    sucessXRate += FirstSuccessRateTbl[i] * (decimal)(Math.Pow((double)secordSucessRate, i)*Utils.C(i,i-x)*Math.Pow((double)secordFailRate,i-x));
            }
return sucessXRate;

 

但是按这个算法算下来,2次成功0-n颗的几率合计不为1,不知道错误在哪里。

<无标签>
举报
faete
发帖于1年前 0回/84阅
顶部