ホームページ >Java >&#&チュートリアル >NavigableMaps を使用して Java で重み付きランダム選択を実装するにはどうすればよいですか?
Java でのランダムな重み付き選択
プログラミングの分野では、重み付きランダム選択とは、次の確率が得られるセットから項目を選択することを指します。選択は、関連する重みに直接リンクされます。この手法は、確率に基づいた偏った選択が必要なシミュレーションや宝くじなどのシナリオに応用できます。
Java の重み付きランダム選択の問題に対処するために、NavigableMap の概念を導入します。このデータ構造により、重みを対応する項目にマッピングし、マップを昇順で移動することができます。乱数ジェネレーターの助けを借りて、重量に比例する確率でアイテムを効率的に選択できます。
さまざまな確率で動物を選択する例を考えてみましょう:
NavigableMap を使用して重み付けされたランダム選択を実装するには、次のクラスを作成できます。
public class RandomCollection<E> { //NavigableMap to store weights and corresponding items private final NavigableMap<Double, E> map = new TreeMap<>(); //Random instance for generating random weights private final Random random; //Total sum of weights private double total = 0; public RandomCollection() { this(new Random()); } public RandomCollection(Random random) { this.random = random; } //Add an item to the collection with its weight public RandomCollection<E> add(double weight, E result) { if (weight <= 0) return this; total += weight; map.put(total, result); return this; } //Select a random item based on weights public E next() { double value = random.nextDouble() * total; return map.higherEntry(value).getValue(); } }
実証するために、RandomCollection を作成して動物の重みを設定してみましょう。
RandomCollection<String> rc = new RandomCollection<>(); rc.add(40, "dog") .add(35, "cat") .add(25, "horse");
これで、 next() メソッドを繰り返し呼び出して、割り当てられた動物に基づいて動物を選択できます。 weights:
for (int i = 0; i < 10; i++) { System.out.println(rc.next()); }
このコードは、体重に比例して各動物を選択する確率で動物の名前のシーケンスを生成します。 NavigableMap とランダム性の力を利用することで、Java で加重ランダム選択を効果的に実装でき、事前定義された確率に基づいて偏った結果を可能にします。
以上がNavigableMaps を使用して Java で重み付きランダム選択を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。