【发布时间】:2011-02-24 00:50:26
【问题描述】:
List1 包含大量 (~7^10) 个 N 维点 (N List2 包含相同或更少数量的 N-维点(N
我的任务是:对于 List1 中的每个点,我想检查 List2 中的哪个点最接近(欧几里德距离)List1 中的一个点,然后对其执行一些操作。我一直在做简单的嵌套循环方式,当我在 List1 中没有超过 50 个点时,但是有 7^10 个点,这显然会占用很多时间。
最快的方法是什么?计算几何中的任何概念可能会有所帮助?
编辑:我有以下内容,我已经从 List2 构建了一个 kd-tree,然后现在我正在对 each 点进行最近邻搜索在 List1 中。现在,正如我最初指出的那样,List1 有 7^10 个点,因此虽然我节省了每对的蛮力、欧几里德距离方法,但 List1 中的点数非常多 导致大量时间消耗。有什么办法可以改善吗?
【问题讨论】:
-
您能否分析您的代码以查看大部分时间都花在了哪里(以及是否)?也就是说,如果 80% 的时间都在做拆分,可以尝试简化拆分代码。如果 80% 正在做距离比较,您可以尝试改进比较(例如:如果一个轴上的距离大于您当前的最小总距离,则不要费心检查其他维度)等等。让我们看看在哪里进行优化。
标签: algorithm math geometry computational-geometry euclidean-distance