Génération de nombres aléatoires pondérés
Le choix de nombres aléatoires avec des probabilités spécifiques est une tâche courante en programmation. Le générateur de nombres aléatoires de Boost offre un moyen pratique de sélectionner des éléments avec des probabilités pondérées.
Considérez le scénario dans lequel vous souhaitez choisir un nombre aléatoire entre 1 et 3 avec les poids suivants :
Algorithme
Boost n'a pas de fonctionnalité intégrée pour la génération de nombres aléatoires pondérés. Cependant, il existe un algorithme simple qui peut être appliqué :
Code Exemple
Dans Boost, en utilisant le générateur de nombres aléatoires random_device et 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 }
Optimisations
Si les poids changent rarement et sont aléatoires les sélections sont fréquentes, une optimisation peut être appliquée en stockant la somme des poids cumulés dans chaque article. Cela permet une approche de recherche binaire plus efficace.
De plus, si le nombre d'éléments est inconnu mais que les poids sont connus, l'échantillonnage en réservoir peut être adapté pour la génération de nombres aléatoires pondérés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!