R-Tree实现Java

我在最近几天搜索R-Tree的稳定实现,支持无限维(20左右就足够了)。 我只找到了这个http://sourceforge.net/projects/jsi/,但它们只支持2个维度。

另一个选项是区间树的多维实现。

也许我完全错误地使用了R-Tree或Intervall-tree来解决我的问题所以我简单地说明了问题,你可以把你的想法发给我。

我需要解决的问题是某种最近邻搜索。 我有一套天线和房间,每个天线有一个整数间隔。 例如天线1,最小-92,最大-85。 实际上它可以表示为房间 – >天线组 – >天线间隔。 这个想法是每个房间在天线的尺寸上跨越R-Tree中的一个盒子,并且在每个维度上跨越间隔。

如果我得到N-Antennas的查询和每个天线的值,那么我可以将信息表示为房间中的查询点并检索“最接近”点的房间。

希望你对问题和我的想法有所了解。

我并不完全清楚你的确切问题是什么,但是R树或间隔树在20个维度上不能很好地工作。 这不是一个庞大的维度,但它足以让维度的诅咒开始显现。

看看我的意思,考虑只是试着看一个盒子的所有邻居,包括角落和边缘的邻居。 有20个尺寸,你将有3个20 – 1或3,486,784,400个相邻的盒子。 (通过认识到沿着每个轴,邻居可以是-1单位,0单位或+1单位,但是(0,0,0)不是邻居,因为它代表原始框。)

对不起,您要么接受暴力搜索,要么更好地分析您的问题并提出更聪明的解决方案。

请注意,当您有离散数据时,R-Trees会严重降级。 您真正需要找到的第一件事是适当的数据表示,然后测试您的查询是否对数据的子集起作用。

R-Trees只会使您的查询更快 。 如果他们首先不工作,那将无济于事。 您应首先测试您的方法而不使用R-Trees。 除非您遇到大量数据(例如,100.000个对象),否则内存中的线性扫描可以轻松地胜过R-Tree,特别是当您需要某个适配器层时,因为它与您的代码没有很好地集成。

这里显而易见的方法是使用边界矩形 ,并对它们进行线性扫描。 如果它们有效,则可以将MBR存储在R-Tree中以获得一些性能改进。 但是如果它不适用于线性扫描,它也不适用于R-Tree(它将无法更快地工作。)

我在Java中发现了这个R * -Tree实现,它似乎提供了许多function:

https://github.com/davidmoten/rtree

你可能想看一下!

Java中另一个很好的实现是ELKI: https ://elki-project.github.io/。

您可以使用PostgreSQL的通用搜索树索引工具。

GiST 快速演示

Interesting Posts