>  기사  >  Java  >  Java에서 가중치가 적용된 무작위 선택을 구현하는 방법은 무엇입니까?

Java에서 가중치가 적용된 무작위 선택을 구현하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-08 08:05:01276검색

How to Implement Weighted Random Selection in Java?

Java의 가중치 무작위 선택

세트에서 항목을 선택할 때 항목마다 서로 다른 확률을 할당하는 것이 바람직한 경우가 많습니다. 이 방법을 가중치 적용 무작위 선택이라고 합니다.

관련 가중치가 있는 항목 컬렉션이 있는 다음 시나리오를 고려하십시오.

Item Weight
Sword of Misery 10
Shield of Happy 5
Potion of Dying 6
Triple-Edged Sword 1

이 경우 가중치는 선택 가능성을 나타냅니다. 그 항목. 예를 들어, 삼날검보다 불행의 검을 얻을 확률이 10배 더 높습니다.

Java에서 가중치가 적용된 무작위 선택을 구현하려면 NavigableMap을 사용할 수 있습니다.

import java.util.NavigableMap;
import java.util.Random;
import java.util.TreeMap;

public class RandomCollection<E> {
    private final NavigableMap<Double, E> map = new TreeMap<>();
    private final Random random;
    private double total = 0;

    public RandomCollection() {
        this(new Random());
    }

    public RandomCollection(Random random) {
        this.random = random;
    }

    public RandomCollection<E> add(double weight, E result) {
        if (weight <= 0) return this;
        total += weight;
        map.put(total, result);
        return this;
    }

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

사용법:

RandomCollection<String> rc = new RandomCollection<>()
        .add(40, "dog").add(35, "cat").add(25, "horse");

for (int i = 0; i < 10; i++) {
    System.out.println(rc.next());
}

이 코드는 특정 무게의 항목을 컬렉션에 추가한 다음 컬렉션에 따라 무작위 항목을 선택하는 방법을 보여줍니다. 할당된 확률에 따라.

위 내용은 Java에서 가중치가 적용된 무작위 선택을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.