Nombor Rawak Berwajaran dalam Boost
Pustaka Boost menyediakan fungsi penjanaan nombor rawak yang meluas. Walaupun ia menawarkan penjanaan nombor rawak mudah, ia tidak mempunyai sokongan terbina dalam untuk nombor rawak berwajaran. Artikel ini meneroka teknik untuk melaksanakan pemilihan nombor rawak berwajaran menggunakan fungsi Boost mentah.
Algoritma Rawak Berwajaran
Untuk menjana nombor rawak berwajaran, kita boleh menggunakan algoritma berikut:
Penyesuaian untuk Boost
Algoritma ini boleh disesuaikan dengan Boost seperti berikut:
using namespace boost; int weightedRandom(const std::vector<int>& weights) { // Calculate the sum of weights int sum = accumulate(weights.begin(), weights.end(), 0); // Generate a random number between 0 and the sum variate_generator<mt19937, uniform_int_distribution<int>> rand(generator()); int rnd = rand(sum); // Traverse weights and subtract until random number becomes negative for (size_t i = 0; i < weights.size(); ++i) { if (rnd - weights[i] < 0) { return i; } rnd -= weights[i]; } // Should never reach here assert(false); }
Pengoptimuman untuk Tidak Berubah Pemberat
Jika pemberat jarang ditukar dan senarainya agak panjang, kami boleh mengoptimumkan dengan prapengiraan jumlah berat terkumpul dan menggunakan carian binari.
Pensampelan Takungan untuk Saiz Senarai Tidak Diketahui
Untuk senarai dengan saiz yang tidak diketahui, pensampelan takungan boleh digunakan dengan penyesuaian berwajaran.
Kesimpulan
Walaupun Boost tidak mempunyai fungsi nombor rawak berwajaran khusus, teknik yang dibentangkan membolehkan penjanaan yang cekap dan tepat menggunakan fungsi Boost mentah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Nombor Rawak Berwajaran Menggunakan Pustaka Boost?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!