Python で事前定義された値に合計する乱数を生成する
提示された課題は、集合的に合計する一連の擬似乱数を生成することです。特定の値まで。具体的には、ユーザーは合計 40 になる 4 つの数値を生成したいと考えています。
標準ソリューション
標準ソリューションは均一であり、さまざまな目標合計に適応できます。ランダム サンプリングを使用して、指定された制約を満たす一連の整数を選択します。
<code class="python">import random def constrained_sum_sample_pos(n, total): """Return a randomly chosen list of n positive integers summing to total. Each such list is equally likely to occur.""" dividers = sorted(random.sample(range(1, total), n - 1)) return [a - b for a, b in zip(dividers + [total], [0] + dividers)]</code>
非負整数の解決策
非負の整数が優先される状況では、単純な変換は標準解に適用できます。
<code class="python">def constrained_sum_sample_nonneg(n, total): """Return a randomly chosen list of n nonnegative integers summing to total. Each such list is equally likely to occur.""" return [x - 1 for x in constrained_sum_sample_pos(n, total + n)]</code>
図による説明
生成プロセスを説明するために、以下を使用して 4 つの正の整数の合計が 10 になる例を考えてみましょう。 constrained_sum_sample_pos(4, 10).
0 1 2 3 4 5 6 7 8 9 10 # The universe. | | # Place fixed dividers at 0, 10. | | | | | # Add 4 - 1 randomly chosen dividers in [1, 9] a b c d # Compute the 4 differences: 2 3 4 1
結論
標準ソリューションは、事前定義された合計で乱数を生成するための信頼性の高い均一なアプローチを提供します。さまざまな合計値に適応させたり、非負の整数を処理できるように拡張したりできます。
以上がPython で合計が特定の値になる乱数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。