【发布时间】:2012-09-21 21:15:50
【问题描述】:
我有一个很长的、半排序的纬度、经度和时区三元组列表。我希望能够快速搜索此列表以找到与任何给定纬度和经度最近的时区,因此我想将此列表制作成 KD 树。
我在想我应该首先将整个文件读入某种数据结构(什么数据结构?可能是ArrayList<Triplet<Double, Double, String>>?)。然后取该结构中的中间元素并将其作为根,给我留下一个左右列表。然后继续获取每个列表的中间元素并将其添加为左子或右子。
第一次尝试这个似乎很慢而且效率很低……但我觉得我做错了。您能否为我正在尝试做的事情提供算法或伪代码?
【问题讨论】:
-
如果您对 KDTree 有任何疑问,请告诉我。如果它仍然很慢/效率低,请告诉我;我很好奇!
-
我将您的实现与 Java-ML (java-ml.sourceforge.net) 中的 KDTree 实现进行了比较,而您的在提取 k 个最近邻居时要慢得多。不过你的界面更好:)
-
另外,这里有一些更快的实现:robowiki.net/wiki/Kd-tree#Implementations
标签: sorting data-structures tree nearest-neighbor kdtree