J'ai un ensemble trié (std :: set pour être précis) qui contient des éléments avec un poids assigné. Je veux choisir au hasard N éléments de cet ensemble, alors que les éléments de poids plus élevé devraient avoir une plus grande probabilité d'être choisis. Tout élément peut être choisi plusieurs fois.Choisir N nombres aléatoires d'un ensemble
Je veux faire ceci aussi efficacement que possible - Je veux éviter toute copie de l'ensemble (il pourrait devenir très grand) et courir au moment O (N) si c'est possible. J'utilise C++ et je voudrais m'en tenir à une solution STL + Boost uniquement.
Est-ce que quelqu'un sait s'il existe une fonction dans STL/Boost qui effectue cette tâche? Si non, comment en mettre un en œuvre?
Merci, cela semble fonctionner dans mon cas et semble bien. –
Pour obtenir des performances optimales, pensez à placer les valeurs aléatoires dans une collection ordonnée et à l'itérer une fois au lieu de l'itérer pour chaque valeur de l'ensemble source. Vous n'avez pas besoin de supprimer des valeurs de la collection aléatoire, mais simplement d'augmenter l'itérateur. –