处理大数据网络文件的高效算法,用于计算n个最近节点



问题:我有两个网络文件(比如NET1和NET2(-每个文件都有一组节点,每个节点都有唯一的ID,地理坐标X和Y。NET2中的每个节点都要有到NET1的n连接,n节点的ID将由最小直线距离确定。输出将具有NET1、NET2中节点的三个字段ID以及它们之间的距离。所有文件都采用制表符分隔的格式。

前进的一条路实现这一点的一种方法是,对于NET2中的每个节点,我们循环遍历NET1中的每一个节点,并计算所有NET1-NET2距离组合。按NET2节点id和距离对其进行排序,并为每个节点写出前四条记录。但问题是,在NET1上有近200万个节点,在NET2上有2000个节点,也就是说,在该算法的第一步中,需要计算和写入40亿个距离。。。运行时非常令人生畏!

请求:我很好奇你们当中是否有人面临过类似的问题。我很想听听你们关于任何可以用来加快处理速度的算法和数据结构的意见。我知道这个问题的范围很广,但我希望有人能给我指明正确的方向,因为我在为这种规模的数据优化代码方面的经验非常有限。

语言:我正在尝试C++、Python和R.

请提出想法!非常感谢您的帮助!

kd-tree是其中一个选项。它允许您在合理的时间内找到最近的邻居(或一组最近的邻居(。当然,你必须在一开始就建造这棵树,这需要一些时间。但一般来说,如果您不必在运行时添加/删除节点,kd-tree是合适的,这似乎就是您的情况。它还具有更低维度的更好性能(在您的情况下,维度为2(。

另一种可能的数据结构是八叉树(2D的四叉树(,它是更简单的数据结构(很容易实现(,但kd树可能更高效。

最新更新