【问题标题】:Shortest distance travel - common meeting point最短距离旅行 - 共同会面点
【发布时间】:2011-08-23 00:06:46
【问题描述】:

我遇到了这个问题,其中在 2-D 网格上有许多房子(它们的坐标是给定的),我们基本上必须找到哪个房子可以用作会面点,以便每个人经过的距离最小化.让我们假设沿 x 或 y 轴的距离为 1 个单位,到对角线邻居的距离为(例如)1.2 个单位。

我真的想不出一个好的优化算法。

P.S:不是作业问题。而且我只是在寻找一种算法(不是代码),如果可能的话,它的证明。

P.S #2:我不是在寻找详尽的解决方案。信不信由你,这确实打动了我:)

【问题讨论】:

  • 这是一个整数域的最小化问题。证明通常不是微不足道的......

标签: algorithm graph matrix


【解决方案1】:

如前所述,在曼哈顿距离的情况下,中位数给出了解决方案。这是从众所周知的事实中得出的明显结论:中位数使绝对偏差的均值最小化:

E|X-c| >= E|X-median(X)| 表示任何常量 c

您可以在这里找到离散案例的证明示例:
https://stats.stackexchange.com/questions/7307/mean-and-median-properties/7315#7315

【讨论】:

  • 即5 个房子 -8, 2 -7, 2 -3, -7 -2, -9 0, 0 蛮力给出曼哈顿 d 的最小总和:> -3, -7 sum=40 > -7, 2 =39 - min > -8, 2 =42 > 0, 0 =40 > -2,-9 =47 如果我们有 Manh。 d。那么质心是中位数 (-3, 0),最小总和为 33。但我们需要找到特定的房子。房屋 (-7, 2) 的蛮力最小值总和为 39,但它不是最接近中位数的 (m. 距离 6)。最接近的是房子 (0, 0) 与 m。 d。只有 3,但最小总和为 40。那么中位数如何帮助我们找到最小总和的房子?
【解决方案2】:

这可能确实效率低下,但循环遍历所有房屋,然后循环遍历所有其他房屋。 (嵌套 for 循环)使用 distance formula 查找 2 个房子之间的距离。然后你有每个房子之间的距离。找到哪所房子距离最近的一种快速简便的方法是将每个人的步行距离加到给定的房子里。总步行距离最短的房子是首选会议区。

【讨论】:

    【解决方案3】:

    我已经被同样的问题困扰了一段时间了。解决方案是前面帖子中给出的明显共识:独立找到中位数 (mx, my),然后在给定的 N 个点中找到最接近的点,这就是会面地点。要了解为什么这实际上是解决方案,您应该首先考虑距离。

    d = sum(|xi-x|) + sum(|yi-y|) 对所有 1

    在 x 和 y 上是独立的。因此,我们可以解决 x 和 y 的一维情况。我将跳过给出的解释 ^^ 并因此得出结论 (mx,my) 是最好的解决方案如果我们考虑所有可能的点。更大的挑战是证明我们可以从 (mx, my) 到最近的 (xi,yi) 使得 (xi, yi) 是给定点之一,不改变(增加)距离。证明是:

    考虑我们已经对 x 坐标进行了排序(为了证明)和 那X1&lt;X2&lt;...&lt;Xn。还有Xj&lt;mx&lt;X(j+1)j = N/2,现在让我们移动mx 向左一步,即mx' &lt;- mx-1。 因此d' = |X1-mx+1| + .. + |Xj-mx+1| + |X(j+1)-mx+1| + .. + |Xn-mx+1| 我们知道 mx-1 会增加 N/2 个值(对于 k>=j+1 并减少 对于 Xj<mx<X(j+1) 和 Yj&lt;my&lt;Y(j+1) 距离不变的地方。这样我们就可以找到 最接近的点就是答案。

    我忽略了偶数/奇数节点的微妙情况,但我希望当您实现基本证明时,数学会自行解决。

    这是我的第一篇文章,请帮助我提高写作技巧。

    【讨论】:

      【解决方案4】:

      你的距离指标很奇怪。您会期望在对角线上的行进至少需要 sqrt(2) ~= 1.41 倍于沿组件方向行进的距离,因为这就是勾股定理沿着对角线直线行进的距离.

      如果你坚持曼哈顿距离(不允许对角线),那么你会想要选择最接近房屋中位数(x) + 中位数(y) 的房屋。

      考虑 1D 的情况,你有一堆点在一条线上,你想选择会合点。为了具体/简单,假设有 5 间房子,没有重复。

      考虑当汇合点从中间偏向右侧时会发生什么。每离开一个单元,直到你通过从左到右的第 4 宫,3 人必须向右多走一步,2 人必须向左少走一步,所以成本增加 1。一旦你通过第 4 宫,则 4 个人必须向右多走一步,而一个人必须向左少走一步,因此成本增加 3。当您将会面地点移至中位数的左边。远离中位数总是会增加成本。

      这个论点可以推广到任意数量的人,有或没有重复的房子,甚至可以扩展到任意数量的维度,只要你不被允许使用对角线。

      【讨论】:

      • 坦率地说,我认为距离度量应该不是问题(它只是改变了距离公式)。但是,您关于中位数的解决方案是我最初的想法(甚至包括对角线移动)。但是,我无法证明它是正确的。
      • 当然,但是这里的网格有点像正方形(在 x 中移动一个单位需要 1,在 y 中移动一个单位需要 1),所以我认为在对角线上移动至少需要花费是很自然的sqrt(1^2 + 1^2) = sqrt(2)。当然,可能 x 和 y 方向实际上是曲折的路径,但它仍然看起来很奇怪和不自然。
      • >你的距离度量很奇怪 曼哈顿距离没什么奇怪的。除了欧几里得空间,生活还有更多!
      【解决方案5】:

      您的问题称为最佳汇合点查找。 下面的论文给出了一个高效的近似算法 http://www.cse.ust.hk/~wilfred/paper/vldb11.pdf

      【讨论】:

      • 好纸!但是对于曼哈顿距离的特殊情况,有一个有效的精确解。
      【解决方案6】:

      好吧,你可以暴力破解它。取每所房子并计算到彼此房子的距离。将每个房屋的距离相加。然后就拿下总和最低的房子。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多