ホームページ  >  記事  >  ウェブフロントエンド  >  加重乱数を生成する方法: 累積確率分布が答えですか?

加重乱数を生成する方法: 累積確率分布が答えですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-11 04:09:03899ブラウズ

How to Generate Weighted Random Numbers: Is Cumulative Probability Distribution the Answer?

重み付き乱数の生成: 拒絶サンプリングを超えて

確率の領域では、重み付き乱数の生成は、シミュレーションと統計モデリング。拒絶サンプリングは多くの場合、直接的な解決策として機能しますが、パフォーマンスとメモリ消費量に制限が生じます。

累積確率分布の形でエレガントな代替手段が登場します。このアプローチにより、事前に構築されたルックアップ テーブルの必要性がなくなり、メモリが大幅に節約され、値を選択する際の一定時間のパフォーマンスが向上します。 JavaScript での動作は次のとおりです。

function weightedRand(spec) {
  var sum = 0;
  for (var i in spec) {
    sum += spec[i];
  }
  var r = Math.random() * sum;
  for (i in spec) {
    r -= spec[i];
    if (r <= 0) return i;
  }
}

加重乱数ジェネレーターは、次のようなシナリオでよく使用されます。

  • 確率的イベントのシミュレーション
  • 項目の選択さまざまな確率のインベントリから
  • に準拠する現実的なデータセットを生成する不均一な分布

重みが均一に分布する特定のケースでは、さらに単純なアプローチが有効であることがわかります。つまり、可能な値を表す配列からランダムなインデックスを選択するだけです。ただし、この方法は不均一な重み分布には不十分です。

実装の選択は、オプションの数、重みの分布、必要なパフォーマンス特性などの要素によって決まることに注意してください。

以上が加重乱数を生成する方法: 累積確率分布が答えですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。