【问题标题】:Which probability does method Random.next(int) work with?方法 Random.next(int) 使用哪种概率?
【发布时间】:2015-08-13 08:17:46
【问题描述】:

在我的 Android 应用程序中,我想使用 Random.next(int) 方法生成 0 到 100000 之间的整数。我想知道这种方法的概率类型。范围内的每个值都相同吗?

【问题讨论】:

    标签: java android random probability


    【解决方案1】:

    假设你要绘制100000,它将大致满足[0, 100000]范围内均匀分布的统计性质。

    也就是说,

    1. 生成任何特定数字的概率是相等的,并且独立于之前抽取的数字。

    2. 随机数样本均值的平均值将为 100000 / 2

    3. 样本的方差将收敛于均匀分布的方差。

    但它并不完美,也不是加密安全的。特别是您可以观察到自相关效应。根据您的具体要求,您可能需要考虑替代方案。

    【讨论】:

      【解决方案2】:

      我假设您指的是nextInt(int) 而不是next(int)(这是protected,而不是公共方法)。

      这是均匀(离散、伪随机)分布。

      来自documentation

      返回一个伪随机、均匀分布介于 0 之间的 int 值 (含)和指定值(不含)

      【讨论】:

        【解决方案3】:

        它将生成一个伪随机数。每个数字都有相同的概率被生成。我尝试拨打Random.next(2) 100 次,得到 50 个 1 和 50 个 0。我想你应该已经明白了。分布均匀。

        如果你好奇,这里是源代码:

        protected synchronized int next(int bits) {
            seed = (seed * multiplier + 0xbL) & ((1L << 48) - 1);
            return (int) (seed >>> (48 - bits));
        }
        

        【讨论】:

        • 您确定您使用的是next(int) 而不是nextInt(int)?你的答案适合nextInt(),代码适合next()
        • 我的意思是nextInt 只是对next 的调用,那么提供nextInt 的来源有什么意义呢? @amit
        • 它(nextInt())使用next(),但不是“只是对next()的调用。nextInt()的代码实际上在documentation
        【解决方案4】:

        Random.nextInt(int value) 的每次调用都会产生不同的结果。

        概率呢?

        来自文档:

        nextInt 的一般约定是伪随机生成并返回一个 int 值。 所有 2^32 个可能的 int 值都是以(大约)相等的概率产生的

        【讨论】:

          猜你喜欢
          • 2013-12-29
          • 2012-10-19
          • 2012-08-01
          • 2019-11-22
          • 2014-05-04
          • 2011-01-22
          • 1970-01-01
          • 1970-01-01
          • 2015-11-30
          相关资源
          最近更新 更多