有趣的思考问题你们。给定一个长度为 n 的数组,如果我要在这个数组中选择两个随机索引,那么 a 和 b 平均相隔多远是?至于从 a 走到 b 需要走多少步。没有限制因此我有可能为两者选择相同的索引,并且 a 和 b 有可能位于数组的两端。
我已经考虑了一段时间,我最初的想法是他们平均分别是n / 2(ish),但我认为这种预感不正确。在数组最多的中心选择的索引必须走n / 2个位置才能找到相应的第二个选择,而只有在数组的末端,第二个选择才能在n个距离附近程。
谢谢!
答案 0 :(得分:5)
在为n的前几个值涂写一些可能距离的网格之后,我认为确切的结果实际上是由:
f(n) = (n² - 1) / 3n
答案 1 :(得分:2)
在数组中选择两个位置相当于将数组拆分为3个部分。每个部分的平均大小为n / 3,因此两点之间的平均距离也是n / 3.
答案 2 :(得分:1)
在python中使用monte carlo方法:
from collections import defaultdict
import random
sample = [abs(random.choice(range(0,10)) - random.choice(range(0,10))) for i in range(0,10000)]
avg = float(sum(sample) / len(sample))
print ("Average: %f" % avg)
freq = defaultdict(int)
for s in sample:
freq[s] += 1
scale = 40.0 / max(freq.values())
for i in range(0,10):
print ("%d : %s" % (i, "#" * int(freq[i] * scale)))
输出:
Average: 3.293700
0 : ######################
1 : ########################################
2 : ####################################
3 : ###############################
4 : ##########################
5 : ######################
6 : #################
7 : #############
8 : #########
9 : ####
所以看起来像是n/3
- 但它并不是均匀分布的。
答案 3 :(得分:1)
有一种简单的方法可以知道:对于所有夫妻(a, b)
,计算他们的距离。知道所有情侣(a, b)
具有相同的出现概率,您只需要做这些距离的平均值即可回答您的问题。