数値を無作為に分配するアルゴリズムを考えています。
かなりの回数実行する予定なので、ある程度速いアルゴリズムを求めています。
数値を無作為に分配というのは、10であれば
3,3,4や9,0,1や2,7,1のように分配することを指しています。
正規分布に従う手法であれば(タイトルから少しそれますが)以下リンク先の手法で実装できそうですが、処理負荷が高そう(平方根,sin,cos...)なので他を探しています。
Box-Muller法を用いて正規分布に従う分配を行う - Qiita
おそらくかなり偏った値になりますが、現状考えているのは、
1番目を「010のランダムな値」10-(1~n番目にでた合計値)のランダムな値」とする手法です。
n番目を「0
他にいい感じのアルゴリズムや、このような要件で一般的に使用されているアルゴリズムがありましたら、教えていただけると幸いです。
リンク先の話は「正規分布に従って」、つまり「平均値に近い値ほど高い確率で分配される」分配法です。
タイトルの「無作為に」には適しません。
結果に0が入っていると現実的には無理じゃありませんか?
9, 0, 0, 0, 0, (100億個の0が並んでいる), 1
が《0でない確率で》出現しなければなりませんよね?
(数学的には確率0ですが)
まあ、分割は n-1 までとして、3を処理したときに
(3),(1, 2),(2, 1),(3, 0),(0, 3),(1, 1, 1),(1, 2, 0),(2, 1, 0),(0, 1, 2),(0, 2, 0),(2, 0, 1),(1, 0, 2),(3, 0, 0),(0, 3, 0),(0, 0, 3)
が「全部同じ確率で出てくる」ことを期待しているのかどうかは気になりますね。
回答2件
あなたの回答
tips
プレビュー