给定m个四维点,如何高效地找出具有最大欧几里得距离的两个点?
目前,我只是使用蛮力方法,通过两个嵌套的for循环检查每对距离(O(m ^ 2)),但这非常糟糕,因为它无法扩展。
给定m个四维点,如何高效地找出具有最大欧几里得距离的两个点?
目前,我只是使用蛮力方法,通过两个嵌套的for循环检查每对距离(O(m ^ 2)),但这非常糟糕,因为它无法扩展。
问题的计算随着维度的增加而增加。在大约4个维度时,你通常最好使用暴力方法。
如果有一些已知的功能可以减少工作量。比如,如果你经常这样做,但点的变化不大。你可以通过每次添加一个新点时检查每个点的最远点来构建分组,并缓存来自暴力方法的数据。插入的时间复杂度为O(N),最远点查询的时间复杂度也为O(N)。但是,你需要这样做N次,从而得到O(N^2)。
如果你还将数据聚类,就可以将其减少一些。因此,在插入期间定义一组点,你可以确定由于你的房子在纽约,所以巴黎没有房子更远,因为你已经将其与澳大利亚的房子进行了比较。你之所以能够这样做,是因为你有聚类数据。但是,这并不能节省太多时间,因为在4D中,优化变得非常困难,因为你需要更多的盒子来存储聚类,而大部分有趣的优化都是证明,由于你已经超过了4D中的那个距离,所以你可以排除所有其他点。在2D中这很棒,但是这些技巧随着新维度的增加变得越来越混乱。