Menjana Nombor Rawak dengan Jumlah Tetap
Cabaran yang dikemukakan adalah untuk menjana satu siri nombor rawak pseudo yang jumlahnya sama dengan nilai yang telah ditetapkan . Khususnya, bagaimana untuk menjana empat nombor yang, apabila ditambah bersama, sama dengan 40.
Daripada bergantung pada kaedah yang boleh berat sebelah pengagihan nombor pertama, pendekatan yang lebih seragam digunakan. Penyelesaian menggunakan strategi membahagikan nilai yang dipratentukan kepada segmen yang lebih kecil, menggunakan pembahagi yang dipilih secara rawak.
Anggapkan kita mempunyai empat integer positif rawak (e, f, g, dan h) supaya 0 < e < f < g < h < 40. Kita boleh memperoleh empat nombor yang dikehendaki sebagai:
a = e
b = f - e
c = g - f
d = 40 - g
Teknik ini menjamin kebarangkalian yang sama untuk setiap set nombor, memastikan pengedaran seragam. Nombor rawak yang terhasil memenuhi keperluan penjumlahan kepada nilai yang telah ditetapkan.
Melanjutkan konsep ini, fungsi Python berikut menjana senarai rawak integer positif yang menjumlahkan kepada jumlah yang ditentukan:
<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>
Untuk menjana integer bukan negatif, transformasi tambahan digunakan:
<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>
Atas ialah kandungan terperinci Bagaimana Menjana Nombor Rawak dengan Jumlah Tetap, Pengagihan Seragam Dijamin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!