Algorithm 如何在给定m个点的四维空间中有效地找到两个最远点(欧氏距离)?

Algorithm 如何在给定m个点的四维空间中有效地找到两个最远点(欧氏距离)?,algorithm,euclidean-distance,Algorithm,Euclidean Distance,给定m个四维点,找出欧氏距离最大的两点的有效方法是什么 目前,我只是使用蛮力方法,用2个嵌套的for循环(O(m^2))检查每对距离,但这非常糟糕,因为它不能缩放。请查看此问题的答案: 要找到凸包,您可以使用以下命令:问题计算会随着维度的变化而变化。大约在4岁时,使用暴力通常会更好 如果这些数据有一些已知的功能,那么您可以减少开支。比如说,如果你经常这样做,但要点变化不大。您可以通过在每次添加缓存暴力数据的新点时检查每个点的最远点来构建分组。插入时得到O(N),最远查询时得到O(N)。但是,你需

给定m个四维点,找出欧氏距离最大的两点的有效方法是什么


目前,我只是使用蛮力方法,用2个嵌套的for循环(O(m^2))检查每对距离,但这非常糟糕,因为它不能缩放。

请查看此问题的答案:
要找到凸包,您可以使用以下命令:

问题计算会随着维度的变化而变化。大约在4岁时,使用暴力通常会更好

如果这些数据有一些已知的功能,那么您可以减少开支。比如说,如果你经常这样做,但要点变化不大。您可以通过在每次添加缓存暴力数据的新点时检查每个点的最远点来构建分组。插入时得到O(N),最远查询时得到O(N)。但是,你需要做N次,给你O(N^2)


如果还对数据进行了集群,则可以稍微减少这一点。因此,在插入过程中定义了一组点,您可以确定,因为您的房子位于纽约,所以巴黎的房子不能再远了,因为您已经将它与澳大利亚的房子进行了比较。您可以这样做,因为您有集群中的数据。但是,这不会为你节省太多,因为在4D中,事情变得很难优化,因为你最终需要更多的盒子来存储4D中的集群,而最有趣的优化就是证明,既然你已经在4D中超过了这个距离,你可以排除所有其他点。这在2D中很好,但随着新维度的出现,这些技巧变得越来越混乱。

对于精确解,我不确定你是否能比O(m²)做得更好。看起来二次项在最佳情况下出现:@m69你确定三角形不等式在四维中有效吗?什么是四维三角形?@m69它说这个不等式适用于更高维!不幸的是,在维度4中找到极值点需要O(n²)。这些链接与2D相关,它们不相关。不幸的是,在4维中求极值需要O(n²)。该算法可以推广到3维及更高维。对于三维算法的可视化,请看这里:如果不降低复杂性,它有什么用?@PeterChikov三角形不等式也改善了平均情况,但不是最坏情况。集群可能也会。