Générer un nombre aléatoire pondéré : au-delà de l'échantillonnage par rejet
Dans le domaine des probabilités, la génération de nombres aléatoires pondérés constitue un outil essentiel pour simulations et modélisation statistique. Bien que l'échantillonnage par rejet constitue souvent une solution simple, il présente des limites en termes de performances et de consommation de mémoire.
Une alternative élégante émerge sous la forme d'une distribution de probabilité cumulative. Cette approche élimine le besoin d'une table de recherche préconstruite, ce qui entraîne d'importantes économies de mémoire et des performances en temps constant dans la sélection des valeurs. Voici comment cela fonctionne en JavaScript :
function weightedRand(spec) { var sum = 0; for (var i in spec) { sum += spec[i]; } var r = Math.random() * sum; for (i in spec) { r -= spec[i]; if (r <= 0) return i; } }
Les générateurs de nombres aléatoires pondérés trouvent souvent des applications dans des scénarios tels que :
Dans des cas spécifiques, où les poids sont uniformément répartis, une approche encore plus simple s'avère efficace : choisissez simplement un index aléatoire dans un tableau représentant les valeurs possibles. Cependant, cette méthode ne permet pas de répartitions inégales des poids.
N'oubliez pas que le choix de la mise en œuvre dépend de facteurs tels que le nombre d'options, la répartition des poids et les caractéristiques de performance souhaitées.
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!