【问题标题】:java.util.Random digging a bit deepjava.util.Random 深入挖掘
【发布时间】:2016-01-21 14:30:18
【问题描述】:

我在阅读 Java 中的数据结构和算法一书时遇到了以下问题,我想寻求帮助:

假设给定一个数组 A,其中包含使用 r.nextInt(10) 方法生成的 100 个整数,其中 r 是 java.util.Random 类型的对象。令 x 表示 A 中的整数的乘积。有一个数字 x 至少以 0.99 的概率相等。这个数字是多少?描述 x 等于那个数字的概率的公式是什么?

我认为x 等于零;因为很可能会生成 0。然而,这只是一个猜测。我找不到公式。 java documentation 没有指定随机化方程,我无法在此处或使用 Google 搜索后找到任何相关主题。

我想在概率公式方面获得一些帮助。提前致谢。

【问题讨论】:

  • 这个问题与java.util.Random无关。这是关于概率的一般数学问题——任何统一的随机生成器都会得出相同的答案。
  • 因为它是产品,而不是我误读的总和,是的,x 大部分时间应该是 0。但是在这 100 个数字中,没有一个 0 出现的可能性很小,因此概率为 0.99。我不确定该概率的确切公式,但我相信它符合 1 - (0 的概率,即 1/10,除以它发生的机会数,即100).

标签: java random formula probability


【解决方案1】:

数组元素的可能值为 0 .. 9,每个元素的概率为 1/10。如果其中一个元素为 0,则乘积也将为 0。所以我们计算至少一个元素为0的概率。

事实证明,这与所有大于零的元素相反。一个元素大于 0 的概率是 9/10,因此所有元素都大于零的概率是 (9/10)^100。

因此,至少一个元素为 0 的概率为 1 - (9/10)^100,大约为 0.9999734。

【讨论】:

    【解决方案2】:

    关于nextInt:javadoc 指定:

    在 0(含)和 指定值(不包括)

    “均匀分布”是每个结果的可能性相同的分布。

    因此特定结果的机会是“1/[可能结果的数量]”(因此它们的总和为 1)。

    关于数组: 填充数组可视为观察 100 个统计上独立的事件。

    您应该阅读,了解在组合多个独立事件时数学是如何工作的。

    【讨论】:

      【解决方案3】:

      https://docs.oracle.com/javase/7/docs/api/java/util/Random.html#nextInt(int)

      如你所料,它将是 0

      r.nextInt(10)
      

      将返回从 0 到 9 的数字

      任何 0 * 1-9 的乘积都是 0,因此对于 100 个随机数,此函数不返回 0 的可能性非常低。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-12
        • 2018-04-29
        • 1970-01-01
        • 2011-02-07
        • 2019-04-24
        • 2011-07-28
        相关资源
        最近更新 更多