Asignar peso a elementos de un array
Hola!
Tengo un problemilla:
Estoy haciendo un JavaScript en el que hay un array que guarda direcciones url de imágenes. Al cargar la página escribo en tiempo de ejecución la etiqueta <img y coloco en el atributo src una de las rutas del array aleatoriamente, escogiendo mediante random una de las posiciones del array. Hasta aquí todo normal y sencillo.
El problema surge cuando quiero que algunos de los elementos del array (rutas de imágenes) tengan mayor probabilidad de aparición que otros, que deje de ser aleatorio el modo de selección de la imagen que aparecerá.
La única manera que he encontrado es introducir varias veces el mismo elemento en el array. Así, un elemento que esté dos veces en el array, en distintas posiciones, tendrá en doble de probabilidades de aparecer que otro que aparezca solo una. Este método funciona pero tengo que hacerlo con pasandole como parámetro el peso de cada imagen.
¿Alguien sabe cómo?
saludos!
joseflorido
Weno pues ya lo he conseguido :D
Al final, usando el algoritmo que enlazó sergi he logrado hacerlo en Javascript.
He subido la versión terminada y una de comprobacion en la que todos los elementos tienen el mismo peso.
He comentado el código todo lo que he podido y creo que entre la explicación del algoritmo que he utilizado y los comentarios se entiende bien como está hecho. :)
En el de comprobación he montado un pequeño experimento, repitiendo la función mil veces y haciendo recuento del resultado para poder ver si los porcentajes se corresponden con los pesos.
Jugad con él y cambiadle los pesos y veréis como varian en proporción.
El script en conjunto lo que hace es mostrar una imagen enlazada. Con cuatro arrays de la misma longitud define las rutas de las img, los alt, la dirección del enlace y los pesos. Variando estos arrays (eso si, a mano) podemos introducir muchos más elementos y modificar los pesos, siempre manteniendo todos los arrays de la misma longitud.
Muchisimas gracias a todos!!!! :D
turuto
al margen de la tecnologia que se use, lo que planteas es mas un problema de algoritmos, no?
yo no soy programador, pero hago mis pinitos en as, y el problema lo enfoco desde que tienes una lista, y quieres darle una ponderacion, con lo que son dos datos a introducir por cada elemento.
de momento no se me ocurre la solucion pero seguro que hay procesos ya establecidos que hagan eso.
cuando averigue uno lo posteo, y ya se que esto no es solucion pero es un primer pasito a la solucion del problema, no? :)
zigotica
si me apuras mete la imagen en un tag de imagen pero en lugar de ser imagen.jpg que llame a un .php que devuelva la imagen segun el random. tu cliente/jefe no tiene porque estar en desacuerdo si le explicas que el js para eso es una chapuza y le das una solucion valida. digo...
jesusgollonet
si no lo consigues pegame un toque por mail y te lo intento, amiguete.
joseflorido
ya... es de locos usar javascript para esto :(
pero el cliente manda (ya sabes, diseño centrado en el jefe... ;))
Parece que el enlace que me pasas promete, voy a implementar lo que explica en javascript a ver si lo consigo, gracias!
zigotica
hola tio,
1. no uses js, usa serverside
2. mira esto