在两个数组之间找到一个函数,以最小化线对之间的距离

时间:2019-02-23 11:49:55

标签: r algorithm distance

我将在一般情况下解释我的问题(因为我对一般算法感兴趣),然后将其归结为我的特殊情况。

假设我们有两个有限集A和B,它们都是X的子集,还有一个距离函数d,它指定X的任意两个点之间的距离。 找到两个函数的算法是什么:从A到B的f1和从B到A的f2,使得f1(a)是B中最接近a的元素,并且对于f2而言反之亦然。

我的特殊情况是R语言,在地球上我有两组点(纬度,经度),我需要根据它们的距离将它们配对(从A到B,反之亦然)。 作为参考,我使用的是Haversine距地球距离软件包。

谢谢。

1 个答案:

答案 0 :(得分:0)

只需提及,这是一个算法问题的算法解决方案。

让我们从解决O(n^2)时间和内存复杂性开始。对于A中的每个元素,请记住距B中的每个元素的距离。然后遍历此二维数组,并为每一行找到其最小值-这些元素是f1的图像,f2始终是f1的逆函数。

现在,我们可以在O(n log n)时间复杂度和O(n)内存复杂度方面创建类似的解决方案。使用二进制搜索。

让我们对A中的元素进行排序,可以说出O(log n)中与集合中某个元素最接近的元素是什么。对于数字,只需对它们进行排序即可,对于lon & lat,您只需要先按lon对其进行排序,而不是按lat进行排序。

现在对A中的每个元素使用二进制搜索来搜索B中最接近的项目。每个问题将花费O(log n)。现在,对于每个元素,我们知道哪个是最接近的。 O(n log n)