给出m个4维点,找出两个具有最大欧几里得距离的点的有效方法是什么?
目前,我只是使用蛮力方法,并使用2个嵌套的for循环(O(m ^ 2))检查每对距离,但这很糟糕,因为它无法缩放。
答案 0 :(得分:0)
问题的计算与维数成比例。通常在大约4点时,蛮力会更好。
如果此数据有某些已知功能,则可以减少开销。就像您经常这样做,但要点变化不大一样。每次添加新点以缓存蛮力数据时,都可以通过检查每个点中的最远点来构建分组。您将在插入时获得O(N),在farlest查询中获得O(N)。但是,您需要这样做N次才能获得O(N ^ 2)。
如果您还对数据进行了聚类,则可以减少一点。因此,您可以在插入过程中定义一个点簇,并且可以确定由于您的房屋位于纽约,因此您可以将巴黎的房屋与澳大利亚的房屋进行比较,从而使巴黎的房屋无法再进一步。之所以可以这样做,是因为您将数据存储在群集中。但是,这并不会为您节省太多,因为在4D中,要进行优化真的很难,因为您最终需要使用更多的盒子来以4D形式存储群集,而大多数有趣的优化过程证明,既然您已经超出了该距离, 4D可以排除所有其他点。二维效果很棒,但是这些技巧随着新的尺寸而变得越来越混乱。
答案 1 :(得分:-1)
请查看以下问题的答案:How to find two most distant points? 要查找凸包,可以使用以下命令:https://en.wikipedia.org/wiki/Gift_wrapping_algorithm