1等概率的生成(0-8)范圍內的正整數
?
// Math.random 數據范圍[0,1) 且 是 等概率的產生隨機數
// 應用:
// 1.生成等概率的整數(等概率的生成(0-8)范圍內的正整數
int value = (int) (Math.random() * 9);
System.out.println("value = " + value);
2?從a~b等概率事件,算c~d的等概率事件
已知函數f(x)在3-19上等概率,算出一個g(x)在20-56上等概率?
思路:
1.56-20=36, 20-56的等概率 等價于 0-36的等概率+36,所以就去找0-36的等概率事件就行。
2把已知的等概率函數轉f(x) 化為 0,1事件發生器,即:歸一化
? ? ? ? 19-3+1=17, 3-19共17個數,從中間一分??3-10 ,11,? 12-19 。3-10 轉化為0事件,12-19轉換為1事件,遇到11,重試,因為3-19是等概率的。所以 0,1 發生器也是等概率的。
? ? ? ? 如果是偶數次,就沒有中間11 重試的事了。
3.重點來了,如何把已知的等概率的? 0,1發生器,轉換為0-36的等概率事件。方法就是通過二進制位的左移來實現。0-36的數,看著有37個,但是最大的數也就占7位。從最高位7位,開始處理,到第6位,。。。第1位。每一位移動都是等概率的。所以整體0-36的數,產生的概率都是等概率的。
?