如何获得获得固定平均值的可能结果?

时间:2012-03-15 09:21:23

标签: javascript algorithm math dynamic-programming

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

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

1 个答案:

答案 0 :(得分: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。 + 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,sum = 6

     

设x_2 = 5.

     

=> min_3 = 5,sum = 11

     

设x_3 = 7。

     

=> min_4 = 4,sum = 18

     

设x_4 = 5

     

=> sum = 23

     

=> x_5 = 2(= 25 - 23)

     

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

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

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