我已经阅读了几篇关于 KD Trees 与 R-Trees 的 SO 帖子,但我仍然对我的具体应用有一些疑问。
对于我的 Java 应用程序,我想维护相对少量的空间数据点(几十万)。关键是数据插入不会被批量加载,而是频繁且增量地插入。我还应该提到,我将对空间域的子区域执行大量的周期性范围查询。
我读过 KD 树通常不支持增量构建,而 R 树更适合于此,因为它们保持平衡状态。
但是,在查看了此处建议的解决方案后: Java 对商业友好的 R-tree 实现?
我没有发现这些实现很容易用于返回范围搜索中的点列表。但是,我发现: http: //java-ml.sourceforge.net/有一个非常好的 KD 树实现,它可以快速运行,并且在一组测试点(~25K)方面优于标准数组存储。此外,我读过 R 树在处理点时会存储冗余信息(因为点是最小 = 最大值的矩形)。
由于我使用的点数较少,因此这两种结构之间的差异是否比使用存储数百万点的数据库应用程序更重要?