java 权重_Java 基于权重按比例分配算法

该博客介绍了如何在Java中实现一个基于权重的随机选择策略。通过`WeightRandomStrategy`类,使用TreeMap存储权重并按比例进行分配。在示例中,权重分别为90和10的两个选项(TR和TX)在10000次随机选择后,接近预期地得到了8993次和1007次的选择次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class WeightRandomStrategy {

private TreeMap weightMap = new TreeMap<>();

public WeightRandomStrategy(List> list) {

for (Pair pair : list) {

double lastWeight = this.weightMap.size() == 0 ? 0 : this.weightMap.lastKey();

this.weightMap.put(pair.getValue().doubleValue() + lastWeight, pair.getKey());

}

}

public K random() {

double randomWeight = this.weightMap.lastKey() * Math.random();

SortedMap tailMap = this.weightMap.tailMap(randomWeight, false);

return this.weightMap.get(tailMap.firstKey());

}

}

List> list = new ArrayList<>();

list.add(new ImmutablePair<>("TR", 90));

list.add(new ImmutablePair<>("TX", 10));

WeightRandomStrategy strategy = new WeightRandomStrategy<>(list);

int a = 0, b = 0;

for (int i = 0; i < 10000; i++) {

switch (strategy.random()) {

case "TR":

a++;

break;

case "TX":

b++;

break;

default:

break;

}

}

System.out.println("a=" + a + ", b=" + b);

System.out.println("a+b=" + (a + b));

---------------------------------------------------output

a=8993, b=1007

a+b=10000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值