[R] Un Simple tirage au sort unique

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
loockys
Niveau 4
Niveau 4
Messages : 54
Enregistré le : lun. 15 août 2011 14:12
Status : Hors ligne

[R] Un Simple tirage au sort unique

#1

Message par loockys »

Salut tout le monde.

J'aimerais comprendre le fonctionnement du script qui nous permettrait de faire un simple tirage au sort sans que le même tirage sorte deux fois.
Je vous mets un début de code et comme vous le voyez il y a un problème.
D'avance merci
► Afficher le texte
Modifié en dernier par loockys le mar. 21 févr. 2012 01:56, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Un Simple tirage au sort

#2

Message par Tlem »

Il existe sur le forum, une fonction qui permet de faire un tirage au sort unique. Il me semble qu'à la base c'était pour des cartes.
Utilisez la recherche du forum pour retrouver cette fonction.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Un Simple tirage au sort

#3

Message par mikell »

Bah je viens de l'écrire, alors...

Code : Tout sélectionner

#Include <Array.au3>
Global $Nbr_Lotorie[10] = [1,2,3,4,5,6,7,8,9,10]

For $i = 1 to 3 Step 1
   $Nbr_Al = Random(0,UBound($Nbr_Lotorie)-1,1)
   ConsoleWrite($Nbr_Lotorie[$Nbr_Al] & @CRLF)
   _ArrayDelete($Nbr_Lotorie, $Nbr_Al)
Next
Mais je me souviens de la fonction en question, effectivement c'était sympa
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
loockys
Niveau 4
Niveau 4
Messages : 54
Enregistré le : lun. 15 août 2011 14:12
Status : Hors ligne

Re: [..] Un Simple tirage au sort

#4

Message par loockys »

Tlem a écrit :Il existe sur le forum, une fonction qui permet de faire un tirage au sort unique. Il me semble qu'à la base c'était pour des cartes.
Utilisez la recherche du forum pour retrouver cette fonction.
Je vous rassure que j'ai fait des recherches, mais je n'avais pas trouvé un script simple et moins long qui m'expliquerait en détail le tirage au sort unique.
Merci Mikell pour le script en espèrent que ce poste sera utile et je me permets de rectifier le titre par : un Simple tirage au sort unique
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Un Simple tirage au sort unique

#5

Message par Tlem »

Une simple recherche de 3 minutes avec le mot "tirage" me donne en résultat :

http://www.autoitscript.fr/forum/viewto ... f=3&t=4953
http://www.autoitscript.fr/forum/viewto ... f=6&t=4957
http://www.autoitscript.fr/forum/viewto ... f=3&t=5373 ***
http://www.autoitscript.fr/forum/viewto ... 607#p49607 ***

Dans chacun de ces liens vous avez un code fonctionnel et adaptable à votre demande. Les plus simples étant ceux avec les étoiles.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Un Simple tirage au sort unique

#6

Message par jchd »

On appelle l'opération un "tirage sans remise".

Petite remarque au passage concernant le temps d'exécution dans certains cas (qui n'est absolument pas de l'auto-promotion du quatrième lien fourni par Tlem).

L'idée mise en oeuvre dans le code du lien 3 est correcte mais demande un temps de calcul potentiellement énorme dans le cas où le nombre de jetons disponibles est important et où le nombre de jetons désirés est proche du maximum.
Ainsi, si on veut tirer sans remise 4995 jetons d'un ensemble de 5000, on se retrouve vite avec un tableau $melange qui contient presque tous les nombres que Random() va sortir, d'où une répétition croissante du nombre de boucles qui produisent des Random() qu'on a déjà. On peut pallier à la chose en inversant le problème et en choisissant les 5 jetons à ne pas sortir, ce qui est correct, mais le problème est maintenant que le reste des jetons devrait être annoncé de façon aléatoire si on ne veut pas d'une énumération en séquence croissante.

L'algorithme (4) ci-dessus est linéaire dans tous les cas. Je n'ai pas eu le temps de regarder les 2 premiers.

Une autre possibilité efficace est d'itérer dans les jetons en séquence et de tirer pour chacun une probabilité de sortie. On a ainsi en plus la certitude de finir le tirage dès que le nombre de jetons voulus est sorti, souvent avant l'itération complète.

Exemple :
► Afficher le texte
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre