「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 置換ありまたはなしで効率的な加重ランダム選択を実行するにはどうすればよいですか?

置換ありまたはなしで効率的な加重ランダム選択を実行するにはどうすればよいですか?

2024 年 11 月 9 日に公開
ブラウズ:722

How to Perform Efficient Weighted Random Selection with and Without Replacement?

置換ありおよび置換なしの加重ランダム選択

プログラミングの課題に応えて、リストからの加重ランダム選択の効率的なアルゴリズムを求めます。置換ありと置換なしの両方。

置換ありの加重選択

有効な 1 つ置換を伴う重み付け選択のメソッドは、エイリアス メソッドです。この手法では、重み付けされた要素ごとに同じサイズのビンのセットが作成されます。ビット操作を利用することで、二分探索に頼ることなく、これらのビンに効率的にインデックスを付けることができます。各ビンには、元の重み付けされた要素間の境界を表す単一のパーセンテージが格納されます。

等しい重みを持つ 5 つの要素の例を考えてみましょう: (a、b、c、d、e)。

エイリアス メソッドの実装

  1. 重みの正規化: 各重みを合計で割って合計します。 1.0.
  2. 要素の数 (ここでは 8) 以上の 2 の最小のべき乗を決定します。
  3. 各要素に空のパーティションを割り当てます。
  4. すべてのウェイトが分散されるまで次の手順を繰り返します。

    • 残りのウェイトが最も少ない要素をできるだけ多く配置します。空のパーティション。
    • パーティションが埋まっていない場合は、最も重い残りの要素を追加します。

この例では、数回の反復の後、次のパーティションが得られます。 :

  • p1: {a, 1.0}
  • p2: {a, b, 0.6}

実行時選択

  1. 0 から 1 までの乱数を生成します。
  2. 乱数をビットシフトして、パーティション インデックス。
  3. パーティションが分割されている場合は、ビットシフトされた数値の小数部分を使用して、どの要素を分割するかを決定します。 return.

置換なしの重み付き選択

置換なしの重みなし選択には重み付きリザーバー法のようなアルゴリズムが存在しますが、この問題は未解決のままです。

リリースステートメント この記事は次の場所に転載されています: 1729734152 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3