我在具有周期性边界条件的 D 维空间中有 N 个点的点云,其中 N 的范围可以从 500 到 10^8,D 的范围可以从 1 到 20。点的分布变化很大,从完全均匀到非常聚集一起。对于点云中的每个点,我需要找到与该点最近的 k 个邻居。我还需要找出每个点的距离内存在多少个点,特别是 maxnorm 距离。我不需要知道半径内有哪些点,只知道有多少,但这将是一个很好的补充。
我尝试过 kd-trees,但它们不处理环绕边界,对于较大的树,复制是不可行的。此外,它在更高维度上会变慢。
我刚刚遇到 Vantage Point Trees,并尝试了一些代码,但它比 kd-tree 慢。虽然我找到的代码使用递归搜索方法,没有批处理。积极的一面是,它可以本地处理包装条件,因此不需要重复。
我将看看是否可以通过转换为迭代方法并查看是否可以批量搜索来从 VP 树中挤出更多性能,但我有一个想法。所有这些数据结构都可用于查找任意查询点的最近邻居,而我的查询点仅限于点云中的点。我认为这个限制可能允许一些更高性能的结构(可能是导航网格?)。我尝试搜索可以处理此问题的结构,但我的 google-fu 让我失望了。所以只是想知道是否有人知道可以处理以下内容的数据结构:
- 处理小点数和大点数,即500-10^8点
- 处理多达 20 个维度
- 使用周期性边界(即平坦环面)
- 使用 maxnorm 距离(软要求。欧几里得可以给我一个我可以手动剔除的潜在列表,但最好使用 maxnorm)
- 可以找到k-NN到查询点以及找到与查询点的距离存在多少个点
- 查询点只是结构中的点,不是任意点
- 可以批量查询。即我需要为点云中的每个点找到第 k 个 NN。我还需要找出每个点 i 在 d[i] 中存在多少个点。也就是说,每个点都有不同的搜索半径。
- 不需要支持插入或删除。
谢谢