Le hasard est à peine aléatoire à tous?

Je l'ai fait pour tester le caractère aléatoire de la randint:

>>> from random import randint
>>>
>>> uniques = []
>>> for i in range(4500):  # You can see I was optimistic.
...     x = randint(500, 5000)
...     if x in uniques:
...         raise Exception('We duped %d at iteration number %d' % (x, i))
...     uniques.append(x)
...
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
Exception: We duped 887 at iteration number 7

J'ai essayé 10 fois plus et le meilleur résultat que j'ai obtenu était de 121 itérations avant d'un répéteur. Est-ce le meilleur genre de résultat que vous pouvez obtenir à partir de la bibliothèque standard?

  • si vous voulez quelque chose de vraiment unique, pourquoi ne pas essayer uuid module? docs.python.org/library/uuid.html
  • Parce que ce n'est pas vraiment unique. Juste très probablement.
  • "The pragmatic programmer", la règle 26. "sélectionnez" N'est pas Rompu. Il est rare de trouver un bug dans le système d'exploitation ou le compilateur, ou même un produit tiers ou à la bibliothèque. Le bug est le plus probable dans l'application. Ou dans ce cas, l'application de la théorie des probabilités.
  • dupe: stackoverflow.com/questions/2124748/...
  • Juste en coupant les cheveux en quatre: uniques = set() et uniques.ajouter(x) serait plus approprié (efficace).
  • Hankin ...quoi?
  • Merci. J'adore ce genre de trucs. Je suis assez nouveau à la programmation que je ne suis absolument pas pris en compte coupant les cheveux en quatre.
  • Dyno Fu Très agréable! J'ai essayé de 50 000 et il n'a jamais répété.
  • L'une des principales propriétés de l'anniversaire paradoxe, c'est que c'est contre-intuitif. À moins que vous en soyez conscient ou des connaissances en théorie des probabilités, alors vous ne serait pas nécessairement de raison de faire une recherche par mot-clé pour cela. L'un de l'USP de Q&Un des sites est que vous pouvez poser une question en des termes que n'aurait jamais fait correspondre les réponses à la question si vous avez un pur mot clé de recherche, sans savoir quoi chercher.
  • Je n'ai pas étudié la probabilité, mais je dirais que le hasard.randint(500, 5000) a beaucoup plus de chances de répétition que de tirer une carte deux fois de suite à partir d'un 4500 cartes après le brassage. Il vous faudra 346 fois en moyenne de tirer 2 cartes 13 fois de suite (le mélange à chaque fois) pour obtenir un seul répéteur. Il m'a fallu 8 essaie de l'obtenir pour arriver deux fois. Je n'ai pas à étudier la probabilité de voir l'évidence ici. (pas de manque de respect prévu. Je sais que la théorie des probabilités est très complexe, je ne peux pas aider mais la question de cette bibliothèque et algorithmes).
  • votre réponse à ConcernedOfTunbridge): de quoi vous parlez est un tout autre problème. L'une est la probabilité d'obtenir la même carte deux fois dans une rangée; l'autre est la probabilité d'obtenir TOUT de la précédente N-1 cartes après la N des sélections. Le nombre moyen de cartes à partir d'un parfait RNG pour le deuxième problème devrait être d'environ 67; considérant que vous avez eu n'importe où à partir de 8 à 121, que les sons sur la droite.
  • vous confondez Aléatoire Uniformément Distribué. Il est parfaitement valable pour un générateur aléatoire de revenir exactement la même valeur de plus de et la plus de nombreuses fois. Si vous voulez une Répartie Uniformément générateur de nombre Aléatoire qui est un tout autre problème, c'est un brassage problème qui n'est pas un générateur de problème.
  • J'ai toujours considéré moi-même très en mathématiques intelligente et pragmatique sur l'analyse mathématique de problèmes connexes, mais la probabilité que je ne m'explique pas.
  • sucette. Qui fait sens. Je n'ai pas vraiment regarder de cette façon.
  • Ce qui rend ce une bonne question, c'est que vous être assez rare de trouver une réponse en cherchant sur le web, sauf si vous saviez précisément de la recherche pour "paradoxe d'anniversaire'.

InformationsquelleAutor orokusaki | 2010-01-27