Foros del Web » Programando para Internet » Javascript »

Bajar probavilidad de aparicion

Estas en el tema de Bajar probavilidad de aparicion en el foro de Javascript en Foros del Web. Buenas, tengo este codigo JS para mostrar imagenes random, pero deseo bajarle la probavilidad de que aparescan ciertas imagenes. Me podrian dar una ayuda con ...
  #1 (permalink)  
Antiguo 04/11/2009, 13:09
Avatar de virkings  
Fecha de Ingreso: octubre-2009
Mensajes: 14
Antigüedad: 14 años, 6 meses
Puntos: 0
Bajar probavilidad de aparicion

Buenas, tengo este codigo JS para mostrar imagenes random, pero deseo bajarle la probavilidad de que aparescan ciertas imagenes.

Me podrian dar una ayuda con eso :D.

Código:
<script type="text/javascript">
function ver_imagen()
{
n=0;
this[n++]="#";
this[n++]="#";
this[n++]="#"
this.N=n;
}
var imagen=new ver_imagen();
src= imagen[ Math.floor(Math.random() * imagen.N) ] ;
document.write("<img src="+src+">");
</script>
Gracias.
  #2 (permalink)  
Antiguo 04/11/2009, 13:54
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 15 años, 4 meses
Puntos: 46
Respuesta: Bajar probavilidad de aparicion

Hola.

cuando usas las funciones para generar numeros aleatorios o pseudoaleatorios, generalmente estos algoritmos trabajan en un intervalo abierto en ambos limites:

ejemplo: si defines un intervalo de 0 a 10 es muy poco probable o incluso nulo que el 0 y el 10 aparescan, por lo que entre mas a los extermos este el numero es menos probable que aparesca.

suerte.
  #3 (permalink)  
Antiguo 05/11/2009, 19:51
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Bajar probavilidad de aparicion

Hola,

Cita:
Iniciado por lair Ver Mensaje
... si defines un intervalo de 0 a 10 es muy poco probable o incluso nulo que el 0 y el 10 aparescan, ...
Ha de ser el peor algoritmo 'random' que haya escuchado. La probabilidad que salga un número de 0 a 10, deber ser aproximadamente uniforme en el rango.

Por ejemplo:

Código Javascript:
Ver original
  1. function mostrarProbabilidadRandom() {
  2.     var a = new Array(0, 0, 0, 0, 0, 0);
  3.     for (var i = 0; i < 2000000; i++) {
  4.         a[Math.floor(Math.random() * 6)]++;
  5.     }
  6.     for (var i = 0; i < a.length; i++) {
  7.         document.write("Aciertos para " + i + " : " + a[i] + "<br>");
  8.     }
  9. }
  10. mostrarProbabilidadRandom();

La salida debería ser aproximadamente así:

Código:
Aciertos para 0 : 334101
Aciertos para 1 : 333162
Aciertos para 2 : 333366
Aciertos para 3 : 333140
Aciertos para 4 : 333491
Aciertos para 5 : 332740
Una posible implementación para extraer un valor por peso, donde cada indice tiene un valor diferente que le da mayor prioridad,

Código Javascript:
Ver original
  1. var totalWeight = 0;
  2. var weights = new Array(10, 20, 30, 90, 10, 60);
  3. for (var i = 0; i < weights.length; totalWeight += weights[i++]);
  4.  
  5. function normalize(n) {
  6.     for (var i = 0, s = 0; i < weights.length; i++) {
  7.         s += weights[i]; if (s >= n) return i;
  8.     }
  9. }
  10. function verImagen() {
  11.     var i = Math.floor(Math.random() * totalWeight);
  12.     return normalize(i);
  13. }

Para probar la prioridad:

Código Javascript:
Ver original
  1. function mostrarProbabilidadPeso() {
  2.     var a = new Array(0, 0, 0, 0, 0, 0);
  3.     for (var i = 0; i < 2000000; i++) {
  4.         a[verImagen()]++;
  5.     }
  6.     for (var i = 0; i < a.length; i++) {
  7.         document.write("Aciertos para " + i + " con peso : " + weights[i] + " : " + (a[i] / 10000) + "<br>");
  8.     }
  9. }
  10. mostrarProbabilidadPeso();

Y debería mostrar algo parecido a esto:

Código:
Aciertos para 0 con peso : 10 : 9.968
Aciertos para 1 con peso : 20 : 18.1748
Aciertos para 2 con peso : 30 : 27.3048
Aciertos para 3 con peso : 90 : 81.8599
Aciertos para 4 con peso : 10 : 9.0759
Aciertos para 5 con peso : 60 : 53.6166
Es decir, la probabilidad que saliera un número se generó en base al total de la suma de los pesos de cada índice, y después se normalizó al índice respectivo. (También se puede realizar logarítmicamente pero en ese caso va a ser exponencial y los primeros valores van a tener menos peso que los últimos).

Saludos,
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 10:20.