Algorithme qui apporte aléatoirement les plus grands nombres d'un tableau

Aug 19 2020

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

2 NinaScholz Aug 19 2020 at 15:29

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; }