代码之家  ›  专栏  ›  技术社区  ›  Curtis White

概率码问题

  •  5
  • Curtis White  · 技术社区  · 14 年前

    当我用iswinconfidence关闭iswindefault时,会得到完全不同的结果。我觉得他们应该是一样的。我的代码中是否有我误解的错误或统计属性?

    该测试旨在模拟一枚硬币与一枚硬币的多次翻转。

    问题是

    如果p(x)是70%,那么p(x)*100应该是70%的时间,不是吗?

    谢谢。

        private void TestWin()
        {
            double headsUp = 0;
            double testRuns = 100;
            for (double i = 0; i < testRuns; i++)
            {
                if (IsWinConfidence())
                {
                    headsUp++;
                }
    
            }
            label1.Text = "Probability of Heads is " + headsUp /testRuns;
    
        }
    
        private bool IsWinDefault()
        {
            if (r.NextDouble() <= .7)
            {
                return true;
            }
            return false;
        }
    
        private bool IsWinConfidence()
        {
            int headsCount = 0;
            for (double x = 0; x < 100; x++)
            {
                if (IsWinDefault())
                    headsCount++;
    
            }
    
            double pHeadsCount = headsCount / 100d;
            if (pHeadsCount >= .7 )
            {
                return true;
            }
            else
            {
                return false;
            }
    
    
        }
    
    5 回复  |  直到 14 年前
        1
  •  2
  •   Lasse V. Karlsen    14 年前

    以下是简单的答案:

    70%的概率意味着 平均而言 100个硬币翻转将产生70个人头。然而,它有时会超过70,有时会更少。

    换言之,每批100个硬币翻页的正面数量接近70个。有时70岁以下,有时70岁以上,有时正好70岁。

    因此,如果这个数字在70左右摆动,这只是有理由的,如果你问“它会在70以上摆动多少次,或等于70”,你会得到一个答案,说“大约50%的时间”。

    所以你的代码问的问题不对。

    事实上,将isWinConfedence中循环中的数字增加到更高的值会使数字接近50。


    让我们把你的论点分开来。

    你是说如果你有:

    一个有偏见的硬币,70%的时间,会有头朝上,30%的时间,有头朝下

    然后你说:

    如果我把硬币掷100次,我会得到70多个人头。

    一个不会导致另一个,你的论点有缺陷。概率不是保证,而是平均值。

    如果概率是绝对的,你的第二个陈述应该是:

    如果我把硬币掷100次,我会得到70个人头。

    注意这里缺少“more than”。

    相反,第一个论点的意思是:

    如果我把硬币翻转100次,然后再翻转100次,然后再翻转100次,然后再翻转100次,依此类推。 平均而言 每100次翻页将有70个正面朝上。

    现在,我对概率计算的了解还不够,无法区分循环和计数,但我知道,只要遵循逻辑,你的论点就失败了。

    让我们尝试另一种方法。

    如果硬币是偶数的,尽管有偏见,这意味着在100枚硬币中,你有时会得到超过70枚,有时少于70枚。

    在我天真的头脑中,这意味着…平均来说,你只会得到超过70枚硬币的一半时间。

    通过将循环中的数字增加到100000,我得到的置信函数返回到接近50。这似乎支持了我的理论。

    但正如我所说,我成为概率方面专家(甚至涉猎者)的机会小于零。

        2
  •  1
  •   Steve    14 年前

    如果p(x)为70%,则p(x)*100 是70%的时间,不是吗?

    不,这样的置信度与概率无关…

    你所做的是在第二种方法是抛掷有偏见的硬币100次,如果你得到70个或更多的人头,返回真。因为你已经固定了你的硬币,所以平均来说,是会给你70%的时间,你会期望得到70个头从100扔“有时”,但“有时”不是70%的时间。

        3
  •  1
  •   I. J. Kennedy ShankarSangoli    14 年前

    IsWinDefault “赢”70%的时间,如预期; IsWinConfidence “赢”大约53.77%,所以你应该能看到接近这个数字的数字。 见 binomial distribution 更多。

        4
  •  0
  •   Daniel MoÅ¡mondor    14 年前

    if (r.NextDouble() <= .7)

    VS

    if (pHeadsCount >= .7 )

        5
  •  0
  •   Loïc Février    14 年前

    更新 :

    第一个函数返回真的70%的时间,因此总人数将相等,概率非常高,达到约70(如果100被更大的数字替换,则倾向于该数字的70%)。

    因此

    pHeadsCount >= .7
    

    概率为50%,Wince的值为~0.7。