【问题标题】:php percentage chance for event to occurphp 事件发生的概率百分比
【发布时间】:2013-04-06 19:30:18
【问题描述】:

我知道这是一个菜鸟问题,但我很坚持,所以我希望你能帮助我。

我有一个整数数组。根据情况,我可以有一个包含 1,2,3 或 1,1,1 或 1,2,2 等的数组。重要的是数组中的值之间的差异可能不大于最小数字 + 2(我可以有 1、2、3 但没有 1、2、4)。现在我抓取数组的最大值和最小值并从最大值递减最小值。因为 max 和 min 之间的差值总是 0、1 或 2(数组值彼此之间不大于 2)我有空闲的可能机会:

0: - all array values are equal
1: - all array values are from range <x, x + 1>
2: - all array values are from range <x-1, x+1>

现在,如果我想从上面的数组中随机选择值,这很容易。但是我怎么能以百分比的机会选择比其他人更大的概率呢?

我是什么意思?考虑第二个示例,以及数组 x-1、x+1 中的值范围 - 让它成为 Array(2, 3, 4)。现在我希望有 50% 的机会选择 4、30% 的机会选择 3 和 20% 的机会选择 2。如何将数组中的整数值与选择它的机会联系起来?

我希望你能理解我的意思并帮助我。

编辑: 换句话说,如果我有一个充满值的数组,如何轻松地让一个值范围是数组中所有值的一部分,选择一个值的概率比另一个值大?

【问题讨论】:

    标签: php probability


    【解决方案1】:

    我不确定我是否完全理解第一部分,但假设您希望有 50% 的机会选择 4、30% 的机会选择 3 和 20% 的机会选择 2。

    您只需用 5 个 4、3 个 3 和 2 个 2 填充一个长度为 10 的整数数组:

    int[] a=[4,4,4,4,4,3,3,3,2,2];
    

    现在以相等的概率随机选择一个介于 0 和 9 之间的索引,并返回数组中该索引处的数字。这将返回 50% 的 4、30% 的 3 和 20% 的 2。

    【讨论】:

    • 这将是一个解决方案,但肯定不够优雅,我想也不是一个快速的解决方案。
    • 它并不优雅,但它会很快,因为您的随机选择在 O(1) 中运行;您只需要在数组中查找随机生成的索引即可。
    • 我完成了我的工作 - 我一般使用您的方法,但将其更改为看起来和工作更顺畅。谢谢
    【解决方案2】:
    $rand = rand(1, 100);
    if ($rand > 50) {
        //select first array
    } else {
        //select the second array and so on.
    }
    

    上面的代码会有帮助吗?

    【讨论】:

    • 不幸的是,这不是我想要的。请记住,值的范围在每次迭代中都会发生变化,因此这样的解决方案不会让我走到任何地方:(
    猜你喜欢
    • 2012-02-08
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多