我怎么能制作这个KD树?

时间:2012-10-01 00:10:59

标签: sorting data-structures tree nearest-neighbor kdtree

我有一个非常长的,半排序的纬度,经度和时区三元组列表。我希望能够快速搜索此列表以找到与任何给定纬度和经度最接近的时区,因此我想将此列表放入KD树中。

我在想我应该首先将整个文件读入某种数据结构(什么是数据结构?可能是ArrayList<Triplet<Double, Double, String>>?)。然后取出该结构中的中间元素并将其作为根,留下左右列表。然后继续使用每个列表的中位元素并将其添加为左或右孩子。

对此的第一次尝试似乎缓慢且低效......但我觉得我做错了。你能为我提供的算法或伪代码提供给我吗?

1 个答案:

答案 0 :(得分:2)

如果它有帮助,我有一个KD-Tree in Java,它将XYZ视为一个名为XYZPoint的内部类中的双精度数。您可以使用时区数据增加XYZ点,并使用X表示经度,Y表示纬度,零表示Z.它至少可以作为起点。

然后,您可以使用已经实施的最近邻居(欧几里德距离)方法,以获得距离点最近的时区。

另外..为填充KD树,wikipeda建议使用HeapSort (my Java implementation linked)并重复删除中位数。