下面的代码在argv指定的范围内生成两个随机整数,测试整数是否匹配并重新开始。最后,它会打印一些有关该过程的统计数据。
我注意到,增加argv的值会以指数方式降低测试可能性的百分比。
这对我来说似乎有点直观,所以我的问题是,这是代码中的错误还是数字是真实的,如果是,那么我不会考虑什么?
#!/usr/bin/python3
import sys
import random
x = int(sys.argv[1])
a = random.randint(0,x)
b = random.randint(0,x)
steps = 1
combos = x**2
while a != b:
a = random.randint(0,x)
b = random.randint(0,x)
steps += 1
percent = (steps / combos) * 100
print()
print()
print('[{} ! {}]'.format(a,b), end=' ')
print('equality!'.upper())
print('steps'.upper(), steps)
print('possble combinations = {}'.format(combos))
print('explored {}% possibilitys'.format(percent))
由于
EDIT 例如:
./runscrypt.py 100000
将会回归我:
[65697 ! 65697] EQUALITY!
STEPS 115867
possble combinations = 10000000000
explored 0.00115867% possibilitys
“探索了0.00115867%可能性”< - 这个数字太低了?
答案 0 :(得分:1)
这个实验真的是geometric distribution。
即
设Y是看到匹配之前迭代次数的随机变量。然后Y在几何上分布有参数1 / x(生成两个匹配整数的概率)。
期望值,E [Y] = 1 / p,其中p是上述概率(证明可以在上面的链接中找到)。所以在你的情况下,预期的迭代次数是1 /(1 / x)= x。
组合的数量是x ^ 2.
因此,探索可能性的预期百分比实际上是x /(x ^ 2)= 1 / x。
当x接近无穷大时,此数字接近0。
在x = 100000的情况下,探索可能性的预期百分比= 1/100000 = 0.001%,这与您的数值结果非常接近。