对于文本墙提前抱歉 - 自从我完成编程以来已经有一段时间了,我的意思可能就是更好的术语。搜索了我能想到的一切,但没有在网站上找到任何相关的问题,但也许我们可以找到一个更好的术语,所以任何帮助都将不胜感激!
我正在尝试提高查找不超过集合taxicab/Manhattan distance的对象组的效果。所以,我的距离是'x',点'a'是点“b”的x个单位,“b”的点是“c”的x个单位,点“c”的点是“a”的x + 3个单位;我应该将a,b和c识别为一个组,以及任何一个x单位内的任何对象(等等)。
我已经确定了几种用于查找这些组的简单算法,但我认为性能可以更好。聚类算法似乎在这里应该是相关的,但我无法找到一个恰好适合我的问题的算法。我也不确定我是否尽可能有效地存储数据 - 现在我只是处理静态数据,因此我可以在开始之前将其复制到我需要的任何形式;但是在将来我希望有一个可以有效处理添加和删除点的实现。以下是详细信息:
如何通过偏移网格两次循环遍历ArrayLists然后重新分析我创建的组来提高性能?我的语言是Java,但算法比特定类型更重要和图书馆(虽然我也会拿这些!)。
答案 0 :(得分:1)
我认为您正在尝试实现Range search的特殊情况。将数据存储在k-d tree中可能会很有用。至少你应该能够轻松地提取位于你正在搜索的一个点周围的超立方体中的点。然后你可以检查它们的距离是否符合要求。
另请参阅:“Fixed-Radius Near Neighbors and Geometric Basics”了解某些解决方案。