ホームページ > Java > &#&チュートリアル > Java で加重ランダム選択を実装するにはどうすればよいですか?

Java で加重ランダム選択を実装するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-08 08:05:01
オリジナル
333 人が閲覧しました

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

この場合、重みは選択の可能性を表します。そのアイテム。たとえば、Sword of Misery を入手できる可能性は Triple-Edged Sword よりも 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート