gpt4 book ai didi

java - 随机加权选择然后去除权重

转载 作者:行者123 更新时间:2023-12-02 12:57:47 24 4
gpt4 key购买 nike

我对@PeterLawrey 的评论没有任何声誉 答案:Random weighted selection in Java 。这很好。但现在我打电话next()得到结果 A,并希望从 map 中删除 A 的权重以避免再次获得A。我该如何处理?

最佳答案

您可以在 PeterLawrey 的解决方案中简单地更改此行

public E next() {
double value = random.nextDouble() * total;
return map.higherEntry(value).getValue();
}

public E next() {
double value = random.nextDouble() * total--;
return map.remove(higherKey(value));
}

原因remove()返回删除后关联的值

或者,如果您需要在选择后删除元素,则可以使用其他解决方案。将所有元素添加到“LinkedList”中,每个元素必须添加与其权重一样多的次数,然后使用 Collections.shuffle(),根据 JavaDoc

Randomly permutes the specified list using a default source of randomness. All permutations occur with approximately equal likelihood.

最后,使用 pop()removeFirst() 获取和删除元素

Map<String, Integer> map = new HashMap<String, Integer>() {{
put("Five", 5);
put("Four", 4);
put("Three", 3);
put("Two", 2);
put("One", 1);
}};

LinkedList<String> list = new LinkedList<>();

for (Map.Entry<String, Integer> entry : map.entrySet()) {
for (int i = 0; i < entry.getValue(); i++) {
list.add(entry.getKey());
}
}

Collections.shuffle(list);

System.out.println("Size: " + list.size());
int size = list.size();
for (int i = 0; i < size; i++) {
System.out.println(list.pop());
}

System.out.println("Size: " + list.size());

关于java - 随机加权选择然后去除权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44368961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com