Foros del Web » Programación para mayores de 30 ;) » Programación General »

Algoritmo aleatorio con prioridades?

Estas en el tema de Algoritmo aleatorio con prioridades? en el foro de Programación General en Foros del Web. Hola, me interesa un algoritmo para poder escoger aleatoriamente pero con algunos registros con mas prioridades que les toque... nose si me expreso bien... ejemplo: ...
  #1 (permalink)  
Antiguo 09/05/2013, 16:33
 
Fecha de Ingreso: mayo-2013
Mensajes: 1
Antigüedad: 11 años
Puntos: 0
Algoritmo aleatorio con prioridades?

Hola, me interesa un algoritmo para poder escoger aleatoriamente pero con algunos registros con mas prioridades que les toque... nose si me expreso bien... ejemplo:

ramon 7
toni 6
luis 1
jose 2

y que aleatoriamente escoja uno de los cuatro (puede tocar ramon, toni, luis o jose) pero que ramon y toni tengan mas probabilidad que les toque.

Un metodo que he pensado es hacer un array con todos los registros pero duplicar 7 veces ramon y 6 veces toni y escoger un dato del array aleatoriamente:

ramon
ramon
ramon
ramon
ramon
ramon
ramon
toni
toni
toni
toni
toni
toni
luis
jose

el nombre de ramon y toni tienen mas posibilades de que salga que luis y jose. Este metodo va bien para cosas como estas, pero si tienes muchos datos creo que crear arrays tan grandes no es muy eficiente, hay algun metodo mas "limpio" que este???

gracias!!!
  #2 (permalink)  
Antiguo 10/05/2013, 22:11
Avatar de ggomez91  
Fecha de Ingreso: octubre-2008
Mensajes: 181
Antigüedad: 15 años, 7 meses
Puntos: 13
Respuesta: Algoritmo aleatorio con prioridades?

Hola, la forma más fácil que se me ocurre es que uses el método de la ruleta. Necesitarías un arreglo 2d u otro arreglo del mismo tamaño para guardar las prioridades, algo así:

elementoA -- 3
elementoB -- 1
elementoC -- 2

Eso sería como "el elemento A tiene 3 veces más probabilidad de ser seleccionado que el C".

Ya que tienes eso debes obtener la probabilidad de cada uno y guardarlo en otro arreglo y otra dimensión. Esto se hace obteniendo la suma de todas las prioridades y dividir cada una entre ese total. Al final todas esas prioridades normalizadas deben sumar 1.

Luego generas un número aleatorio entre 0 y 1 y solo debes iterar sobre tu arreglo ya normalizado, el primer elemento mayor al número aleatorio generado lo tomas.

Sé que parece algo rebuscado pero dale una búsqueda al "metodo de la ruleta", no es tan difícil.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:42.