求百分比机率排序(java)

qiang029 2008-03-20 06:29:49
1 A1 10%
2 A2 15%
3 A3 35%
4 A4 6%
5 A5 30%
6 A6 4%

假设这是张表或是一个集合,数字代表序号,A代表ID 百分数代表每一行记录出现在页面例表第一位的机率(总合为100%)

现在要求把些记录查寻出来显示在页上,按所给的百分比把相应记录显示在第一位。(50%代表有50%的机会出现在第一的位置)

求一算法,能用JAVA实现最好
...全文
352 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiang029 2008-03-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yanbin1016 的回复:]
我有个不成熟的想法 看看是否可行
1 A1 10%
2 A2 15%
3 A3 35%
4 A4 6%
5 A5 30%
6 A6 4%
楼主取出的百分比在表里应该是一个字段吧?如果是的话 取出值后用字符串截取 从第一位取到百分号的位置。然后提取出来 转换成整型然后 比较 排序 不知道可以不 嘿嘿~
拆分字符串示例 :
String str="35%";
String[] test=str.split("%");
int i=Integer.parseInt(test[0]);
out.println(i);
[/Quote]

我不是要按35%的多少从小到大排,而是35%的机率排名第一位,楼上的没明白我意思
yanbin1016 2008-03-21
  • 打赏
  • 举报
回复
我有个不成熟的想法 看看是否可行
1 A1 10%
2 A2 15%
3 A3 35%
4 A4 6%
5 A5 30%
6 A6 4%
楼主取出的百分比在表里应该是一个字段吧?如果是的话 取出值后用字符串截取 从第一位取到百分号的位置。然后提取出来 转换成整型然后 比较 排序 不知道可以不 嘿嘿~
拆分字符串示例 :
String str="35%";
String[] test=str.split("%");
int i=Integer.parseInt(test[0]);
out.println(i);
qiang029 2008-03-21
  • 打赏
  • 举报
回复
感谢大家的回复,我会进快测试你们提供的方法,进快结贴。

另外回复二楼,只要按所给的机率显示第一位就行,第二位以后的随便排序
fastunit 2008-03-20
  • 打赏
  • 举报
回复
一个变相的算法:
随机出一个0~99的整数,由百分比确定一个区间(百分比越大占有的区间越大,如下所示),整数出现在哪个区间就把这一行作为第一行,例如随机数为55时把A3放到第一行。
1 A1 10% [0-10)
2 A2 15% [10-25)
3 A3 35% [25-60)
4 A4 6% [60-66)
5 A5 30% [66-96)
6 A6 4% [96-100)

执行1万次的一个结果:
(指定的概率/设为第一行的次数)
10 1008
15 1567
35 3483
6 613
30 2935
4 394

测试代码:

import java.util.Random;

public class RandomTest {

private static Random RANDOM = new Random();

public static void main(String[] args) {
int[][] array = new int[][] { { 10, 0 }, { 15, 0 }, { 35, 0 }, { 6, 0 },
{ 30, 0 }, { 4, 0 } };
for (int i = 0; i < 10000; i++) {// 测试10000次
setFirst(array);
}
for (int i = 0; i < array.length; i++) {//指定的概率-实际次数
System.out.println(array[i][0] + " " + array[i][1]);
}
}

private static void setFirst(int[][] array) {
int begin = 0;
int r = RANDOM.nextInt(100);
for (int i = 0; i < array.length; i++) {
if (r >= begin && r < begin + array[i][0]) {//判断区间
array[i][1] = array[i][1] + 1;//设为第一行,次数加1
break;
} else {
begin += array[i][0];
}
}
}

}
huilin118 2008-03-20
  • 打赏
  • 举报
回复
大家看一看,能否实现:
1.产生六个随机数
2.分别乘相应出现的概率
3.按大小排序
dracularking 2008-03-20
  • 打赏
  • 举报
回复
按概率实现顺排
Squall1009 2008-03-20
  • 打赏
  • 举报
回复
那第二行随便显示啥?
zapdos 2008-03-20
  • 打赏
  • 举报
回复
实现comparable接口存入红黑树里面就可以了

81,095

社区成员

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

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