要素の重みを持つリストから無作為にk個の要素を選択する。
質問
重みのない(確率が等しい)選択は、美しく表現されています。 ここで .
この方法を重み付けに変換する方法はないかと考えていました。
また、他のアプローチにも興味があります。
更新:サンプリング を使わずに 置換
どのように解決するのですか?
これはとても古い質問ですが、ちょっとした計算を適用すれば、O(n)時間でこれを行うための巧妙なトリックがあると思います
は 指数分布 には2つの非常に便利な性質があります。
-
異なる率パラメータを持つ異なる指数分布から n 個のサンプルが与えられると、与えられたサンプルが最小である確率は、その率パラメータをすべての率パラメータの合計で割ったものに等しくなります。
-
それは "メモリーレス" です。つまり、最小値をすでに知っている場合、残りの要素のどれかが 2 番目から最小値である確率は、真の最小値が削除された場合 (そして生成されなかった場合)、その要素が新しい最小値であった確率と同じになるのです。これは明白なことのように思えますが、いくつかの条件付き確率の問題があるため、他の分布では当てはまらないかもしれないと思います。
事実1を用いると、1つの要素を選ぶには、この指数分布のサンプルを重みと同じ割合のパラメータで生成し、最小値のものを選べばよいことがわかります。
事実2を用いると、指数分布のサンプルを生成し直す必要がないことがわかります。代わりに、各要素について1つずつ生成し、最小のサンプルを持つk個の要素を取るだけです。
最小のkを見つけることは、O(n)で行うことができます。以下のように クイックセレクト アルゴリズムを使用して k 番目の要素を見つけ、次にすべての要素をもう一回通過させて k 番目より小さいものをすべて出力するだけです。
便利なメモ:もし指数分布のサンプルを生成するライブラリにすぐにアクセスできない場合は、以下の方法で簡単に行うことができます。
-ln(rand())/weight
関連
-
[解決済み】決定木(比較ソートアルゴリズム)の葉の最短の深さ)
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] JavaScript の配列からランダムな値を取得する
-
[解決済み] 地図上のA地点からB地点への道順を計算するアルゴリズムは?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] キャッシュの無効化 - 一般的な解決策はありますか?
-
[解決済み] MapReduceのソートアルゴリズムはどのように動作するのですか?
-
[解決済み] ハングマンの難易度を「易しい」「中くらい」「難しい」に分類するためのアルゴリズム
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] アルゴリズムAの実行時間は少なくともO(n²)である - なぜ無意味なのか?
-
[解決済み] 素朴な」アルゴリズムとは何か、「閉じた」解とは何か?
-
[解決済み] 2つのNFAの交点の求め方
-
[解決済み] 複雑さ O(log(n)) は O(sqrt(n)) と同等か?
-
[解決済み] C#でList<T>からN個のランダムな要素を選択する
-
[解決済み] ハングマンの難易度を「易しい」「中くらい」「難しい」に分類するためのアルゴリズム
-
[解決済み] luceneはどのように文書をインデックスするのですか?
-
[解決済み] 三角関数の仕組み [クローズド]
-
[解決済み] 20問のAIアルゴリズムはどのように機能するのか?
-
アレイからの重み付きランダム選択