の間に一様にランダムな数値分布を生成するメソッドがあると仮定しましょう[0,N]
。M
明らかな方法は、各生成後に N を更新する範囲で乱数を連続して生成することです。[0,N]
これは、生成されたすべての数の合計が に等しくなければならないためN
です。これにより、一様にランダムに分散されたペアのコレクションが得られることを数学的に証明する必要があります[x1,x2,....,xM]
。これは些細なことではありません。(たとえば、最初の数値が5になるようにランダムに選択された例では、合計が超えることができないため、次の2つの数値はN=5
ゼロである必要があり、したがってランダム性に偏りがあります)
考えられるもう 1 つの「強引な」方法は、可能なすべての順列のコレクションを生成すること[x1,x2,....,xM]
ですx1+x2+...+xM = N
。コレクションにY
可能な順列が含まれている場合は、以前に定義した乱数発生器を使用して範囲内の乱数を取得し[1,Y]
、コレクションからその要素を選択できます
これは私の頭の片隅にあることに注意してください。真にランダムな一様分布を確保したい場合は、これらの提案を数学的に確認する必要があります。
編集:また、おそらく、あなたが問題を説明したように、番号が分割される順序は無関係であることにも気付きました(つまり[0,2,3]
、と同じ[2,3,0]
です[0,3,2]
)。Y
これにより、グループ化のアンサンブル内の一意の順列の合計数が減少します