ホームページ  >  記事  >  ウェブフロントエンド  >  重み付けされた乱数を生成するには、ルックアップ テーブルと反復合計のどちらのアプローチが最適ですか?

重み付けされた乱数を生成するには、ルックアップ テーブルと反復合計のどちらのアプローチが最適ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-11 00:27:02306ブラウズ

Which Approach is Best for Generating a Weighted Random Number: Lookup Table or Iterative Summation?

重み付き乱数の生成: 拒否サンプリングの効率的な代替手段

一方、拒否サンプリングは、重み付けされた確率で乱数を選択するための簡単なアプローチです。 、すべてのシナリオにおいて最も効率的な解決策であるとは限りません。ここでは、明確なパフォーマンス特性を持つ 2 つの代替戦略を示します。

定数時間ルックアップ テーブル (高階関数経由)

このアプローチには、重みからルックアップ テーブルを作成することが含まれます。仕様を定義し、テーブルから値を取得する関数を返します。

  • 定数時間値の選択
  • 高階関数を使用した簡単な実装

ただし、この戦略は構築に線形時間が必要です

反復合計

この戦略では、範囲内で乱数が生成されます。 [0,1) と重みの累積合計と繰り返し比較されます。乱数が特定の値の累積和の範囲内にある場合、その値が返されます。このアプローチの利点は次のとおりです。

  • 事前のテーブル構築コストが不要
  • エントリ数に比例した平均パフォーマンス

ただし、このアプローチは

結論

アプローチの選択は、アプリケーションの特定の要件によって異なります。定時ルックアップはパフォーマンスが重要なシナリオに最適ですが、反復合計は、大きな仕様や重みが小さいか正確な値を持つシナリオに適しています。

以上が重み付けされた乱数を生成するには、ルックアップ テーブルと反復合計のどちらのアプローチが最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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