2012-03-15 25 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。