【发布时间】:2015-06-12 19:06:01
【问题描述】:
我在离散空间中有一组点,坐标以 N 个 double[] 数组的形式给出。
如:
点 T1 = {1.3,2.5,4-3} ---> double[] x = {1.3}, double[] y = {2.5}, double[] z = {4.3}
然后我有一个函数可以在连续空间中的所有方向上从给定点生成偏移量,我需要在我的矩阵/双精度数组中找到最接近的匹配项。
问题是我无法对这些数组进行排序并应用二进制搜索,因为 Point 的组件在排序后很可能不会有相同的索引,相对于彼此。
是否有一些我可以应用的数据结构/算法来避免迭代搜索最接近的匹配点?
将点组织成一个数组实例来描述整个点而不是每个组件的数组会更好吗?
编辑
看起来理想的解决方案将使用评论中建议的 k-d 树。计算机科学算法不是我的领域,因此在我研究该主题时,使用 k-d 树或其他替代方法演示最小示例的答案将是最有帮助的。
【问题讨论】:
-
所有
Ndouble[] 都只包含一个元素吗? -
您可以使用 Octree 或其他一些空间数据类型,例如 k-D 树
-
我不受任何结构的约束。我需要能够以某种方式将点存储在维度空间中以获得尽可能快的搜索。任何考虑到这一点的数据组织都适合我。
-
解决方案不应绑定到 3 维空间
-
看起来,据我所知,k-d 树可能是解决这个问题的方法。我以前从未使用过这种结构。 @Samgak 您能否为答案展示最小的可能示例?
标签: java arrays algorithm search optimization