加重乱数の生成
加重乱数の生成では、各数値の確率が次の条件で決定される範囲から乱数を選択します。重さ。このタスクは、シミュレーションやゲームなどのさまざまなアプリケーションで発生します。
初期解決策
一般的なアプローチは、拒否サンプリング です。 ColdFusion コードを提供しました。この方法では、要素が重みに従って分散されたルックアップ テーブルを作成します。ただし、このアプローチには、テーブル構築時の線形オーバーヘッドや潜在的なメモリ消費の問題などの制限があります。
代替戦略
実装
重み付きランダムの実装エイリアスサンプリングを使用した JavaScript での数値生成:
function weightedRand(weights) { // Build the alias table let table = []; let totalWeight = 0; for (let i = 0; i < weights.length; i++) { totalWeight += weights[i]; } for (let i = 0; i < weights.length; i++) { let prob = weights[i] / totalWeight; let alias = i; table.push({ prob: prob, alias: alias }); } // Generate a random number return function() { let r = Math.random() * totalWeight; let i = 0; let alias = -1; while (i < table.length && alias === -1) { if (r < table[i].prob) { alias = i; } else { r -= table[i].prob; i = table[i].alias; } } return alias; } }
以上が加重乱数生成を効率的に最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。