这次记录主要是因为一个关于概率的需求,大概是要求筛选出A\B\C三个选项,第一次选定A后,下一单再次做筛选的时候,B、C的概率比其余选项筛选时的概率要低。
思路主要基于我们内部的框架去改造,因为原来没有考虑到这一部分,所以原来是直接选中后置选中状态,然后未选择的置回初始状态。现在的想法是根据随机选择的结果多给一个已随机过的状态,然后在随机算法中,给不同状态的数据不同的比重,最后根据累加出来的比重区间出一个数,看这个数落在哪个区间内就选择哪个数据。这里最合适的就是用树结构去做累加。
主要代码块
private MY_DATA_STRUCTURE randomAL(List<MY_DATA_STRUCTURE> list) {
TreeMap<Double, MY_DATA_STRUCTURE> map = new TreeMap<>();
for(int i = 0; i < list.size(); i++) {
MY_DATA_STRUCTURE key = list.get(i);
double value = 0;
//分配比重
if(list.get(i).getStatus() == 0) {
value = 2.0;
}else if(list.get(i).getStatus() == 0 {
value = 1.5;
}
double lastValue = map.size() == 0 ? 0 : map.lastKey().doubleValue();
map.put(value + lastValue, key);
}
//取随机数
double number = map.lastKey() * Math.random();
SortedMap<Double, MY_DATA_STRUCTURE> tailMap = map.tailMap(number, false);
return map.get(tailMap.firstKey());
}