【问题标题】:How to get possible outcomes of getting fixed average?如何获得固定平均值的可能结果?
【发布时间】:2012-03-31 19:01:15
【问题描述】:

我知道这个问题很难理解,但我需要一个 javascript 的数学方程式。

I am having dynamic number from 0 to 7.

现在我有 5 条记录:

a = from 0 to 7,
b = from 0 to 7,
c = from 0 to 7,
d = from 0 to 7,
e = from 0 to 7

现在我需要一个方程,从中我可以找到 a、b、c、d 和 e 的可能输出,平均为 5。

Like for average = 5:
1. a = 5, b = 5, c = 5, d = 5, e = 5
2. a = 2, b = 7, c = 6, d = 5, e = 5

用户将输入所需的平均值,我需要抛出可能的输出来填充平均值。

【问题讨论】:

  • 只有 32768 种可能的组合,因此您可以使用嵌套循环尝试所有组合
  • @assylias :(这就是为什么我需要找到任何常见的数学函数。

标签: javascript algorithm math dynamic-programming


【解决方案1】:

这似乎是一个与整数规划有关的问题。使用动态规划策略可以相对有效地解决它,该策略保持较小子问题的不变量并将这些子问题合并到最终解决方案中。这是一个可以帮助您实现目标的高级算法:

1) 从一个随机种子数开始,x_1 在 0..7 之间

2) 现在执行以下 3 次 (i = 2, 3, 4):

3) 找到最小可能的下一个数字。要使您的五个数字平均为 5,您的所有五个数字的目标总和为 25。因此,您需要确保您完全不否认自己有能力达到 25。所以让 min_i+1 确定 0..7 的最小数,这样到目前为止所有 x_i 的总和加上 min_i+1 * (5-i) >= 25。

示例:假设 i=2,到目前为止您的数字是 4 和 5。那么最小允许的第三个数字 min_3 是 6。到目前为止的总和是 9 和 5-i = 3. 9 + 3*6 = 27 >= 25 and 9 + 3*5 = 24

4) 选择 x_i+1 作为 min_i+1 和 7 之间的随机数。

5) 最后,选择 x_5 作为 25 - x_1..x_5 的总和。输出 x_1 到 x_5。


整个算法的例子:

令 x_1 = 6。

=> min_2 = 5, sum = 6

令 x_2 = 5。

=> min_3 = 5, sum = 11

令 x_3 = 7。

=> min_4 = 4, sum = 18

令 x_4 = 5

=> 总和 = 23

=> x_5 = 2 (=25 - 23)

输出:[6, 5, 7, 5, 2] 确实平均为 5。

现在这个算法会产生非常有偏差的输出,如果你想让它看起来更随机,只需提供最终结果的排列,例如在我们的示例中,您可以改为输出 [5, 7, 2, 5, 6]。

在 Javascript 中实现这一点应该没有问题,它可以很容易地适应 x_i 和总平均值的其他可能范围。如果您的最终样本量应为 n 且平均值为 avg,请务必将目标总和修改为 n * avg。

【讨论】:

    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多