@ PeterLawreyの の回答には評判がない:Random weighted selection in Java。それは良いです。しかし、今私はnext()
と呼んで結果をAとし、再びAを得ることを避けるためにAの重量をmap
から除去したいとします。どうすれば対処できますか?無作為に重み付けして選択した後、体重を取り除く
答えて
あなたが後に要素を削除する必要がある場合は、単純に、また
を削除した後に関連付けられた値を返しますremove()
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));
}
の原因で、この行を変更することができます別のソリューションを使用することができます。それは重量であり、その後、ランダム乱数のデフォルトのソースを使用して、指定されたリストを並べ替える
JavaDoc
によると、
Collections.shuffle()
を使用して「LinkedListの」内のすべての要素を追加し、各要素は何回として追加する必要があります。すべての並べ替えは、ほぼ等しい可能性で行われる。
最後に、[Javaでランダムな重み付きの選択]の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());
@kinglao私の答えは役に立ちましたか?あなたはそれを正しいものとして選ぶことができますか? –
私はちょうど削除することはできないと思う。 'total'フィールドもまた – kinglao
@kinglaoでも変わるはずですので、プログラムロジックによっても変更する必要があります。たぶん、第2のソリューションはあなたの目的により適しているでしょう。 –
- 1. MySQLでのランク付けと重み付けに基づく選択
- 2. SQL - 2つのテーブルからデータを選択して重複を取り除く
- 3. 無作為に選択し、各選択に対して特定の回数だけ繰り返します。
- 4. Chart.js積み重ねを取り除く
- 5. Pythonリスト無作為選択
- 6. リストから値を無作為に選択して選択した値を削除する方法が速い
- 7. ノックアウトチェックバインド最後に選択した要素を取り除く
- 8. 重み付け無向グラフ分割
- 9. ランダム要素の統計的/重み付け/確率的選択
- 10. 無作為に選択するEarlGrey
- 11. PHPのディレクトリから無作為にファイルを選択してください
- 12. csr_matrixに変換した後、重み付けをfcレイヤーにリロードします。
- 13. データフレームの列に重複した値を取り除く方法
- 14. rails sqliteデータベースに重複したエントリを取り除く
- 15. Selenium IDE:ドロップダウンから無作為に選択してください
- 16. 配列から無作為化項目を選択した後に項目インデックスを見つける方法
- 17. 確率で重み付けされたランダムな状態を選択する
- 18. 古い重複レコードを選択して削除しますか?
- 19. 2つの重み付き重み付けランダム
- 20. マクロ選択の最後に重複を削除する
- 21. 重複したコードのデバッグを取り除く
- 22. オートコンプリートで重複したエントリを取り除く
- 23. DBから無作為に作成された動的RadioButtonListから選択した値を取得します
- 24. 重複したテーブルから最も最近作成された行のみを選択してください
- 25. Seq2Seqモデルの重み付け
- 26. MPSCNN重み付け順序
- 27. 複数のテキストファイルを結合して重複を取り除く
- 28. C/C++の "igraph"で重み付けされた無向グラフを作成
- 29. 選択したクエリ出力から重複を削除する
- 30. foreachから重複を取り除く
可能な複製を使用して要素を取得し、削除(https://stackoverflow.com/questions/6409652/random-weighted-selection -in-java) –