Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Penjana Nombor Rawak Boost Boleh Digunakan untuk Pemilihan Nombor Rawak Berwajaran?

Bagaimanakah Penjana Nombor Rawak Boost Boleh Digunakan untuk Pemilihan Nombor Rawak Berwajaran?

Linda Hamilton
Lepaskan: 2024-12-15 20:43:13
asal
492 orang telah melayarinya

How Can Boost's Random Number Generator Be Used for Weighted Random Number Selection?

Penjanaan Nombor Rawak Berwajaran

Memilih nombor rawak dengan kebarangkalian tertentu ialah tugas biasa dalam pengaturcaraan. Penjana nombor rawak Boost menyediakan cara mudah untuk memilih item dengan kebarangkalian berwajaran.

Pertimbangkan senario di mana anda ingin memilih nombor rawak antara 1 dan 3 dengan pemberat berikut:

  • 1: 90%
  • 2: 56%
  • 3: 4%

Algoritma

Boost tidak mempunyai fungsi terbina dalam untuk penjanaan nombor rawak berwajaran. Walau bagaimanapun, terdapat algoritma mudah yang boleh digunakan:

  1. Kira Jumlah Berat: Jumlahkan berat semua item.
  2. Janakan Nombor Rawak: Pilih nombor rawak antara 0 dan jumlah berat.
  3. Lelaran Melalui Weights: Semak setiap berat item, tolak daripada nombor rawak sehingga nombor menjadi kurang daripada berat item semasa.
  4. Item Pulangan: Item yang sepadan dengan kedudukan di mana nombor rawak menjadi negatif ialah item yang dipilih.

Kod Contoh

Dalam Boost, menggunakan random_device dan penjana nombor rawak mt19937:

std::mt19937 rng(std::random_device{}());
int total_weight = 90 + 56 + 4;
for (int i = 0; i < total_weight; i++) {
    int random_number = rng() % total_weight;
    int current_weight = 90;
    if (random_number < current_weight) {
        return 1;
    }
    current_weight += 56;
    if (random_number < current_weight) {
        return 2;
    }
    return 3; // Reached the end of the weights
}
Salin selepas log masuk

Pengoptimuman

Jika berat jarang berubah dan rawak picks adalah kerap, pengoptimuman boleh digunakan dengan menyimpan jumlah berat terkumpul dalam setiap item. Ini membolehkan pendekatan carian binari yang lebih cekap.

Selain itu, jika bilangan item tidak diketahui tetapi pemberatnya diketahui, pensampelan takungan boleh disesuaikan untuk penjanaan nombor rawak berwajaran.

Atas ialah kandungan terperinci Bagaimanakah Penjana Nombor Rawak Boost Boleh Digunakan untuk Pemilihan Nombor Rawak Berwajaran?. 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