Bonjour,
Quel est la meilleur fonction pour un random ?
Ensuite, est-il possible d'exclure des chiffres dans un random. Par exemple fait un random entre 0 et 1000 et ensuite exclure les chiffres quand ceux-ci sont tiré ?
cordialement,
Bonjour,
Quel est la meilleur fonction pour un random ?
Ensuite, est-il possible d'exclure des chiffres dans un random. Par exemple fait un random entre 0 et 1000 et ensuite exclure les chiffres quand ceux-ci sont tiré ?
cordialement,
tu peux donner un intervalle pour générer ton random avec la fonction rand ; confère doc sur php.net![]()
Salut
1) la fonction rand() répond à tes besoins.
2) Pour exclure des nombres, il faut d'abord générer une valeur aléatoire, puis vérifier qu'elle n'appartient pas à la liste de nombre à éviter. Si elle appartient à cette liste, regénérer un nombre aléatoire![]()
http://php.net/mt_rand
sinon pour ton histoire d'exclure des nombre déjà tirés, je te propose de passer par un tableau qui contient les nombres de 0 à 1000, un coup de shuffle et le tableau est désordonné. puis tu prend les éléments un par un.
Un grand merci pour cette réponse rapide.
Bien à vous
Petite exercice annexe: Quelle est la probabilité de boucler indéfiniment ?Envoyé par KiLVaiDeN
![]()
Il te faut utiliser la fonction rand(int min, int max)
par contre pr savoir si tu as déjà tirer le nombre, tu doit le faire tout seul, en créant une variable tempon, qui va te permettre de tester
Je dirais que "dans la pratique" elle est nulle, sauf si la liste des nombres interdits comprend toutes les valeurs possibles que peut prendre la valeur aléatoire !Envoyé par Mr N.
Après, dans la théorie, je suppose qu'il y a un calcul de probabilités qui permet de déduire une valeur, en fonction du nombre max de valeurs possibles et du nombre de valeur différentes contenues dans la liste, mais je n'irais pas jusqu'à chercher celà pendant mes heures de travailpeut-être as-tu une réponse rapide à la question, histoire de finir la journée moins idiot ?
![]()
Je ne suis pas au travail.
Il me semble me souvenir que
soit m le nombre de nombres possibles
n le nombre de nombres interdits
la probabilité de tirer un nombre interdit est de n/m
la probabilité de tirer s fois de suite un nombre interdit est de n exposant s / m exposant s
ex soient 25 nombres dont 4 sont interdits
la probabilité de tirer un nombre interdit est de 4/25=16%
la probabilité de réussir 3 tirages successifs de nombres interdits est de 0.41% 10 tirages successifs = 0.000043%
Je te fais confiance, mes cours de probas sont un peu loin...
Donc pour des nombres entre 1 et 1000 ca fait mal !
Imaginons qu'on ait tiré 998 nombres, il nous en reste deux
998/1000 = 99.8%
La probabilité de réussir 2 tirages successifs de nombres interdits est de 99.6%
La probabilité de réussir 4 tirages successifs de nombres interdits est de 99.2%
...
Ca descend très doucement !
Conclusion : utiliser une liste de nombres interdits n'est pas du tout une bonne solution.
Dans l'hypothèse où le programme doive tirer des nombres entre 0 et 1000 sans tirer ceux qui ont déjà été obtenus dans un tirage précédent, et dans l'hypothèse où il doive parcourir complètement les 1000 nombres pour au final les avoir tous traités, la technique du tableau shufflé est en effet la meilleure sans contestationSous réserve que l'algorithme interne qui shuffle le tableau soit performant !
J'avais pas compris les choses comme ça initialement; selon l'enoncé, j'ai imaginé une sorte de loto, où très peu de valeurs seraient tirées. Dans ce cas, je pense que "ma technique" est largement plus valable que le tableau shufflé
D'ailleurs, ça amène à une interrogation que nous pourrions nous poser : comment est shufflé un tableau d'entiers en interne ?L'algorithme ne doit pas être beaucoup plus trivial que la recherche dans une liste d'éléments interdits ( recherche qui peut être dichotomique par exemple, si le besoin s'en ressent, et donc très rapide ) !
Pour optimiser ma proposition ( afin de satisfaire Mr.N) disons qu'on peut par exemple tirer un chiffre au hasard, vérifier si il appartient à la liste de nombres interdits, et si il y appartient, prendre le nombre + 1 et refaire la vérification. C'est une très bonne optimisation, car au pire, on fera la vérification n fois !
Partager