【问题标题】:Find member of set with minimizing total distance property查找具有最小总距离属性的集合成员
【发布时间】:2013-08-31 07:44:50
【问题描述】:

我正在寻找以下问题的有效解决方案:对于 n 维欧几里得空间中的给定点集,找到该集合中与集合中其他点的总距离最小的此类成员。

明显的幼稚方法是二次的,所以我正在寻找不是二次的方法。

我的第一个想法是,我只需要找到边界球的中心,然后在集合中找到离该点最近的点。但这实际上是不正确的,想象一下直角三角形 - 它的所有顶点都与这样的中心等距,但是,恰好一个顶点符合我们的要求。

如果有人能对这个问题有所了解,那就太好了。

【问题讨论】:

  • @BartoszKP,感谢您提供此链接!虽然我相信这是一个略有不同的问题。据我了解,在那里提出的问题不应该是该点应该是集合的成员。虽然只有一个额外的步骤 - 找到最近点,但它被问到的事情略有不同,因此可能存在不同的解决方案。
  • 也不确定,但它是一组给定位置中最方便的位置,所以我猜这是集合中的一个点。

标签: algorithm


【解决方案1】:

最小化到所有点的距离是它们的平均值。只是一个猜测,但在你找到平均值之后,你可以找到最接近它的点。正如在 cmets 中正确指出的那样,中位数而不是平均值实际上会使距离最小化(平均值将使平方距离最小化)。中位数也可以在O(n) 中计算。对于高维数据集,这个解决方案当然是O(n*m),其中m 是维数。

还有一些链接:

在此处查看接受的答案:Algorithm to find point of minimum total distance from locations

以及mcdowella提供的链接:http://en.wikipedia.org/wiki/Geometric_median

【讨论】:

  • 传统平均值最小化距离的平方和,通过微分可以解决优化问题。几何中位数最小化绝对差异的总和 - 请参阅en.wikipedia.org/wiki/Geometric_median
  • 获得所有对的平均值是一个二次问题,因此您可能会直接采用幼稚的方法。
  • 不是所有对的平均值,只是对所有坐标进行平均。它是线性的。
  • 非常感谢您提供此链接。但老实说,看起来我在说“我正在寻找做这种事情的算法”,而你告诉我“实际上,你正在寻找寻找 N 的算法,这里有一篇关于 N 的文章维基百科”。但这并不能回答我应该如何解决这个问题。相关问题中接受的答案也无济于事,因为它是以完全相同的形式构造的。
【解决方案2】:

我边走边编,但凸优化中“集合的最佳点”和“最佳点”之间似乎存在密切联系。

您的得分函数是距离的总和。每个距离都是凸 U 形(在这种情况下是 V 形),因此它们的总和是凸 U 形。特别是除了集合中的点外,它在任何地方都有一个非常好的导数,而且这个导数是乐观的——如果你取一个点的值及其导数,忽略你正在查看的点的任何点,那么基于这个的预测将是乐观的 - 使用导数形成的线几乎完全位于正确答案的下方,但在一个点上掠过它。

这导致以下算法:

反复

随机选择一个点,看看是否是迄今为止最好的点。如果是这样,请注意它。取此时距离之和的导数。使用这个和那个点的值来计算出每个其他点的预测距离总和,并尽可能地丢弃这个预测比最佳答案差的点(尽管你仍然需要考虑它们在计算距离和导数时)。这些将是通过所选点垂直于导数绘制的平面远端上的点。

现在也放弃选择的点作为竞争者,如果还有需要考虑的点,请重复。

我希望这类似于随机选择的点上的 n log n。但是,如果点的集合形成 n 维的正多边形的顶点,那么它将花费 N^2,每次只丢弃选择的点 - N 个点中的任何一个实际上都是正确的答案,并且它们都具有相同的距离之和。

我当然会投票赞成任何能够确认或否认在凸目标函数下找到一组给定点中的最佳值的一般原则。

好的——我对此非常感兴趣,可以编写程序——所以如果有人关心的话,我有 200 多行 Java 代码可以在这里转储。在 2 维中它非常快,但是在 20 维中,您仅获得两倍左右 - 这是可以合理理解的 - 每次迭代都通过将问题投影到一条线上并切掉线外的一小部分点来切断点.一个随机选择的点距离中心的距离大约是其他点的一半 - 并且非常粗略地,您可以预期投影会切断除 1/2 的第 d 根的某个倍数之外的所有内容,以便 d 增加分数您可以在每次迭代中丢弃的点数减少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-08
    • 2011-06-04
    • 1970-01-01
    • 2011-04-19
    • 2012-02-01
    • 2019-06-07
    • 2012-06-11
    • 1970-01-01
    相关资源
    最近更新 更多