Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-Tree的Java实现_Java_Algorithm_Data Structures_R Tree_Interval Tree - Fatal编程技术网

R-Tree的Java实现

R-Tree的Java实现,java,algorithm,data-structures,r-tree,interval-tree,Java,Algorithm,Data Structures,R Tree,Interval Tree,在过去的几天里,我一直在寻找一个支持无限维的R-树的稳定实现(20个左右就足够了)。我只找到了这个,但它们只支持二维 另一个选择是区间树的多维实现 也许我完全错误地认为用R-树或区间树来解决我的问题,所以我简而言之,你可以把你的想法告诉我 我需要解决的问题是某种最近邻搜索。我有一组天线和房间,每个天线有一个整数间隔。例如,天线1,最小值为92,最大值为85。事实上,它可以表示为房间->天线组->天线间隔。 这个想法是,每个房间在R-树中的一个盒子上跨越天线的尺寸,在每个尺寸上跨越间隔 如果我得到

在过去的几天里,我一直在寻找一个支持无限维的R-树的稳定实现(20个左右就足够了)。我只找到了这个,但它们只支持二维

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

也许我完全错误地认为用R-树或区间树来解决我的问题,所以我简而言之,你可以把你的想法告诉我

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

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


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

我不完全清楚您的确切问题是什么,但R-树或区间树在20维中不太适用。这并不是一个庞大的维度数量,但它足够大,足以让维度诅咒开始显现

要明白我的意思,试着看看盒子里的所有邻居,包括角落和边上的邻居。对于20个维度,您将有320-1或3486784400个相邻框。(通过了解每个轴上的邻居可以是-1个单位、0个单位或+1个单位,但(0,0,0)不是邻居,因为它代表原始长方体。)


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

请注意,当您有离散数据时,R树可能会严重退化。您真正需要了解的第一件事是适当的数据表示,然后测试您的查询是否处理数据的子集

R-树只会让你的查询更快。如果它们一开始不起作用,那就没用了您应该在不使用R树的情况下首先测试您的方法。除非您遇到大量数据(例如,100.000个对象),否则内存中的线性扫描很容易优于R树,特别是当您需要一些适配器层时,因为它与代码没有很好地集成


这里最明显的方法是使用边界矩形,然后线性扫描它们。如果它们可以工作,那么您可以将MBR存储在R树中,以获得一些性能改进但是如果它不能与线性扫描一起工作,它也不能与R-树一起工作(不会更快)。

我在Java中发现了这个R*树实现,它似乎提供了许多功能:


你可能想看看

另一个很好的Java实现是ELKI:。

您可以使用PostgreSQL的通用搜索树索引功能


Y我知道维度的诅咒。但我会用R-树试试,因为20维是最坏的情况。也许我可以用某种方式缩小尺寸。但我想测试一下,并将其与其他可能更好的解决方案进行比较。这在很大程度上取决于您的数据。我已经成功地在27+维颜色直方图上使用了R-树。是的。但对于测试,我首先需要一个有效的实现是的,但不是R树的。只要用线性扫描就行了!再一次;R-trees只会加速,不会解决以前无法完成的任何任务。加速正是我想要的。因此,我正在寻找一个通用的、免费的、稳定的实现。例如TreeMap的本机实现,在后台使用红黑树。好吧,我担心你的方法不管有没有加速都不起作用!所以,在浪费时间采用一些外部代码之前,首先测试它。R-树管理矩形,但如果距离函数没有帮助(发生在高维度…请参阅“维度诅咒”),则这对您毫无帮助。请注意,R-树作为一种缓存无关的多维数据结构在游戏开发人员中广受欢迎。特别是当你可以从一片叶子上穿过这棵树(例如,玩家攻击他附近的敌人)或者几乎不更新这棵树时,这对100k对象的“线性扫描”来说是一个巨大的性能提升。这是我对它的观点。nvm是一个古老的线程:注意,有一些数据结构专门设计来支持最近邻查询,比如M-树。我们鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防无法访问目标站点或永久脱机。