指定概率的算法

amdgaming 2013-01-09 08:59:07
最少代码写出数组概率方法。
数组每位表示该位的概率。


int[] prob = {20,30,20,8,2,5,3,1,1,10};
...全文
267 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ceclinux 2013-01-10
  • 打赏
  • 举报
回复
大神还在楼下,另外,能不能解释详细点
amdgaming 2013-01-10
  • 打赏
  • 举报
回复
6楼是对的,呵呵 谢谢 我昨天已经想到了
笑莫问 2013-01-10
  • 打赏
  • 举报
回复
不敢臆度楼猪题目意思 我只是隐约想到一个算法的影子,哈夫曼编码
Jacky-止涯 2013-01-10
  • 打赏
  • 举报
回复
既然楼主说的不是很清楚,那我就先yy一下吧! 数组概率就是说,prob有10个元素,分别对应0到9的每一位; 而prob的元素和为100,证明是同一个事件,就是说随机抽出一位,0到9的概率分别如prob所列。 ------------------------------------------ 思路: prob的元素映射成0到99的区间有以下关系: [20, 30, 20, 8, 2, 5, 3, 1, 1, 10] --> [20, 50, 70, 78, 80, 85, 88, 89, 90, 100] 由于0到99的随机数是均匀分布的,所以每个元素占的长度,就是相当于被选中的概率。 所以,只要看0到99的随机数random,在哪一个区间,就知道是哪个数字被选中了。 下面代码主要就是【sum += prob[i]】和【if (random <= sum)】,其他都是假设条件。 这里先假设prob的元素全部为10,这样输出结果更容易看出来他们之间的关系。楼主换成原来的prob就行。

int[] prob = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10};
int[] num = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int sum = 0;
int random = (int) (Math.random() * 100);
for (int i = 0; i < prob.length; i++) {
    sum += prob[i];   // 概率段
    if (random <= sum) {   // 一大于,就是踏入了该概率段
        System.out.println("random: " + random + " - " + num[i]);
        break;
    }
}
Jacky-止涯 2013-01-10
  • 打赏
  • 举报
回复
引用 楼主 amdgaming 的回复:
最少代码写出数组概率方法。 数组每位表示该位的概率。 int[] prob = {20,30,20,8,2,5,3,1,1,10};
没明白什么是【数组概率方法】
流星陨落 2013-01-09
  • 打赏
  • 举报
回复
先顶个,大神在楼下
amdgaming 2013-01-09
  • 打赏
  • 举报
回复
请帮忙啊,谢谢

62,634

社区成员

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

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