セットを持ち、その要素に確率が関連付けられているようにしたいので、セットから要素をランダムに選択すると、分布は要素に関連付けられた確率に従います。見たい映画のリストを保存する非常に小さなJavaアプリケーションでそれを使用して、ランダムな映画を提案できるようにしたいと思います(そうでなければ、映画を選ぶのにいつも何時間もかかります)。各映画に、その映画が私に提案された回数を関連付けたいと思います。これは、その映画が次の提案のリストから選択される確率に反比例します。
不均一な分布でランダムに要素を選択できるデータ構造はありますか?
そうでない場合、そのようなデータ構造を記述する最も効率的な方法は何ですか? もちろん、常に配列を作成し、リストのすべての要素を十分な頻度で配列に配置して、配列内の値の分布が希望する確率と一致し、その配列からランダムな要素を選択することもできます。しかし、映画の大規模なセットの場合、それは非常に非効率的です. 私が持っていた別のアイデアは、要素とそれまでのすべての要素の確率の合計をカプセル化することでした (したがって、最初の要素は (first, p(first)) としてカプセル化され、2 番目の要素は (second, p(second) + p(最初)) など)、次に 0 から 1 の間の乱数を選択し、それらのカプセル化された要素のソートされたリストでバイナリ検索を実行します。それは賢明に聞こえますか?
TL:DR (そしてやや抽象的): Java で非一様分布をセットの要素に効率的にマップするにはどうすればよいですか?