Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

147
Vistas
Elegir un elemento aleatorio de una matriz con pesos

Actualmente estoy tratando de crear un selector de índice ponderado aleatorio.

Mi objetivo es elegir aleatoriamente un elemento de una matriz. Sin embargo, no es tan simple como hacer esto. Ciertos elementos tienen una boosted probabilidad de ganar. Esto puede ser visto como una especie de lottery

La estructura de datos es la siguiente:

 const users = [ {userId: 1, multiplier: 0}, {userId: 2, multiplier: 25} {userId: 3, multiplier: 0} {userId: 4, multiplier: 25} {userId: 5, multiplier: 15} {userId: 6, multiplier: 30} {userId: 7, multiplier: 35} {userId: 8, multiplier: 2} {userId: 8, multiplier: 7} ]

Cada elemento de la matriz cuenta como una entrada. Sin embargo, los multiplicadores permiten que el usuario tenga mayores posibilidades de ganar.

Una solución que se me ocurrió fue ver los multipliers como una number of tickets , de modo que si un usuario tuviera un multiplicador de 25, tendría 25 boletos.

Sin embargo, esto es muy ineficiente porque cuando hay decenas de miles de entradas con muchos multiplicadores, el tamaño de la matriz crece a un ritmo increíble.

No estoy seguro de cómo puedo hacer esto más eficiente.

Mi solución se puede ver aquí:

 const users = [ {userId: 1, multiplier: 0}, {userId: 2, multiplier: 25} {userId: 3, multiplier: 0} {userId: 4, multiplier: 25} {userId: 5, multiplier: 15} {userId: 6, multiplier: 30} {userId: 7, multiplier: 35} {userId: 8, multiplier: 2} {userId: 8, multiplier: 7} ] const potentialWinners = [] users.map((user) => { for(let i=0; i < user.multiplier; i++) { potentialWinners.push(user.userId) } })

Otras soluciones que he visto parecían bastante complicadas y no soy bueno en matemáticas, por lo que me costó entender lo que estaba sucediendo.

También parecen funcionar en función de los porcentajes, y el mío no. No estoy del todo seguro de cómo puedo modificar el sistema multiplicador para tener en cuenta una probabilidad multiplicada de ganar.

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda