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的数,产生的概率都是等概率的。