Est-ce rejet l'échantillonnage de la seule façon d'obtenir une distribution vraiment uniforme de nombres aléatoires?

cs.stackexchange https://cs.stackexchange.com/questions/2605

Question

Supposons que nous avons un générateur aléatoire que les sorties nombres compris entre $ [0..R-1] $ avec une distribution uniforme et nous nécessité de générer des nombres aléatoires dans la plage $ [0..n-1] $ avec une distribution uniforme.

Supposons que $ N une véritable distribution uniforme nous pouvons utiliser la rejet échantillonnage méthode :

  • if $ k $ est le plus grand nombre entier tel que k $ N
  • choisir un nombre aléatoire $ r $ en $ [0..R-1] $
  • si $ r
Le rejet est l'échantillonnage de la seule façon d'obtenir une distribution discrète vraiment uniforme?

Si la réponse est oui, pourquoi?

Note: si $ N> R $ l'idée est la même: générer un nombre aléatoire $ r $ en $ [0..R ^ m-1], R ^ m> = N $, par exemple $ r '= R (... R (R + r_1 R_2) ...) + R_m $ où $ r_i $ est un nombre aléatoire dans la plage $ [0..R-1] $

Était-ce utile?

La solution

Oui et non, en fonction de ce que vous entendez par « la seule façon ». Oui, qu'il n'y a pas de méthode qui est garanti de mettre fin, le meilleur que vous pouvez faire (pour des valeurs génériques de $ N $ et $ R $) est un algorithme qui se termine avec une probabilité 1. Non, ce que vous pouvez faire le « déchets » aussi petit que vous aimez.

Pourquoi la résiliation garantie est impossible en général

Supposons que vous ayez un moteur de calcul déterministe (une machine de Turing ou quoi que flotte votre bateau), plus un oracle qui génère des éléments aléatoires de la R $ $ -Element ensemble $ [0..R-1] $. Votre objectif est de générer un élément de l'ensemble $ N $ -Element $ [0, N-1] $. La sortie de votre moteur ne dépend que de la séquence des valeurs renvoyées par l'oracle; elle est une fonction $ f $ de cette séquence potentiellement infinie $ (r_0, r_1, R_2, \ ldots) $.

Supposons que votre moteur appelle l'oracle au plus $ m fois de $. Il pourrait y avoir des traces dont l'oracle est appelé à moins de $ m temps de $; le cas échéant, d'appeler l'oracle fois supplémentaires afin qu'il soit toujours appelé ne change pas la sortie exactement $ m temps de $. Donc, sans perte de généralité, nous supposons que l'oracle est appelé exactement $ m temps de $. Ensuite, la probabilité que le $ final x $ est le nombre de séquences $ (R_0, \ ldots, r_ {m-1}) $ tel que $ f (r_0, \ ldots, r_ {m-1}) = x $. Etant donné que l'oracle est un générateur aléatoire uniforme, chaque séquence est équiprobable et a la probabilité $ 1 / R ^ m $. D'où la probabilité de chaque résultat est de la forme $ A / R ^ m $ où $ A $ est un nombre entier entre 0 $ $ $ et R ^ m $.

Si $ N $ divise $ R ^ m $ pour une m $ $, alors vous pouvez générer une distribution uniforme sur les éléments $ N $ en appelant le générateur aléatoire des temps de $ $ m (ce qui est laissé en exercice au lecteur ). Dans le cas contraire, cela est impossible: il n'y a aucun moyen d'obtenir un résultat avec une probabilité de 1 $ / N $. Notez que la condition revient à dire que tous les facteurs premiers de $ N $ sont également des facteurs de $ R $ (ce qui est plus permissif que ce que vous avez écrit dans votre question, par exemple, vous pouvez choisir un élément aléatoire parmi 4 avec die juste à 6 faces, même si 4 ne divise pas 6).

Réduire les déchets

Dans votre stratégie, quand $ r \ ge k \, N $, vous n'avez pas à redessiner immédiatement. Intuitivement, il y a un peu d'entropie gauche dans $ [k \, N .. R-1] $ que vous pouvez garder dans le mélange.

Supposons un instant que vous en fait continuer à générer des nombres aléatoires ci-dessous $ N $ pour toujours, et vous générez $ u $ d'entre eux à un moment en faisant $ d $ tire. Si vous faites un rejet direct d'échantillonnage sur cette génération groupée, les déchets de plus de $ d $ attire est $ \ dfrac {R ^ d - k \, N ^ u} {d} $, soit le reste $ R ^ d \ mathbin { \ mathrm {mod}} N ^ u $ divisé par le nombre de tirages. Cela peut être aussi peu que $ \ GCD (R, N) $. Lorsque $ R $ et $ N $ sont coprime, vous pouvez faire les déchets arbitrairement petit en choisissant des valeurs suffisamment grandes de $ d $. Pour les valeurs générales de $ R $ et $ N $, le calcul est plus compliqué parce que vous devez prendre en compte la génération de $ \ GCD (R, N) $ et $ N / \ GCD (R, N) $ séparément, mais encore une fois, vous pouvez faire les déchets arbitrairement petit avec des groupes assez grandes.

Dans la pratique, même avec des nombres aléatoires relativement inefficaces (par exemple en cryptographie), il est rarement la peine de faire quoi que ce soit, mais simple échantillonnage de rejet, à moins que $ N $ est faible. Par exemple, dans la cryptographie, où $ R $ est typiquement une puissance de 2 et $ N $ est typiquement des centaines ou des milliers de bits, génération de nombre aléatoire uniforme procède habituellement par échantillonnage de rejet linéaire dans la plage souhaitée.

Autres conseils

source de Shannon codage théorème montre que, dans un certain sens exact, vous avez besoin $ \ log N / \ log R échantillons $ (en moyenne) du type $ [0, \ ldots, R-1] $ pour générer un aléatoire numéro du type $ [0, \ ldots, N-1] $. Plus précisément, Shannon donne un (inefficace) algorithme donné $ m $ échantillons du premier type, les sorties $ m (\ log N / \ log R - \ epsilon) des échantillons de $ du deuxième type, avec une forte probabilité. Il a également montre que la sortie $ m (\ log N / \ log R + \ epsilon) $ échantillons avec une forte probabilité est impossible.

théorème de Shannon travaille également dans le cas plus général d'une distribution d'entrée asymétrique (et probablement aussi la distribution de sortie asymétrique). Dans ce cas, vous devez remplacer le logarithme de l'entropie. Bien que l'algorithme donné par le théorème est défini au hasard, dans certains cas, il est possible de derandomize il (au détriment de la performance un peu moins bonne).

En fait, non, l'échantillonnage de rejet est loin d'être la seule façon de procéder. Malheureusement, étant donné que les ordinateurs stockent toutes les informations sous forme de bits, et ne peuvent donc manipuler des bits aléatoires d'information, tout algorithme pour dessiner une variable aléatoire uniforme de gamme $ N $ sera infini, si le développement de base binaire de $ N $ est infini.

Ce théorème est un résultat classique par Knuth et Yao (1976), qui a développé le cadre de DDG-arbres (générateurs de distribution discrète).

Les méthodes exposées par Gilles sont le genre typique de chose qui a été fait pour réduire les déchets encourus par le rejet, mais bien sûr, si l'on peut générer suivant Knuth et les arbres de Yao, il est beaucoup, beaucoup plus efficace - en moyenne 96% de bits aléatoires sont enregistrés.

J'ai donné plus d'informations à ce sujet dans les éléments suivants CStheory après .

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top