Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menjana Nombor Rawak Menjumlahkan kepada Nilai Pratakrif dengan Kebarangkalian Sama?
Menjana Nombor Rawak Menjumlahkan kepada Nilai Pratakrif
Dalam konteks ini, kami berhasrat untuk menjana senarai nombor rawak pseudo yang secara kolektif menambah sehingga nilai tertentu yang telah ditetapkan. Satu kaedah melibatkan menjana nombor secara rawak dalam julat yang ditentukan, menolaknya daripada jumlah dan mengulangi proses ini sehingga jumlahnya sama dengan nilai yang dikehendaki. Walau bagaimanapun, pendekatan ini memihak kepada nombor terjana pertama dari segi sumbangannya kepada jumlah.
Untuk memastikan keseragaman, penyelesaian yang lebih canggih telah dibangunkan:
<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>
Kaedah ini menghasilkan senarai daripada integer positif yang menjumlahkan kepada nilai sasaran. Konsep utamanya ialah setiap kombinasi nombor yang mungkin sama mungkin dihasilkan. Selain itu, memanjangkan teknik ini kepada jumlah yang berbeza dan nombor yang berbeza bagi nombor rawak adalah mudah.
Sebagai contoh, jika kita menetapkan n kepada 4 dan jumlah kepada 40, kita mungkin memperoleh output berikut: [4, 4, 25 , 7]. Adalah penting untuk ambil perhatian bahawa setiap elemen senarai ini, apabila dijumlahkan, menghasilkan nilai pratakrif 40.
Untuk membenarkan integer bukan positif, pengubahsuaian tersedia:
<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>
Oleh menambah setiap nilai dengan satu, kita boleh menjana senarai integer bukan negatif yang menjumlahkan sehingga jumlah yang diingini.
Kaedah ini memastikan setiap gabungan yang mungkin, tidak kira sama ada nombor itu positif atau bukan negatif, mempunyai kebarangkalian yang sama untuk dijana. Dengan pelaksanaan yang mesra pengguna dan serba boleh merentas senario yang berbeza, constrained_sum_sample_pos dan constrained_sum_sample_nonneg telah menjadi penting kepada tugas penjanaan nombor rawak dalam Python.
Atas ialah kandungan terperinci Bagaimana untuk Menjana Nombor Rawak Menjumlahkan kepada Nilai Pratakrif dengan Kebarangkalian Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!