我尝试编写一些代码来创建引导程序分发,虽然它可以编译,但我不确定它是否正常工作。一些背景知识:我教书的学校的一名学生系统地找到了我们计算机实验室笔记本电脑锁的密码,以与我们的计算机老师(幸运的是,不是我)搞砸。每个锁都有三个编号为 0-9 的条目。我计算出每个锁有 10^3 种可能的组合。他保留了他已经为每个锁尝试过的组合的详细列表,因此每次连续尝试都对一个组合进行采样而无需替换。我试图通过找到解锁一台计算机所需次数的预期值来模拟这一点,以了解他为解锁所有这些计算机(实验室中有 12 台计算机)做了多少次尝试。对我来说,这听起来像是一个超几何分布。我写的代码是:
import numpy as np
def lock_hg(N):
final_counts = []
for i in range(N):
count = 1
combs = list(np.arange(1,1001,1))
guess = np.random.randint(1,1000)
for k in range(1000):
a = np.random.choice(combs, 1)
if a == guess:
final_counts.append(count)
break
else:
count = count + 1
combs.remove(a)
return(final_counts)
调用 lock_hg(1000) 时的直方图 plt.hist(final_counts) 看起来相当均匀,40 或 50 次尝试与 900 或 950 一样常见。我认为它看起来更像以 500 为中心的正态分布。我不是确定代码是否有问题,或者我只是误解了数学。此代码是否适合该问题?如果没有,我该如何解决?如果它有效,是否有更有效的方法来做到这一点,如果是,它是什么?