数组中两个随机选择的索引之间的平均距离

时间:2014-02-27 01:37:35

标签: arrays algorithm probability

有趣的思考问题你们。给定一个长度为 n 的数组,如果我要在这个数组中选择两个随机索引,那么 a b 平均相隔多远是?至于从 a 走到 b 需要走多少步。没有限制因此我有可能为两者选择相同的索引,并且 a b 有可能位于数组的两端。

我已经考虑了一段时间,我最初的想法是他们平均分别是n / 2(ish),但我认为这种预感不正确。在数组最多的中心选择的索引必须走n / 2个位置才能找到相应的第二个选择,而只有在数组的末端,第二个选择才能在n个距离附近程。

谢谢!

4 个答案:

答案 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)具有相同的出现概率,您只需要做这些距离的平均值即可回答您的问题。