关于随机数出现的概率

longyun015 2014-03-26 10:29:03
我的目的是这样的。 有一个方法,返回一个 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
但是数量大,这种就感觉效率不高咯。

请问高手们有什么好办法?
...全文
928 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
levelnini 2014-03-27
  • 打赏
  • 举报
回复
引用 1 楼 u012872817 的回复:
int n=(int)(Math.pow(Math.random(), k)*100+1);//k=1时平均分布,k<1时出现大数概率大,k>1时出现小数概率大,
自己调节k
这个方法很巧妙啊!
longyun015 2014-03-27
  • 打赏
  • 举报
回复
引用 1 楼 u012872817 的回复:
int n=(int)(Math.pow(Math.random(), k)*100+1);//k=1时平均分布,k<1时出现大数概率大,k>1时出现小数概率大,
自己调节k
谢谢。我还真没想到用这种增长速度来体现的。 先看看后面有没有好办法。再给你分
longyun015 2014-03-27
  • 打赏
  • 举报
回复
引用 2 楼 petera1 的回复:
新人一枚,有个想法不知可行否,产生2次随机数,然后取较小的那个数,按排列组合来看,应该是越大获得几率越小.
具体是怎样的?不太明白
longyun015 2014-03-27
  • 打赏
  • 举报
回复
引用 3 楼 lliiqiang 的回复:
我用实际例子说明我的方法: 1 2 3 4四个数取得一个,4个数概率比例是4:3:2:1 4+3+2+1=10 随机取0-10之间的数 如果<4取1 如果>=4并且<7取2 如果>=7并且<9取3 如果>=9取4
------------------------------------- 可是我的数字不止10个数。这样要做很多判断。。。不太符合
petera1 2014-03-26
  • 打赏
  • 举报
回复
新人一枚,有个想法不知可行否,产生2次随机数,然后取较小的那个数,按排列组合来看,应该是越大获得几率越小.
wwzhzh 2014-03-26
  • 打赏
  • 举报
回复
int n=(int)(Math.pow(Math.random(), k)*100+1);//k=1时平均分布,k<1时出现大数概率大,k>1时出现小数概率大,
自己调节k
xue08161981 2014-03-26
  • 打赏
  • 举报
回复
我用实际例子说明我的方法: 1 2 3 4四个数取得一个,4个数概率比例是4:3:2:1 4+3+2+1=10 随机取0-10之间的数 如果<4取1 如果>=4并且<7取2 如果>=7并且<9取3 如果>=9取4
lliiqiang 2014-03-26
  • 打赏
  • 举报
回复
我用实际例子说明我的方法: 1 2 3 4四个数取得一个,4个数概率比例是4:3:2:1 4+3+2+1=10 随机取0-10之间的数 如果<4取1 如果>=4并且<7取2 如果>=7并且<9取3 如果>=9取4

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧