如何在未排序的数组中找到最接近的双精度

时间:2015-06-12 06:29:37

标签: java arrays algorithm search optimization

我在离散空间中有一组点,坐标为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树或其他替代方法展示最小例子的答案将是最有帮助的。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你有N个大小为M的浮点阵列,每个浮点数包含一个沿N维空间轴的点的坐标。您还有一个浮点数,并且您想要找到浮点数最接近其中一个组件的点的索引。如果这是正确的,我将创建一个单元数组,其元素是对(值,索引),其中value是组件之一,索引带来组件所属点的索引。然后,您可以使用value作为sorting.key对数组进行排序。此时,您可以使用float进行二进制搜索。

当然,只有当你有多个要搜索的浮点数时,构建和排序数组才有意义,因为排序将采用O(K log K),K = N * M,之后搜索将采用O(log K )。如果你只需要搜索一个浮点数,你也可以在数组上进行完整搜索,这将是O(K)。