Algorithm 最短距离旅行-公共集合点

Algorithm 最短距离旅行-公共集合点,algorithm,graph,matrix,Algorithm,Graph,Matrix,我遇到了这样一个问题,在二维网格上有许多房子(它们的坐标是给定的),我们基本上必须找到哪个房子可以用作集合点,这样每个人所走的距离就最小化了。假设沿x轴或y轴的距离为1个单位,到对角邻域的距离为(比如)1.2个单位 我真的想不出一个好的优化算法 附言:不是作业问题。我只是在寻找一个算法(不是代码),如果可能的话,还有它的证明 p.S#2:我不是在寻找彻底的解决方案。信不信由你,这确实打动了我:)这可能真的很低效,但在所有的房子里循环,然后在所有其他的房子里循环。(嵌套用于循环)使用查找两个房屋之

我遇到了这样一个问题,在二维网格上有许多房子(它们的坐标是给定的),我们基本上必须找到哪个房子可以用作集合点,这样每个人所走的距离就最小化了。假设沿x轴或y轴的距离为1个单位,到对角邻域的距离为(比如)1.2个单位

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

附言:不是作业问题。我只是在寻找一个算法(不是代码),如果可能的话,还有它的证明


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

这可能真的很低效,但在所有的房子里循环,然后在所有其他的房子里循环。(嵌套用于循环)使用查找两个房屋之间的距离。那么你就有了每个房子之间的距离。一种快速简便的方法是将给定房子的每个人的步行距离加在一起,以确定哪栋房子距离最近。总步行距离最短的房子是会议区的首选。

好吧,你可以用暴力强迫它。取每一所房子,计算到另一所房子的距离。把每个房子的距离加起来。然后就去拿那间总和最低的房子。

你的距离指标很奇怪。你会期望在对角线上移动至少需要sqrt(2)~=1.41倍于沿组件方向移动的距离,因为根据毕达哥拉斯定理,如果沿着对角线直线移动,距离会远得多

如果你坚持曼哈顿距离(不允许使用对角线),那么你会选择最靠近房屋中间带(x)+中间带(y)的房屋

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

考虑一下当集合点从中间带向右侧漂移时会发生什么。在你从左到右通过第四宫之前,每离开一个单元,就有3个人需要向右边多走一步,2个人需要向左边少走一步,因此成本增加1。一旦你通过第四宫,那么4个人必须向右边多走一步,而一个人必须向左边少走一步,因此成本增加3。当您将集合点从中间带向左移动时,相同的论点成立。离开中位数总是会增加成本


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

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

E | X-c |>=E | X-中值(X)|
对于任何常数
c

在这里你可以找到一个证明离散情况的例子:

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


d=sum(| xi-x |)+sum(| yi-y |)在所有1中,您的问题称为最佳汇合点查找。 本文给出了一种有效的近似算法

坦率地说,我认为距离度量不应该是个问题(它只是改变了距离公式)。然而,你关于中位数的解决方案是我最初的想法(甚至包括对角线移动)。然而,我不能证明它是正确的。当然,但这里的网格是正方形的(在x中移动一个单位要花费1,在y中移动一个单位要花费1),所以我认为在对角线中移动至少要花费sqrt(1^2+1^2)=sqrt(2),这是很自然的。当然,可能是x和y方向实际上是弯曲的路径,但它仍然显得奇怪和不自然。>你的距离度量很奇怪曼哈顿距离没有什么奇怪的。生命不仅仅是欧几里得空间!这是一个整数域上的极小化问题。证明通常不是琐碎的…例如。5栋房子-8,2-7,2-3,-7-2,-90,0暴力给了曼哈顿的最小和d:>-3,-7总和=40>-7,2=39-分钟>-8,2=42>0,0=40>-2,-9=47如果我们有男人的话。D然后质心是中值(-3,0),最小和为33。但我们需要找到特定的房子。对于house(-7,2),Brute forcemin总和为39,但它不是最接近中间值(m.距离6)。最近的是带有m的房子(0,0)。D只有3个,但不超过40个。那么中位数如何帮助我们找到最小和的房子呢?很酷的纸!然而,对于曼哈顿距离的特殊情况,有一个有效的精确解。