Bagaimana untuk Menjana Nombor Rawak Menjumlahkan kepada Nilai Pratakrif dengan Kebarangkalian Sama?

Susan Sarandon
Lepaskan: 2024-10-27 05:14:02
asal
196 orang telah melayarinya

How to Generate Random Numbers Summing to a Predefined Value with Equal Probability?

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

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

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!

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!