IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Random


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 18
    Par défaut Random
    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,

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    tu peux donner un intervalle pour générer ton random avec la fonction rand ; confère doc sur php.net

  3. #3
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    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

  4. #4
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    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.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 18
    Par défaut [resolu]
    Un grand merci pour cette réponse rapide.


    Bien à vous

  6. #6
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par KiLVaiDeN
    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
    Petite exercice annexe: Quelle est la probabilité de boucler indéfiniment ?

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    sadique.

  8. #8
    Fabouney
    Invité(e)
    Par défaut
    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

  9. #9
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    Citation Envoyé par Mr N.
    Petite exercice annexe: Quelle est la probabilité de boucler indéfiniment ?
    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 !

    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 travail peut-être as-tu une réponse rapide à la question, histoire de finir la journée moins idiot ?

  10. #10
    Membre chevronné Avatar de papyphp
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 438
    Par défaut
    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%

  11. #11
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    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.

  12. #12
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    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 contestation Sous 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 !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction Random en Assembleur
    Par chidi dans le forum Assembleur
    Réponses: 5
    Dernier message: 21/05/2004, 10h16
  2. Script assez difficile avec random
    Par LFC dans le forum Requêtes
    Réponses: 6
    Dernier message: 01/08/2003, 18h02
  3. [langage] random sur liste ou tableau
    Par martijan dans le forum Langage
    Réponses: 2
    Dernier message: 15/07/2003, 14h47
  4. [VB6] : pour faire un Randomize sous vb... merci
    Par delnic dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/01/2003, 15h49
  5. Random en Assembleur
    Par funx dans le forum Assembleur
    Réponses: 9
    Dernier message: 02/09/2002, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo