以给定平均数为基准,产生0到正无穷随机数

先上代码 

public static long randomByAvg(int avg) {
		double p = 1 - 1.0 / (avg + 1);
		Double r = Math.log(1 - Math.random()) / Math.log(p);
		if (r > Long.MAX_VALUE) {
			return Long.MAX_VALUE;
		}
		return r.longValue();
	}

定义平均数为:avg

定义概率:p=1-\frac{1}{avg+1}

定义随机小数:r,范围[0,1)

总结公式如下:R=\log {_{p}}^{(1-r)};

思路:

如果起始值为0,现在有一定概率(p)会+1,+1后又有一定概率(p)会+1,循环下去直到不继续加。

那么期望平均值为:

E=0\cdot (1-p)+1\cdot p\cdot (1-p)+2\cdot p^{2}\cdot (1-p)+...+\infty \cdot p^{\infty }\cdot (1-p)=\frac{p}{1-p}

推导过程:

\because E=0\cdot (1-p)+1\cdot p\cdot (1-p)+2\cdot p^{2}\cdot (1-p)+...+\infty \cdot p^{\infty }\cdot (1-p)

\therefore p\cdot E=0\cdot p\cdot (1-p)+1\cdot p^{2}\cdot (1-p)+2\cdot p^{3}\cdot (1-p)+...+\infty \cdot p^{\infty+1 }\cdot (1-p)

\therefore (1-p)\cdot E=p\cdot (1-p)+p^{2}\cdot (1-p)+ p^{3}\cdot (1-p)+...+p^{\infty }\cdot (1-p)-\infty \cdot p^{\infty+1 }\cdot (1-p)=(1-p)\cdot \frac{p\cdot (1-p^{\infty +1})}{1-p}=p

\therefore E=\frac{p}{1-p}=\frac{1}{1-p}-1

反推得到:p=1-\frac{1}{E+1}

这个E就是上面定义的avg

那么现在可以通过平均数得到继续+1的概率了。

我们知道随机数R取值的范围为:[0,\infty ),R的出现概率P_{R}=(1-p)*p^{R}

所以P_{R}概率应该是小于等于(1-p)的,所以取值范围是(0,1-p]

由于上面定义的随机小数r的范围是[0,1),所以我们让P_{R}=(1-p)(1-r)

也就是说(1-p)(1-r)=(1-p)*p^{R}

最终得出R=\log {_{p}}^{(1-r)}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值