katmars 0 Posted June 25, 2012 Share Posted June 25, 2012 Bonjour, Nous utilisons la fonction php ARRAY_RAND() pour sélectionner aléatoirement "n" items dans un tableau de "m" colones. Je suis cependant surpris de voir que la distribution est très loin d'être homogène : l'article le plus sélectionné l'a été 7'690 fois lorsque le moins sélectionné l'a été 2'547, soit un ratio de 3 pour 1. L'un de vous aurait une explication ou a déjà observé un phénomène similaire ? Merci, Sylvain Link to post Share on other sites
SStephane 16 Posted June 25, 2012 Share Posted June 25, 2012 Bonjour, J'ai effectivement remarqué un phénomène pseudo-aléatoire, mais pas dans tes proportions (tu n'aurais pas une vieille version de PHP car ça me paraît énorme là tout de même ). J'utilise shuffle() et récupère les premiers éléments du tableau, cela semble préférable au niveau de l'aléa du tirage. Link to post Share on other sites
katmars 0 Posted June 25, 2012 Author Share Posted June 25, 2012 Ta remarque est tout à fait juste et après avoir creusé, je me suis aperçu que contrairement à ce que je pensais initialement, nous utilisons également la fonction SHUFFLE puis sélectionnons les "n" premiers items du tableau. Par contre la distribution statistique est bien aussi bizarre que mentionné (ratio de 3 pour 1 entre le premier et le dernier). Sylvain Link to post Share on other sites
SStephane 16 Posted June 26, 2012 Share Posted June 26, 2012 1 => 102117 => 9926 6 => 9957 8 => 9974 4 => 9994 3 => 10019 10 => 9940 5 => 9983 2 => 9990 9 => 10006 Comme résultat de <?php $n=100000;$a=array(1,2,3,4,5,6,7,8,9,10);$b=array();for($i=0;$i<$n;$i++) { $c = $a; shuffle($c); if(!isset($b[$c[0]])) $b[$c[0]] = 0; $b[$c[0]]++;}?><pre><?phpforeach($b as $k=>$v){ print "$k => $v"; print "\n";}?></pre> Je ne pense donc pas que la fonction shuffle tire par pseudo-hasard, contrairement à array_rand, êtes vous bien certain de votre code ? (L'actualisation de la page joue en faveur du réel aléa de shuffle, par ailleurs) Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now