Bagaimana Menjana Nombor Rawak dengan Jumlah Tetap, Pengagihan Seragam Dijamin?

Susan Sarandon
Lepaskan: 2024-10-27 10:50:30
asal
763 orang telah melayarinya

How to Generate Random Numbers with a Fixed Sum, Guaranteed Uniform Distribution?

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

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

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!

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