在Python 中產生與預定義值求和的隨機數
所面臨的挑戰是產生一組偽隨機數,這些偽隨機數共同求和達到特定值。具體來說,用戶希望產生四個數字,總和為 40。
標準解
標準解既統一又可適應不同的目標總和。它採用隨機取樣來選擇滿足指定限制的整數序列:
<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>
圖形解釋
為了說明產生過程,請考慮使用以下方法取得四個正整數總和為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中文網其他相關文章!