Sélection de nombres aléatoires pondérés en programmation
Lors de la génération de nombres aléatoires, il peut être avantageux d'attribuer différents poids aux résultats possibles pour créer un distribution. Dans cet article, nous explorons comment implémenter la sélection de nombres aléatoires pondérés dans la programmation, en nous concentrant sur son intégration avec les fonctions de génération de nombres aléatoires de Boost.
Boost et caractère aléatoire pondéré
Boost ne fournit pas explicitement de fonction directe pour la génération de nombres aléatoires pondérés. Au lieu de cela, nous pouvons exploiter l'algorithme classique de sélection aléatoire pondérée :
Cet algorithme peut être facilement adapté aux capacités de génération de nombres aléatoires de Boost :
// Function to generate weighted random numbers template <typename T, typename WeightType> T weighted_random(std::vector<T>& values, std::vector<WeightType>& weights) { WeightType total_weight = std::accumulate(weights.begin(), weights.end(), 0.0); WeightType random_weight = boost::random::uniform_real_distribution<>(0.0, total_weight)(boost::random::mt19937()); T selected_value; WeightType current_weight = 0.0; for (size_t i = 0; i < values.size(); ++i) { current_weight += weights[i]; if (random_weight < current_weight) { selected_value = values[i]; break; } } return selected_value; }
Sélection de nombres aléatoires pondérés avec d'autres cadres
L'algorithme fourni peut également être appliqué à d'autres cadres de génération de nombres aléatoires. La clé est de créer une cartographie entre les poids et les résultats, puis d'échantillonner à plusieurs reprises la distribution jusqu'à ce que le résultat souhaité soit obtenu.
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!