Aller au contenu

Distribution statistique fonction PHP Array_Rand()


katmars

Sujets conseillés

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

Lien vers le commentaire
Partager sur d’autres 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.

Lien vers le commentaire
Partager sur d’autres 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

Lien vers le commentaire
Partager sur d’autres 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)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...