ホームページ > 記事 > ウェブフロントエンド > 加重乱数を生成する方法: 累積確率分布が答えですか?
重み付き乱数の生成: 拒絶サンプリングを超えて
確率の領域では、重み付き乱数の生成は、シミュレーションと統計モデリング。拒絶サンプリングは多くの場合、直接的な解決策として機能しますが、パフォーマンスとメモリ消費量に制限が生じます。
累積確率分布の形でエレガントな代替手段が登場します。このアプローチにより、事前に構築されたルックアップ テーブルの必要性がなくなり、メモリが大幅に節約され、値を選択する際の一定時間のパフォーマンスが向上します。 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 サイトの他の関連記事を参照してください。