我想要找到128维空间中两个点集的直径。第一个点集有10000个点,第二个有1000000个点。因此我希望能够采用比O(n²)更好的算法来解决问题。该算法可以处理任意数量的点和维度,但目前我特别关心这两个特定的数据集。
我非常关注速度而不是精确度,因此基于这篇文章,我将通过计算每个坐标的最小值和最大值来找到(近似的)点集的边界框,因此时间复杂度为O(n*d)。然后,如果我找到了这个盒子的直径,问题就解决了。
在三维情况下,我可以找到一侧的直径,因为我知道两条边,然后可以对垂直于这侧的另一条边应用勾股定理。然而,我不确定这种方法是否适用于d维,并且我无法看出如何将其推广到d维。
有一个有趣的答案在这里,但它似乎仅适用于三维,并且我想要一种d维的方法。
有趣的论文:计算高维欧几里得空间中点集直径的方法。 链接。然而,在此阶段实施该算法对我来说似乎太过复杂。
我非常关注速度而不是精确度,因此基于这篇文章,我将通过计算每个坐标的最小值和最大值来找到(近似的)点集的边界框,因此时间复杂度为O(n*d)。然后,如果我找到了这个盒子的直径,问题就解决了。
在三维情况下,我可以找到一侧的直径,因为我知道两条边,然后可以对垂直于这侧的另一条边应用勾股定理。然而,我不确定这种方法是否适用于d维,并且我无法看出如何将其推广到d维。
有一个有趣的答案在这里,但它似乎仅适用于三维,并且我想要一种d维的方法。
有趣的论文:计算高维欧几里得空间中点集直径的方法。 链接。然而,在此阶段实施该算法对我来说似乎太过复杂。