Jump to content

Distribution statistique fonction PHP Array_Rand()


Recommended Posts

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

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

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


1 => 10211
7 => 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>
<?php
foreach($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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...