假设我有一些数字n==4
。假设我有一些m
从[0, 10]
范围内均匀随机地画出来。让p
是定义为(n+m)
的长(比如1024个条目)总和列表:
from __future__ import division
import random
myRand = random.SystemRandom()
n = 4
p = []
guess = []
guess_sum = 0
for i in range(1024):
m = myRand.randint(0, 10)
p.append(n + m)
guess.append(p[i] - 5)
guess_sum += guess[i]
如果猜测者知道绘制m
的范围,那么他们可以减去这个范围的平均值,因为平均值是均匀随机分布的中心。在我们的示例中,这对应于行:
guess.append(p[i] - 5)
我们可以通过取guess[]
中的数字的平均值来验证此方法产生了对隐藏数n
的良好估计:
print("average of entries in guess[] is: ")
print(guess_sum/1024)
例如,我得到如下结果:3.9365234375, 3.9619140625, 4.177734375, 3.763671875, 4.0439453125
。根据预期,随着样本数量增加超过1024
,我们预计我们的结果范围将在4
左右收紧。你知道吗
我的问题-如果一个猜测者不知道m
的范围,她怎么能恢复隐藏的数字n
?假设每个实验的m
都是从相同的范围内得出的,并且n
永远不会改变。你知道吗
我知道肯定有人回答了这个问题,但我对如何前进感到困惑。谢谢您!你知道吗
在我发布这个问题之后,我想到了一个方法,但是它只有在我们事先知道
m_min
或m_max
的值时才起作用。对于这个解决方案,我们需要m_min = 0.
假设所有变量名都是我最初问题中定义的。你知道吗
猜测者只知道列表
p
中的一串值。当猜测者在列表p
中添加更多的数字时,他们可以记录两个项目:recorded_min
和recorded_max
,分别对应于看到的最小数字和看到的最大数字。你知道吗让我们将绘制
m
的范围的端点命名为[m_min, m_max]
。回想一下,猜测者希望从列表p
中的条目中恢复隐藏数字n
的值。你知道吗recorded_min
~=n
+m_min
recorded_max
~=n
+m_max
其中
~=
表示近似相等。你知道吗在列表
p
中有足够长的一系列条目之后,我们对recorded_min
的值和recorded_max
的值进行了一些有一定可信度的猜测。你知道吗注意,
recorded_max - recorded_min
给出了m_max - m_min
,它给出了绘制m
的范围的长度。你知道吗因为我们知道
m
是在这个范围内均匀随机绘制的,所以它的中心是center = m_min + (recorded_max - recorded_min)/2
,或者等价地center = m_max - (recorded_max - recorded_min/2)
。因为我们需要m_min = 0
,所以我们得到了随机分布的中心。你知道吗我们现在可以从列表
p
中提取样本,然后从每个样本中减去center
,然后像以前一样取平均值,得出n
的猜测值。你知道吗退货:
相关问题 更多 >
编程相关推荐