我正在参与一个学校项目,该项目涉及到一个经纬度点,并在已知的地点列表中找到前五个最接近的点。该列表将被存储在内存中,但必须选择一个“合适的数据结构” - 也就是说,我们不能简单地将所有位置存储在一个数组中,并以线性方式逐一比较距离。老师建议将美国州的地点数据分组,以防止计算距离显然太远的地方的距离。我想我可以做得更好。R树50,000英尺的概述?
从我的在线研究看来,R-Tree或其变种之一似乎是一个很好的解决方案。不幸的是,就我理解实际技术而言,这句话就像我已经掌握的那样,因为文献对于我的非学术性头脑来说太简单了。
有人可以给我什么样的过程是填入一R-树与纬度/经度数据,然后遍历树找到一个给定的点的那些5个最近的邻居一个非常高的概述?
此外,该项目是在C中,我不必在此重新发明轮子,所以如果您已经使用R树的现有开源C实现,我会对您的体验感兴趣。
UPDATE:This blog post描述了一个简单的搜索算法用于区域划分空间(如PR四叉树)。希望对未来的读者有所帮助。
看看http://www.rtreeportal.org/,有一些指向一些实现。请注意,我还没有看到一个不是垃圾的C实现。 – avakar 2010-05-07 08:32:52
废话低效,或废话,因为在不会编译?前者适合我的目的。 :-) – roufamatic 2010-05-07 15:35:11
废话如“不检查malloc和其他类似违规的结果”。我不知道作业是否合适。 :) – avakar 2010-05-07 17:04:42