產生與預定義值求和的隨機數
在這種情況下,我們的目標是產生一個偽隨機數列表,這些偽隨機數共同添加直至特定的預定值。一種方法是隨機產生指定範圍內的數字,將其從總數中減去,然後重複此過程,直到總和等於所需值。然而,這種方法在對總和的貢獻方面有利於第一個產生的數字。
為了確保一致性,我們開發了一個更複雜的解決方案:
<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>
此方法產生一個列表總和為目標值的正整數。關鍵概念是每種可能的數字組合都有相同的可能性產生。此外,將此技術擴展到不同的總和和不同數量的隨機數非常簡單。
例如,如果我們將 n 設為 4,總計設為 40,我們可能會得到以下輸出:[4, 4, 25 ,7]。需要注意的是,此清單中的每個元素相加後都會產生預定義值 40。
為了允許非正整數,可以進行修改:
<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>
透過將每個值加一,我們可以產生一個非負整數列表,加起來等於所需的總數。
此方法確保每種可能的組合,無論數字是正數還是非負數,產生的機率相等。憑藉其用戶友好的實現和跨不同場景的多功能性,constrained_sum_sample_pos 和 constrained_sum_sample_nonneg 已成為 Python 中隨機數生成任務不可或缺的一部分。
以上是如何產生等概率地求和到預定義值的隨機數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!