07-07-2011, 11:22 AM
Bonjour,
j'aurais aimé avoir un avis exterieur sur la meilleur methode algorithmique à suivre pour faire ça:
J'ai un tirage aléatoire à faire avec x cas possible, sachant que le tirage n'est pas équiprobable, j'ai donc pour chaque x, une pondération exprimé en pourcentage qui exprime les chances de tirage de x.
Comme implémenter la chose?
J'avais pensé a deux choses:
la première et de faire un mt_rand(1, 100);
et de découper les pourcentages en tranche.
Exemple :
CAS_POSSIBLE = array(a, b ,c, d);
PONDERATION = array(40, 20, 30, 10);
je peux dire:
si le tirage < 40 j'obtiens a
si tirrage >= 40 && < 60 j'obtiens b
si tirrage >= 60 && < 90 j'obtiens c
et tirrage >= 90 j'obtiens d
mais ça implique donc un petit calcule pour que les if soit générique et pas en dur.
--------------------------------------------------------------------------------
La seconde methode pourait etre de faire des boucle pour remplir un tableau avec les CAS_POSSIBLE, qui apparaitrait PONDERATION fois chacun et de faire un array_rand sur le tout.
C'est plus rapidement expliquer que la première mais je pense que c'est plus couteux comme méthode non?
--------------------------------------------------------------------------------
EDIT: j'ai trouvé sur le net une autre methode très interessante:
$tirage = mt_rand(1,100);
$somme = 0;
$i=0;
while($somme <= $tirage)
{
$somme += $PONDERATION[$i];
if($somme <= $tirage) $i++;
}
et le resultat serait $CAS_POSSIBLE[$i];
Si vous avez d'autres idées je vous écoute, et dans tout les cas, quel methode vosu semble la meilleur dans celles évoquées?
Merci.
j'aurais aimé avoir un avis exterieur sur la meilleur methode algorithmique à suivre pour faire ça:
J'ai un tirage aléatoire à faire avec x cas possible, sachant que le tirage n'est pas équiprobable, j'ai donc pour chaque x, une pondération exprimé en pourcentage qui exprime les chances de tirage de x.
Comme implémenter la chose?
J'avais pensé a deux choses:
la première et de faire un mt_rand(1, 100);
et de découper les pourcentages en tranche.
Exemple :
CAS_POSSIBLE = array(a, b ,c, d);
PONDERATION = array(40, 20, 30, 10);
je peux dire:
si le tirage < 40 j'obtiens a
si tirrage >= 40 && < 60 j'obtiens b
si tirrage >= 60 && < 90 j'obtiens c
et tirrage >= 90 j'obtiens d
mais ça implique donc un petit calcule pour que les if soit générique et pas en dur.
--------------------------------------------------------------------------------
La seconde methode pourait etre de faire des boucle pour remplir un tableau avec les CAS_POSSIBLE, qui apparaitrait PONDERATION fois chacun et de faire un array_rand sur le tout.
C'est plus rapidement expliquer que la première mais je pense que c'est plus couteux comme méthode non?
--------------------------------------------------------------------------------
EDIT: j'ai trouvé sur le net une autre methode très interessante:
$tirage = mt_rand(1,100);
$somme = 0;
$i=0;
while($somme <= $tirage)
{
$somme += $PONDERATION[$i];
if($somme <= $tirage) $i++;
}
et le resultat serait $CAS_POSSIBLE[$i];
Si vous avez d'autres idées je vous écoute, et dans tout les cas, quel methode vosu semble la meilleur dans celles évoquées?
Merci.