重み付き乱数の生成: 拒否サンプリングの効率的な代替手段
一方、拒否サンプリングは、重み付けされた確率で乱数を選択するための簡単なアプローチです。 、すべてのシナリオにおいて最も効率的な解決策であるとは限りません。ここでは、明確なパフォーマンス特性を持つ 2 つの代替戦略を示します。
定数時間ルックアップ テーブル (高階関数経由)
このアプローチには、重みからルックアップ テーブルを作成することが含まれます。仕様を定義し、テーブルから値を取得する関数を返します。
ただし、この戦略は構築に線形時間が必要です
反復合計
この戦略では、範囲内で乱数が生成されます。 [0,1) と重みの累積合計と繰り返し比較されます。乱数が特定の値の累積和の範囲内にある場合、その値が返されます。このアプローチの利点は次のとおりです。
ただし、このアプローチは
結論
アプローチの選択は、アプリケーションの特定の要件によって異なります。定時ルックアップはパフォーマンスが重要なシナリオに最適ですが、反復合計は、大きな仕様や重みが小さいか正確な値を持つシナリオに適しています。
以上が重み付けされた乱数を生成するには、ルックアップ テーブルと反復合計のどちらのアプローチが最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。