[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-general-es
Subject:    Re: [PHP-ES] Probabilidad con Pesos
From:       "Fernando Zapata Miranda" <fazmf99 () gmail ! com>
Date:       2008-03-25 16:05:50
Message-ID: 38d7e6090803250905wa59c125w98fd766a55a11b0 () mail ! gmail ! com
[Download RAW message or body]


Bueno te comento lo siguiente, en el rand paso 2 rangos el min y el max
ahora la probabilidad de que salga un numero bajo o uno mas alto deberia ser
igual pero tengo entendido que rand esta basada en la libreria libc las
cuales son tildadas de dudosas esto lo puedes ver el manual de php, si
tienes dudas puedes reemplazarla por mt_rand el cual usa el mersenne twister
que te genera numero aleatorios mas rapido y mejor distribuidos, con el
codigo que envie aumento la probabilidad de que salga uno de mayor peso
frente a otro de menor peso, ahora si aun asi no estas seguro pues yo
ordenaria los de mayor peso adelante del array y los de menor peso al final
cosa que si salen numeros menores seria mayor la probabilidad de que salgan
los de mayor peso.

On 3/25/08, Isra Navas <isral16@gmail.com> wrote:
>
> Si lo he entendido bien mirando el código en base a tu función es más
> probable que se presenten los valores con un peso más bajo no? Es
> decir los números más bajos (1,2,3 y no 20 por ejemplo)
>
> 2008/3/25, Fernando Zapata Miranda <fazmf99@gmail.com>:
> > Hola aca hay una alternativa, y te comento al respecto de ella y de como
> > mejorarla
> >
> > - La idea es NO generar tantos IF ni CASE y para ello usamos rangos
> > asignados deacuerdo al peso.
> > - aca tienes q asiganerle un peso a todo , si tienes un valor que no
> tenias
> > planeado ponerle peso ponle 1 que es la minima prioridad para su
> aparición.
> > - Si tienes muchos datos en lugar del array crea tu tablita en una BD y
> le
> > pones los pesos
> > - en lugar del array_sum haces un select sum bla bla bla ..
> > - Espero sirva y sino pues suerte, comento que vi una solución parecida
> en
> > java hace algun tiempo pero creaban arrays para cada valor deacuerdo al
> peso
> > lo cual no es necesario a mi opinion sino solo EMULAR esos array con
> rangos.
> >
> > <?php
> > //partimos de un array con pesos Indice (valor)   => Peso
> > $_array = array('A'=>5,'B'=>20,'C'=>20,'D'=>55, 'E'=>1);
> > // A tiene 1,2,3,4,5 como posibilidades B tiene desde 6,7,8,9.....25, C
> > tiene desde 26,27... 45 .... y asi =)
> > // si alguno no quieres que tenga peso significativo dale el minimo que
> > seria 1
> > $_maximo = array_sum($_array);
> > $_minimo = 1;
> > $_rand = rand ($_minimo,$_maximo);
> > $_suma = 0;
> > foreach($_array as $valor => $peso){
> >  if($_rand >= $_suma && $_rand <= ($peso+$_suma) ){
> >   //esta dentro del rango para el valor asi que hasta aca nomas
> ejecutamos
> >   echo "<pre>";
> >   print_r($_array);
> >   echo "</pre>";
> >   echo "El rand fue: ".$_rand.", El valor encontrado es : ".$valor." , y
> > tenia un peso de ".$peso;
> >   exit();
> >  }else{
> >   //si no esta dentro del primero pasamos al siguiente
> >   $_suma = $_suma + $peso;
> >  }
> > }
> > ?>
> >
> > --
> > Ing Fernando Antonio Zapata Miranda.
> > Lima - Perú
> > 2573064 - 92565439
>



-- 
Ing Fernando Antonio Zapata Miranda.
Lima - Perú
2573064 - 92565439


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic