我有一个模拟彩票的练习(从45个抽出的4个球)。我随机生成了一个包含四个数字的列表,然后迭代地将其与进一步随机生成的4个数据集进行比较。这似乎有效,尽管获得匹配的尝试次数通常在10到100的数千个数字中。然而匹配4/45的几率应该接近5000中的1。当我将我的列表作为集合进行比较时,顺序不应该是重要的,所以我很难理解为什么赔率与#34相比如此之低;理论&#34 ;.我已经运行了几十次并且始终具有相同的输出。我是Python的新手,所以我猜这里有一个基本错误,但任何见解都会有所帮助。
import random
def comparator(x,y):
counter = 1
while set(x) != set(y):
y = random.sample(range(1,46),4)
if set(x) == set(y):
print x,y
return counter
else:
counter +=1
#call the function 5 times
for i in range(1,6):
selection = random.sample(range(1,46),4)
draw = []
output = comparator(selection,draw)
print "Iteration %d = %d attempts" %(i,output)
答案 0 :(得分:1)
这是一个数学问题。实现正确的可能性实际上是:
math.factorial(46)/math.factorial(4)/math.factorial(46-4)
是1到:
163185.0
请参阅https://en.wikipedia.org/wiki/Lottery_mathematics
你实际上是在第一次成功时停止了,所以你的测量结果有些偏颇。
答案 1 :(得分:0)
检查你的数学。我计算出概率的方法,它在45 * 44 * 43 * 42/4中达到1! = 148,995。分子是因为你在没有替换的情况下进行采样,因此,在挑选第一个数字之后,匹配后续数字的几率变为1 /(n-1),依此类推。我除以4!因为顺序没关系,有4个!如何在没有替换的情况下从45个中挑选4个数字。