多个数组中两个数字之间的最大平均距离

时间:2020-03-05 13:06:56

标签: arrays algorithm performance

假设您有N个大小为1的数组,每个数组包含从N[1,4,2,3] [4,2,3,1] [2,3,4,1] 的唯一值。

您将如何找到平均距离最远的两个数字?

例如,给定数组:

1

然后答案将是项2k,因为它们在前两个数组中的距离为2,在最后一个数组中的距离为3。

我知道O(kN ^ 2)解决方案(通过测量每个{{1}}数组的每对数字之间的距离),但是有更好的解决方案吗?

我想用C ++实现这样的算法,但是对解决方案的任何描述都会有所帮助。

2 个答案:

答案 0 :(得分:3)

在对数字进行索引的线性时间变换之后,此问题归结为计算相对于L1距离的一组点的直径。不幸的是,这个问题受到维度的诅咒。

给予

    1 2 3 4
1: [1,4,2,3]
2: [4,2,3,1]
3: [2,3,4,1]

我们计算

    1 2 3
1: [1,4,4]
2: [3,2,1]
3: [4,3,2]
4: [2,1,3]

,然后12之间的L1距离为|1-3| + |4-2| + |4-1| = 8,这是它们的平均距离(按问题而言)乘以k = 3

也就是说,您可以使用上面的输入作为数据库,并使用N+1-v下的数据库中每个点的图像作为查询,来应用近似最近邻居算法。

答案 1 :(得分:1)

我建议最好的情况是 。您可以遵循启发式方法。

例如,您知道如果N=4N-1=3将是最大距离,而1将是最小距离。平均距离为10/6=1,66667(阵列中线对之间的距离之和/阵列中线对的数量之和)。

然后,您知道,如果k/2数组的边上有两个数字(大多数情况下),则即使在距离的顶部(> = 2),即使在它们在其他1数组中的距离仅为k/2。对于O(2k) = O(k)的最佳情况,这可能是一个解决方案。

相关问题