L'ensemble de résultats identifiables distincts dans rouleaux indépendants d'une matrice avec faces a éléments. Lorsque le dé est juste, cela signifie que chaque résultat d'un lancer a une probabilité et l'indépendance signifie que chacun de ces résultats aura donc une probabilité c'est-à-dire qu'ils ont une distribution uniformeΩ ( d , n ) Ω(d,n)n nd = 6 d=6d ndn 1 / d 1/d( 1 / d ) n : (1/d)n:P d , n .Pd,n.
Supposons que vous ayez mis au point une procédure qui détermine soit résultats d'un dé côté , c'est-à-dire un élément de soit signale un échec (ce qui signifie que vous devrez répéter pour obtenir un résultat). C'est,t tm mc ( = 150 ) c(=150)Ω ( c , m )Ω(c,m)
t : Ω ( d , n ) → Ω ( c , m ) ∪ { Échec } .t:Ω(d,n)→Ω(c,m)∪{Failure}.
Soit la probabilité que entraîne un échec et notons que est un multiple entier de disonsF Ft tF Fd - n ,d−n,
F = Pr ( t ( ω ) = échec ) = N Fd - n .F=Pr(t(ω)=Failure)=NFd−n.
(Pour référence future, notez que le nombre attendu de fois que doit être appelé avant de ne pas échouer est )t t1 / ( 1 - F ) .1/(1−F).
L'exigence selon laquelle ces résultats dans soient uniformes et indépendant conditionnel à ne pas signaler des moyens de défaillance qui préserve la probabilité dans le sens que pour chaque événementΩ ( c , m ) Ω(c,m)t t A ⊂ Ω ( c , m ) ,ttA⊂Ω(c,m),
P d , n ( t ∗ A )1 - F =Pc,m(A)Pd,n(t∗A)1−F=Pc,m(A)(1)
où
t ∗ ( A ) = { ω ∈ Ω ∣ t ( ω ) ∈ A }t∗(A)={ω∈Ω∣t(ω)∈A}
est l'ensemble des jets de dés que la procédure assigne à l'événementt tA .A.
Considérons un événement atomique , qui doit avoir la probabilitéSoit (les jets de dés associés à ) ont éléments. devientA = { η } ⊂ Ω ( c , m ) A={η}⊂Ω(c,m)c - m . c−m.t ∗ ( A )t∗(A) η ηN ηNη ( 1 )(1)
Nηd−n1−NFd−n=Pd,n(t∗A)1−F=Pc,m(A)=c−m.Nηd−n1−NFd−n=Pd,n(t∗A)1−F=Pc,m(A)=c−m.(2)
Il est immédiat que les sont tous égaux à un entierNηNηN.N. Il ne reste plus qu'à trouver les procédures les plus efficaces Le nombre attendu de non-échecs par lancer du dé face est det.t.cc
1m(1−F).1m(1−F).
Il y a deux implications immédiates et évidentes. La première est que si nous pouvons maintenir petit à mesure que devient grand, alors l'effet de signaler une défaillance est asymptotiquement nul. L'autre est que pour tout donné (le nombre de rouleaux de la matrice face à simuler), nous voulons rendre aussi petit que possible.F Fm mm mccFF
Examinons de plus près en effaçant les dénominateurs:( 2 )(2)
N c m = d n - N F > 0.Ncm=dn−NF>0.
Cela rend évident que dans un contexte donné (déterminé par ), est rendu aussi petit que possible en faisant égal le plus grand multiple de qui est inférieur ou égal à Nous pouvons écrire ceci en termes de la plus grande fonction entière (ou "étage") commec , d , n , m c,d,n,mF Fd n - N F dn−NFc m cmd n . dn.⌊ ∗ ⌋⌊∗⌋
N = ⌊ d nc m ⌋.N=⌊dncm⌋.
Enfin, il est clair que doit être aussi petit que possible pour une efficacité maximale, car il mesure la redondance en . Plus précisément, le nombre prévu de rouleaux de la à flancs matrice nécessaire pour produire un rouleau de à flancs DieN Nt d ctdc
N × nm ×11 - F .N×nm×11−F.
Ainsi, notre recherche de procédures à haute efficacité devrait se concentrer sur les cas où est égal ou juste à peine supérieur à une puissanced n dnc m .cm.
L'analyse se termine en montrant que pour et donnés il existe une séquence de multiples pour laquelle cette approche se rapproche de l'efficacité parfaite. Cela revient à trouver pour lequel approche dans la limite (garantissant automatiquement ). Une telle séquence est obtenue en prenant et en déterminantd dc , c,( n , m ) (n,m)( n , m ) (n,m)d n / c m ≥ 1 dn/cm≥1N = 1 N=1F → 0 F→0n = 1 , 2 , 3 , …n=1,2,3,…
m = ⌊ n log dlog c ⌋.m=⌊nlogdlogc⌋.(3)
La preuve est simple.
Tout cela signifie que lorsque nous sommes prêts à rouler l'original à flancs mourir un assez grand nombre de fois nous pouvons nous attendre pour simuler presque les résultats d'un à flancs meurent par rouleau . De manière équivalente,d dn , n,log d / log c = log c d logd/logc=logcdcc
Il est possible de simuler un grand nombre de rouleaux indépendants d'un à flancs mourir en utilisant un juste à flancs mourir en utilisant une moyenne de lance par résultat où peut être rendu arbitrairement petit en choisissant suffisamment grand.m mc cd dlog ( c ) / log ( d ) + ϵ = log d ( c ) + ϵ Journal( c ) / log( d) + ϵ = logré( c ) + ϵϵ ϵmm
Exemples et algorithmes
Dans la question, et oùd = 6 ré= 6c = 150 ,c = 150 ,
log d ( c ) = log ( c )log ( d ) ≈2.796489.logd(c)=log(c)log(d)≈2.796489.
Ainsi, la meilleure procédure possible nécessitera, en moyenne, au moins rouleaux de a pour simuler chaque résultat.2.7964892.796489d6
d150
L'analyse montre comment procéder. Nous n'avons pas besoin de recourir à la théorie des nombres pour la réaliser: nous pouvons simplement tabuler les puissances et les puissances et les comparer pour trouver où sont proches. Ce calcul de force brute donne pairesd n = 6 n dn=6nc m = 150 m cm=150mc m ≤ d ncm≤dn ( n , m )(n,m)
( n , m ) ∈ { ( 3 , 1 ) , ( 14 , 5 ) , … }(n,m)∈{(3,1),(14,5),…}
par exemple, correspondant aux nombres
( 6 n , 150 m ) ∈ { ( 216 , 150 ) , ( 78364164096 , 75937500000 ) , … } .(6n,150m)∈{(216,150),(78364164096,75937500000),…}.
Dans le premier cas, associerait des résultats de trois rouleaux de a à Échec et les autres résultats seraient chacun associés à un seul résultat de a . t t216 - 150 = 66 216−150=66150d6
150d150
Dans le second cas associerait des résultats des 14 rouleaux d'une à l' échec - environ 3,1% de tous - et par ailleurs serait sortie une séquence de 5 résultats d'un .t t78364164096 - 7593750000078364164096−75937500000d6
d150
Un algorithme simple à mettre en oeuvrett étiquettes des faces de la à flancs mourir avec les numéros et les faces de la à flancs mourir par les numéros Les rouleaux de la première matrice sont interprétées comme un nombre à chiffres dans la base Ceci est converti en un nombre dans la base S'il a au plus chiffres, la séquence des derniers chiffres est la sortie. Sinon, renvoie Failure en s'invoquant récursivement. d d0 , 1 , … , d - 1 0,1,…,d−1c c0 , 1 , … , c - 1. 0,1,…,c−1.n nn nd . d.c . c.m mm mtt
Pour des séquences beaucoup plus longues, vous pouvez trouver des paires appropriées en considérant tous les autres convergents de l'expansion continue des fractions de La théorie des fractions continues montre que ces convergents alternent entre être inférieurs à et supérieurs à lui (en supposant que n'est pas déjà rationnel). Choisissez ceux qui sont inférieurs à( n , m ) (n,m)n / m n/mx = log ( c ) / log ( d ) . x=log(c)/log(d).x xx xx .x.
Dans la question, les premiers de ces convergents sont
3 , quatorze / 5 , 165 / 59 , 797 / 285 , 4301 / 1 538 , 89 043 / 31 841 , 279235 / 99852 , 29036139 / 10.383.070 ... .3,14/5,165/59,797/285,4301/1538,89043/31841,279235/99852,29036139/10383070….
Dans le dernier cas, une séquence de 29.036.139 rouleaux d'un d6
produira une séquence de 10.383.070 rouleaux d'un d150
avec un taux d'échec inférieur à pour une efficacité de indiscernable de la limite asymptotique.2 × 10 - 8 , 2×10−8,2,796492.79649
Pour le cas de , un roulement de d6 trois fois crée distinctement résultats.N = 150N=150 6 3 = 21663=216
Le résultat souhaité peut être tabulé de cette manière:
La probabilité de conserver un résultat est . Tous les jets sont indépendants, et nous répétons la procédure jusqu'à un "succès" (un résultat en ) donc le nombre de tentatives pour générer 1 tirage entre 1 et 150 est distribué comme une variable aléatoire géométrique, qui a l'attente . Par conséquent, l'utilisation de cette méthode pour générer 1 tirage nécessite de lancer lancers de dés en moyenne (car chaque tentative lance 3 dés).p=150216=2536p=150216=2536 1,2,…,1501,2,…,150 p−1=3625p−1=3625 3625×3=4.323625×3=4.32
Nous remercions @whuber de l'avoir suggéré dans le chat.
la source
Voici une alternative encore plus simple à la réponse de Sycorax pour le cas où . Puisque vous pouvez effectuer la procédure suivante:N=150N=150 150=5×5×6150=5×5×6
Cette méthode peut être généralisée à un plus grand , mais elle devient un peu plus gênante lorsque la valeur a un ou plusieurs facteurs premiers supérieurs à .NN 66
la source
À titre d'illustration d'un algorithme pour choisir uniformément entre valeurs à l'aide de dés à six faces, essayez ceci qui utilise chaque lancer pour multiplier les valeurs disponibles par et rendre chacune des nouvelles valeurs également probable:1506
Si vous êtes sur l'une des valeurs restantes après rouleaux, vous êtes dans une situation similaire à la position après rouleau. Vous pouvez donc continuer de la même manière: la probabilité que vous vous arrêtiez après lancers est , après lancers est etc.6617027993681501679616
Ajoutez-les et vous constaterez que le nombre attendu de rouleaux nécessaires est d'environ . Il fournit une sélection uniforme parmi les , car vous ne sélectionnez qu'une valeur à un moment où vous pouvez sélectionner chacun des avec une probabilité égale3.39614150150
Sycorax a demandé dans les commentaires un algorithme plus explicite
L'algorithme est des jets de dés successifs:
Lancez les trois premiers dés pour générer un nombre entre et . Puisque vous prenez la valeur générée (qui est aussi son reste sur division par ) si la valeur générée est strictement inférieure à et arrêtez;0006555610006÷4106=16 remainder 1506410610006−1506=4106
Si vous continuez, lancez le quatrième dé pour avoir maintenant généré un nombre entre et . Puisque vous prenez le reste de la valeur générée sur division par si la valeur générée est strictement inférieure à et arrêtez;4100655556100006÷4106=126 remainder 24064106100006−2406=53206
Si vous continuez, lancez le cinquième dé pour avoir maintenant généré un nombre entre et . Puisque vous prenez le reste de la valeur générée sur division par si la valeur générée est strictement inférieure à et arrêtez;5320065555561000006÷4106=1236 remainder 330641061000006−3306=552306
Si vous continuez, lancez le sixième dé pour avoir maintenant généré un nombre entre et . Depuis vous prenez le reste de la valeur générée sur division par si la valeur générée est strictement inférieure à et arrêtez;5523006555555610000006÷4106=12356 remainder 106410610000006−106=5555506
etc.
la source