Menjana nombor rawak untuk dijumlahkan kepada nilai yang telah ditetapkan menimbulkan cabaran yang menarik dalam pengaturcaraan komputer. Walaupun pendekatan mudah mungkin kelihatan mencukupi, ia sering memperkenalkan bias, di mana nombor tertentu mempunyai kemungkinan yang lebih tinggi untuk dipilih. Artikel ini menyelidiki penyelesaian yang diperhalusi yang memastikan pengagihan kebarangkalian yang sama untuk semua gabungan yang mungkin.
Penyelesaian yang disediakan bergantung pada fungsi_sum_sample_pos terhalang untuk mencapai pengedaran seragam hasil yang mungkin. Fungsi ini menjana senarai integer positif(n) yang dijumlahkan kepada nilai sasaran(jumlah). Ciri utamanya ialah setiap gabungan mempunyai peluang yang sama untuk dipilih.
Kekuatan fungsi ini terletak pada asas matematiknya, yang menjamin bahawa semua kemungkinan gabungan berkemungkinan sama. Selain itu, ia mudah disesuaikan dengan senario lain, seperti menjana tujuh nombor yang menjumlahkan sehingga 100 atau mana-mana jumlah lain yang dikehendaki.
Pelaksanaan Python bagi fungsi disediakan di bawah:
<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>
Perwakilan grafik @FM memberikan pemahaman yang jelas tentang fungsi fungsi:
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
Penyelesaian yang canggih ini, berdasarkan pensampelan jumlah terhad, menyediakan kaedah yang mantap dan tidak berat sebelah untuk menjana nombor rawak yang menjumlahkan kepada nilai yang telah ditetapkan. Ia memastikan kebarangkalian yang sama untuk semua hasil yang mungkin, menjadikannya alat yang boleh dipercayai untuk pelbagai senario pengaturcaraan.
Atas ialah kandungan terperinci Bagaimana untuk Menjana Nombor Rawak dengan Jumlah Pratakrif dan Memastikan Taburan Kebarangkalian Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!