【问题标题】:Calculating probability with given ranges计算给定范围的概率
【发布时间】:2013-04-01 19:31:57
【问题描述】:

在最后的几个应用程序中,我应该实现概率,这通常在某些项目中给出:

奖励完成某关卡的用户X

项目X 可能是以下之一:

jug => probability 25
glass => probability 50
plate => probability 20
dish => probability 5

我通过创建一个数组并将特定项目填充其概率的次数来解决这个问题;对于上述情况,我将有一个带有25 elements of jug, 50 glasses and so on. 的数组。最后我shuffle {PHP} 数组并从中选择一个随机元素。

在另一个应用程序中,这些值的总和超过 100,所以我首先从该总数中计算出它们受尊重的百分比,然后使用上述逻辑。

只是想知道这是否是从这种结构计算概率的正确方法?

我在 SOF 上遇到了几个问题,但没有一个对我有帮助。

如果有更合适的方法,请告诉我

谢谢

【问题讨论】:

    标签: php arrays probability


    【解决方案1】:

    您可以简单地分配以下值:

    $jug = 25;
    $glass = 25+50 = 75;
    $plate = 75+20 = 95;
    $dish = 95+5 = 100
    

    然后随机获取 100 并确定它适合的位置,类似于下面的伪代码

    $jug = 25;
    $glass = 75;
    $plate = 95;
    $dish = 100;
    $items = {"jug", "glass", "plate", "dish"};
    
    $rand = random(100);  // Get a random number between 0 and 100
    
    if ($rand < $jug) {
        return items(0);
    } elseif ($rand < $glass) {
        return items(1);
    } elseif ($rand < $plate) {
        return items(2);
    } elseif ($rand < $dish) {
        return items(3);
    }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我会和你一样做,但你不必计算百分比,你可以使用超过 100 个元素。

      例如,如果 A=80 且 B=40,您可以使用包含 120 个元素的数组。

      然而,在数学中有一个术语greatest common divisor 可以减少元素的数量。在此示例中,GCD 为 40,因此 A 为 2,B 为 1,您的数组大小将减少到 3 个元素。例如,当元素的总数非常大时,它可能很重要。

      【讨论】:

      • 太棒了!希望我也是一个数学家:S,但是,我的数据恐怕不适合这种情况,它的值是 50、10、5.5、1 和 0.5。在这个 GCD 中将是 0.5。我只是在看this。我正在尝试理解答案,它看起来很容易,但我现在无法吸收它。
      • 如果你的值小于 1,你需要将它们全部乘以 2,所以有 1 (2*0,5) 作为 GCD,可惜。但在问题的示例中,GCD 为 5,因此jug 为 5,glass 为 10,plate 为 4,dish 为 1。
      • 我认为@Florin 的解决方案更好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 2014-07-17
      相关资源
      最近更新 更多