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



我将在一般设置中解释我的问题(因为我对一般算法感兴趣),然后拒绝它到我的特定情况。

假设我们有两个有限集合,A 和 B,都是 X 的子集和一个距离函数 d,它分配 X 的任何两点之间的距离。 什么是找到两个函数的算法:从 A 到 B 的 f1 和从 B 到 A 的 f2,使得 f1(a) 是 B 中最接近 a 的元素,并且对于 f2 具有相同的 viceversa。

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

提前谢谢。

只是提到,这是算法问题的算法解决方案。

让我们从时间和内存复杂性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).

最新更新