いつもお世話になっております。
今回は乱数を用いたアルゴリズムに関してヒントを頂きたく存じます。
例えば、10%の確率で1、90%の確率で0を出したい場合には
C++
1#include <random> 2 3int main() 4{ 5 random_device rnd; 6 mt19937 mt(rnd()); 7 uniform_int_distribution<> rand100(0, 99); 8 int ratio = 10; 9 int result = 0; 10 if(rand100(mt) < ratio) 11 { 12 result = 1 13 } 14}
とすればよいかと思います。
これをループで回して何千回と試行すれば総数のうち10%が1になるでしょう。
お聞きしたいのは、10%から20%の間で1が出るようにする方法です。
C++
1#include <random> 2 3int main() 4{ 5 for(int i = 0; i<1000; i++) 6 { 7 for(int j = 0; j<1000; j++) 8 { 9 result = 1 10 } 11 } 12}
例えば、
i=0のとき、jが1000回ループし終わったらresult = 1の個数が120個(12%)
i=1のとき、jが1000回ループし終わったらresult = 1の個数が175個(17.5%)
i=2のとき、jが1000回ループし終わったらresult = 1の個数が101個(10.1%)
i=3のとき、jが1000回ループし終わったらresult = 1の個数が199個(19.9%)
というように、
内部ループの周回ごとに1が出る確率は変わるが、その変動範囲を10%以上20%以内に抑える方法が知りたいです。
(もちろん、試行回数が少なければ厳密にこの範囲に抑えるのは難しいでしょうから、95%以上の確率で収まっていればいいです。)
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/11 21:42