【发布时间】:2021-10-16 19:20:47
【问题描述】:
我面临的问题是为数组中的每 1 000 000 个点找到最接近的 100 个点。点是具有 x 和 y 坐标的 2D 点。我想到的只是使用欧几里德距离的蛮力方式,即使是多线程也会花费太长时间。
现在我有一个 Point 类,它实现了包含 x 和 y 的 Runnable。坐标可以是负数和正数。
有人可以建议或编写算法,或者就如何提高性能提供一些想法。
【问题讨论】:
我面临的问题是为数组中的每 1 000 000 个点找到最接近的 100 个点。点是具有 x 和 y 坐标的 2D 点。我想到的只是使用欧几里德距离的蛮力方式,即使是多线程也会花费太长时间。
现在我有一个 Point 类,它实现了包含 x 和 y 的 Runnable。坐标可以是负数和正数。
有人可以建议或编写算法,或者就如何提高性能提供一些想法。
【问题讨论】:
我看到的一种方法是通过邻接矩阵来实现,这样,每个元素 k 都必须计算 n-k 距离(因为您可以重用之前计算的与过去元素的距离)。
您从 O(nn) 的蛮力方式转到稍微低一些的方式,尽管这需要计算机存储 106x106 矩阵,你需要快速排序或之后的东西。
另一种方法(可能更好)是计算每个点到 [0,0] 的距离,按此距离对数组进行排序,然后为每个点计算到数组中相邻点的距离
【讨论】: