【问题标题】:How to efficiently find the two farthest point (Euclidean distance) in an 4-dimensional space given m points?给定m个点,如何有效地找到4维空间中最远的两个点(欧几里得距离)?
【发布时间】:2019-03-03 18:38:03
【问题描述】:

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

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

【问题讨论】:

标签: algorithm euclidean-distance


【解决方案1】:

问题计算随维度而变化。大约在 4 岁时,您通常最好使用蛮力。

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

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

【讨论】:

    【解决方案2】:

    请看这个问题的答案:How to find two most distant points? 要找到凸包,您可以使用:https://en.wikipedia.org/wiki/Gift_wrapping_algorithm

    【讨论】:

    • 不幸的是,找到极值点在维度 4 中需要 O(n²)。
    • 那些链接与 2D 相关,它们不相关。不幸的是,找到极值点在维度 4 中需要 O(n²)。
    • 这个算法可以推广到第三维和更高维。对于第三维算法的可视化,请看这里:dccg.upc.edu/people/vera/wp-content/uploads/2014/11/…
    • 不降低复杂度有什么用?
    • @PeterChikov 三角不等式也改善了平均情况,但不是最坏情况。集群也可能会。
    猜你喜欢
    • 2021-10-11
    • 2019-01-02
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2011-01-29
    • 2021-05-14
    相关资源
    最近更新 更多