ここStackoverflowで初めて。アルゴリズムの検索で誰かが私を助けてくれることを願っています。
指定された範囲で、合計が指定された合計になる N 個の乱数を生成する必要があります。
例: 合計が 11 になる数字を 3 つ生成します。
範囲:
- 1 ~ 3 の値。
- 5 ~ 8 の値。
- 値は 3 ~ 7 です。
この例で生成される数値は、2、5、4 です。
私はすでにたくさん検索しましたが、必要な解決策を見つけることができませんでした。
次のようにモジュロを使わない定数和の N 数のように生成することは可能 です 。
または、N 個のランダムな値を生成し、それらを合計して、定数の合計をランダムな合計で割り、その後、ここで提案されているように、各乱数にその商を掛けます。
主な問題、これらの解決策を採用できない理由は、ランダム値のすべてに異なる範囲があり、範囲内で値を均一に分散する必要があることです (たとえば、値を切り捨てると発生する最小/最大で頻度が発生しません)最小/最大よりも小さい/大きい)。
また、乱数(その例では、値1、2または3)を取り、範囲内(最小/最大または最小と合計の残りのいずれか小さい方に応じて)内の値を生成するソウルションについても考えました)、与えられた合計からその数を引き、すべてが配布されるまでそれを続けます。しかし、それは恐ろしく非効率的です。アルゴリズムのランタイムが固定されている方法を実際に使用できます。
私はそれをJavaで実行しようとしています。しかし、誰かがすでに解決策を用意している場合を除いて、その情報はそれほど重要ではありません。私が必要とするのは、アルゴリズムの説明またはアイデアだけです。