Algorithme qui apporte aléatoirement les plus grands nombres d'un tableau
J'ai fait des recherches et j'ai trouvé l'algorithme pour les petites listes en général. J'ai des tableaux tels que:
arr = [1,2,3,4 .... , 96,97,98,99,100];
arr2 = [105, 110, 165, 170];
arr3 = [1,2,7,8,9];
Je veux envoyer ces tableaux à une fonction et obtenir des nombres aléatoires à partir de ce tableau, mais je veux avoir une probabilité plus élevée d'obtenir des nombres plus grands à chaque fois.
Par exemple, dans le tableau 1, la probabilité de 96 doit être supérieure à 4, mais la probabilité de 97 doit être supérieure à 96.
Comment générer une distribution pondérée aléatoire des éléments
Habituellement, les solutions sont comme dans ce sujet. Cependant, cela peut entraîner des problèmes de performances avec mes baies.
Comment puis-je y parvenir?
Réponses
Vous pouvez calculer les probabilités et choisir la valeur.
Pour l'utiliser avec un tableau personnalisé, prenez random
getRandomValue = random(sortedArray),
et plus tard dans une boucle
let value = getRandomValue();
const
random = sortedValues => {
let length = sortedValues.length,
sum = length * (length + 1) / 2;
return () => {
let r = Math.random();
return sortedValues.find((_, i) => (r -= (i + 1) / sum) <= 0);
};
},
getRandomValue = random([6, 7, 8, 9, 10]),
counts = {};
for (let i = 0; i < 1e6; i++) {
let value = getRandomValue();
counts[value] = (counts[value] || 0) + 1;
}
console.log(counts);
.as-console-wrapper { max-height: 100% !important; top: 0; }