Distribution uniforme avec aléatoire
Je sais que si j'utilise le générateur Aléatoire de Java, de générer des nombres avec nextInt, les numéros seront distribuées de manière uniforme. Mais qu'advient-il si j'utilise 2 instances de l'Aléatoire, de générer des nombres à la fois Aléatoire des classes. Les numéros seront distribués de manière uniforme ou pas?
source d'informationauteur DaJackal | 2010-11-23
Vous devez vous connecter pour publier un commentaire.
Le nombre généré par chaque
Random
instance sera distribuée de manière uniforme, donc, si vous combinez les séquences de nombres aléatoires générés par les deuxRandom
cas, ils doivent être uniformément réparties.Noter que même si la distribution est uniforme, vous pouvez payer l'attention sur les graines pour éviter de corrélation entre la sortie des deux générateurs. Si vous utilisez la valeur par défaut no-arg constructeur, les graines devraient déjà être différentes. À partir du code source de
java.util.Random
:Si vous êtes à la définition de la graine explicitement (à l'aide de la
Random(long seed)
constructeur, ou en appelant lesetSeed(long seed)
), vous aurez besoin de prendre soin de vous-même. Une approche possible consiste à utiliser un générateur de nombre aléatoire pour produire les graines pour tous les autres générateurs.Bien, si vous avez de la graine à la fois
Random
cas, avec la même valeur, vous serez certainement pas obtenir de la qualité uniforme discrète de la distribution. Considérons les plus élémentaires de cas, qui a littéralement imprime exactement le même nombre deux fois (ne pas obtenir beaucoup moins aléatoire que ça ...):Mais c'est juste une seule itération. Ce qui se passe si nous commençons à manivelle jusqu'à la taille de l'échantillon?
Voici un diagramme de dispersion d'une distribution à partir de l'exécution de deux de même graines Rng side-by-side pour générer 2000 nombre total:
Et ici est une distribution de l'exécution d'un seul générateur de nombres aléatoires pour générer 2000 nombre total:
Il semble assez clair qui approche produit de qualité supérieure discret une distribution uniforme sur cet ensemble fini.
Maintenant presque tout le monde sait que l'ensemencement de deux Rng avec la même graine est une mauvaise idée si vous êtes à la recherche de haute qualité aléatoire. Mais ce cas ne vous arrêter et de penser: nous ont créé un scénario où chaque RNG est indépendamment émettant une assez bonne qualité de l'aléatoire, mais quand leur sortie est combiné est notamment de qualité inférieure (moins discrètes.)