Bagaimana untuk Menjana Nombor Rawak dengan Jumlah Pratakrif dan Memastikan Taburan Kebarangkalian Sama?

Barbara Streisand
Lepaskan: 2024-10-31 16:22:47
asal
121 orang telah melayarinya

How to Generate Random Numbers with a Predefined Sum and Ensure an Equal Probability Distribution?

Menjana Nombor Rawak dengan Jumlah Pratakrif

Pengenalan: Taburan Kebarangkalian Sama

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.

Fungsi Sampel Jumlah Terkawal

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.

Pengedaran dan Penyesuaian Seragam

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

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>
Salin selepas log masuk

Ilustrasi Grafik

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
Salin selepas log masuk

Kesimpulan

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!