加重乱数生成
特定の確率で乱数を選択することは、プログラミングにおける一般的なタスクです。 Boost の乱数ジェネレーターは、重み付けされた確率でアイテムを選択する便利な方法を提供します。
次の重みを使用して 1 から 3 までの乱数を選択するシナリオを考えてみましょう:
アルゴリズム
Boost には、重み付き乱数を生成するための機能が組み込まれていません。ただし、適用できる簡単なアルゴリズムがあります:
コード例
Boost で、random_device および mt19937 乱数ジェネレーターを使用する:
std::mt19937 rng(std::random_device{}()); int total_weight = 90 + 56 + 4; for (int i = 0; i < total_weight; i++) { int random_number = rng() % total_weight; int current_weight = 90; if (random_number < current_weight) { return 1; } current_weight += 56; if (random_number < current_weight) { return 2; } return 3; // Reached the end of the weights }
最適化
重みの場合ほとんど変更されず、ランダムなピックが頻繁に発生する場合、各アイテムの累積重量合計を保存することで最適化を適用できます。これにより、より効率的な二分探索アプローチが可能になります。
さらに、アイテムの数は不明だが重みがわかっている場合、リザーバー サンプリングを重み付き乱数生成に適応させることができます。
以上がBoost の乱数ジェネレーターを加重乱数選択にどのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。