Shuz*'s Blog

事象の性質を考察する

乱数による開区間の生成

たくさんの空でない開区間を乱数で生成したいとき、l = rand([0, N - 1]), r = rand([l + 1, N]) としていないだろうか?これでは分布に偏りが生じてしまう。例えば、[0, x) の出現確率は [N - 1, N) の出現確率の \frac{{1}}{{N}} になってしまう。これを避けるには、

l = rand([0, N])
r = rand([0, N - 1])
if (l <= r) r++
else swap(l, r)

とすればよい。