Aller au contenu
katmars

Distribution statistique fonction PHP Array_Rand()

Noter ce sujet :

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

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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)

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×