2012-03-15 74 views
3

我知道这个问题很难理解,但我需要一个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 

现在我需要的等式从我能找到的可能的输出,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 

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

+0

只有32768种可能的组合,所以你可以尝试他们所有嵌套循环 – assylias 2012-03-15 09:25:31

+0

@assylias :(这就是为什么我需要找到任何常见的数学函数。 – 2012-03-15 09:26:37

+0

的可能重复[如何产生整数分区?(HTTP ://stackoverflow.com/questions/1490001/how-do-i-generate-integer-partitions) – 2012-03-15 09:27:00

回答

1

这似乎是一个与整数编程相关的问题。使用动态规划策略可以相对有效地解决这个问题,该策略对较小的子问题保持不变,并将这些子问题合并为最终解决方案。下面是让你对你的目标的高级别算法:

1)首先得有个随机种子数,X_1之间0..7

2)做如下三次(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和9 + 3 * 5 = 24 < 25.这意味着,如果你选择了5作为min_3,您将不再能够达到你的25

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,总和= 6

让X_2 = 5

=> min_3 = 5,sum = 11

设x_3 = 7。

=> min_4 = 4,总和= 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。