计算概率算法

wwy12321 2012-03-15 05:03:23
比如我有一个数组,数组长度是n,数组里包含一个字母和它出现的概率,比如A出现的概率是0.12,B出现的概率是0.023,C出现的概率是0.38,现在我想根据这些概率从这个长度为n的数组里随机取出m个数,当然概率越大的出现的几率越高。
...全文
192 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
DeDeWo 2012-03-20
  • 打赏
  • 举报
回复
lz想表达啥意思?
欢乐的小猪 2012-03-19
  • 打赏
  • 举报
回复
设数的概率分别是 A1,A2..An
那么第k个数的概率分布区间为 Sum(A1~Ak-1)到 Sum(A1~Ak)
每次生成一个0 ~ Sum(A1~An) 的随机数,看这个数在哪个区间,就取哪个数,取m次就可以
[Quote=引用 6 楼 hbu_pig 的回复:]

设数的概率分别是 A1,A2..An
那么第k个数的概率分布区间为 Sum(A1~Ak-1)到 Sum(A1~Ak)
每次生成一个0 ~ Sum(A1~Ak) 的随机数,看这个数在哪个区间,就取哪个数,取m次就可以
[/Quote]
欢乐的小猪 2012-03-19
  • 打赏
  • 举报
回复
设数的概率分别是 A1,A2..An
那么第k个数的概率分布区间为 Sum(A1~Ak-1)到 Sum(A1~Ak)
每次生成一个0 ~ Sum(A1~Ak) 的随机数,看这个数在哪个区间,就取哪个数,取m次就可以
弦率 2012-03-19
  • 打赏
  • 举报
回复
比选择题的abcd的乱序排列要麻烦
弦率 2012-03-19
  • 打赏
  • 举报
回复
学习了,这个是双色球吧??
ozy2008 2012-03-16
  • 打赏
  • 举报
回复
设数的概率分别是 A1,A2..An
那么第k个数的概率分布区间为 Sum(A1~Ak-1)到 Sum(A1~Ak)
每次生成一个0 ~ 1 随机数,看这个数在哪个区间,就取哪个数,取m次就可以
wwy12321 2012-03-16
  • 打赏
  • 举报
回复
都给分
一条大红龙 2012-03-15
  • 打赏
  • 举报
回复
参考2楼大哥的思路,弄了个代码,我没用数组,感觉用数组的List要好操作一点吧。
package test;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class TestRandom {

public static void main(String[] args) {
List<Object[]> objectList = new ArrayList<Object[]>();
Random rand = new Random();
List<String> selectedLettr = new ArrayList<String>();
//概率的标尺,如果你的概率的小数位后有n位,则可以定位为(1*10的n次方-1)
//此例我用1位
int maxNum = 99;

//要取出的数目
int selectNum = 2;
//此处list的长度为3
Object[] objects = {"a", 0.4};
objectList.add(objects);
Object[] objects1 = {"b", 0.2};
objectList.add(objects1);
Object[] objects2 = {"c", 0.4};
objectList.add(objects2);

for (int i = 0; i < selectNum; i++) {
int rateNum = rand.nextInt(maxNum);

if (rateNum >= 0 && rateNum <= 39) {
selectedLettr.add((String)objectList.get(0)[0]);
} else if (rateNum >= 40 && rateNum <= 59) {
selectedLettr.add((String)objectList.get(1)[0]);
} else {
selectedLettr.add((String)objectList.get(2)[0]);
}
}

for (String str:selectedLettr) {
System.out.println(str);
}
}
}
昵称很不好取 2012-03-15
  • 打赏
  • 举报
回复
弄个随机数就好了,比如有三个数:
A概率为0.12
B概率为0.23
C概率为0.65

要根据他们的概率取出它们,可以得到一个在1-100之间的随机数n,如果1<=n<=12则选择A,如果13<=n<=35则选择B,如果36<=n<=100,则选择C,符合各自的概率分布

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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