2013-02-19 82 views
7

所以我想製作一個腳本,它將隨機將4的值分成12個不同的變量。我想不出一個好的方法來正確地做到這一點。我考慮過對數字進行隨機化,以使它們接近0.33(4/12中的1/12),但這往往會導致最後幾個數字被忽略。任何人都曾嘗試過這樣的事情,或者對於如何使這個儘可能隨機且均勻不均勻有什麼好的想法?將一個數字劃分爲隨機不等份

回答

17

從您最喜歡的隨機數生成器中生成12個隨機數,請撥打r1..r12

將它們全部加起來,請撥打總和sum

4的第一個隨機部分是(r1/sum)*4。其餘的應該是顯而易見的。

+0

太棒了!非常感謝! – Tom 2013-02-19 13:58:40

+0

請注意,此解決方案不會生成以邏輯方式均勻分佈的數字集,但它是大多數人似乎選擇的解決方案,因爲他們不明白爲什麼它不能產生真正一致的東西。 – 2013-02-19 16:09:37

+0

@woodchips:爲這種批評提供一些證明(雖然它是正確的),對於提供生成均勻分佈的分區的答案更有幫助。我試圖做後者,但我不確定它是否正確。 – rici 2013-02-19 19:21:17

8

生成任何大於1的隨機數,然後重新縮放到所需的總和。

實施例:

  • 必需總和:4
  • 隨機編號:1 2 3 4 5 6 7 8 9 10 11 12
  • 薩姆= 78
  • 重標號:

1 rescaled to(1 * 4)/ 78

2重新縮放至(2×4)/ 78

...

12重新縮放到(12 * 4)/ 78

2

下面的算法提供了均勻分佈的分區,假定有可能以在連續範圍內(或者至少在具有足夠多的可能值的離散範圍上產生均勻分佈的隨機數,以致重複的可能性可忽略不計)。

爲了產生的t一個分區到k值:

  • 範圍[0, t]生成k-1均勻分佈的值。

  • 對它們進行排序,並在開始處添加0,最後添加。

  • 使用相鄰的差異作爲分區。