日期:2014-05-20  浏览次数:21103 次

关于随机数出现的概率
我的目的是这样的。 有一个方法,返回一个 0-100的数。
数字越小,概率越到, 数字越到出现的概率越难。
如  100个数, 1出现次数最多, 可能99 出现1次甚至0次。

然后是这样的,我先利用logistic 或者 泊松分布 函数,都可以 得出
一个函数,就是  对应数字,的概率, 如 1的概率为 0.98 ,90的概率为 0.02 ,
或者它的 逆推函数  根据 填入概率 得到 该对应数字。

现在问题是,我如何应用到 随机出现这个里面去。

我假设  random 函数 是平均分布,也就是 0-100 每个数出现的概率一样。
那么怎么 使得我 想要得到的 随机数 服从我要的 概率分布呢?

我有个笨方法,就是 把 数字的概率化为频数 存入一个数组。如
{1,1,1,1,2,2,2,3,3,4}   10个数。 1概率最大, 4概率最小。
我通过 得到 一个 rand 随机数  比如 5. 我再用 数组的下标5索引得到   数字 2
但是数量大,这种就感觉效率不高咯。

请问高手们有什么好办法?

------解决方案--------------------
int n=(int)(Math.pow(Math.random(), k)*100+1);//k=1时平均分布,k<1时出现大数概率大,k>1时出现小数概率大,

自己调节k