乱数を使用したアルゴリズムその2
前回ご紹介した、アルゴリズムイントロダクションにのっている、第5章の練習問題5.1-3に挑戦。
毎回、まず自力で考えてギブアップして、ヒントもらったり教えてもらったりして解いています。
がんばれわたし!
そして教えてくれる優しいお兄さんに感謝!
実はですね、この本すばらしいのですが、解答がないのです。モヒカンです。
【問題】
0と1をそれぞれ1/2の確率で出力する手続きを考えよう。
利用できるもの:1をp,0を(1-p)の確率で出力するBIASED-RANDOM。ただし0
package jp.ne.hatena.syoko_sasaki; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; import org.junit.Test; public class RandomManagerTest { // BIASED-RANDOM作成 public static int biasedRandom(double p) { if (p <= 0 || p >= 1) throw new IllegalArgumentException("pの値がおかしいんじゃなイカ?"); return Math.random() <= p ? 1 : 0; } @Test() public void biasedRandomTest() throws Exception { int per = 0; for (int i = 0; i < 1000; i++) { per += biasedRandom(0.3); } assertThat(per > 200 && per < 400, is(true)); } @Test(expected = IllegalArgumentException.class) public void errorTest() throws Exception { biasedRandom(1.1); fail(); } }
続きは明日かなー。