我遇到了这个问题,其中二维网格上有许多房屋(给出了它们的坐标),我们基本上必须找到哪个房屋可以用作会合点,这样每个人的行进距离最小化。让我们假设沿x或y轴的距离占1个单位,与对角线邻居的距离取(例如)1.2个单位。
我真的不能想到一个很好的优化算法。
P.S:不是作业问题。我只是在寻找一种算法(而不是代码),如果可能的话,还有它的证明。
P.S#2:我不是在寻找穷举解决方案。信不信由你,这确实让我感到震惊:)。
答案 0 :(得分:8)
正如已经指出的那样,在曼哈顿距离的情况下,中位数给出了解决方案。从众所周知的事实来看,这是一个明显的结论,即中位数最小化绝对偏差的平均值:
E|X-c| >= E|X-median(X)|
代表任何常量c
。
在这里你可以找到一个离散案例证据的例子:
https://stats.stackexchange.com/questions/7307/mean-and-median-properties/7315#7315
答案 1 :(得分:3)
这可能效率非常低,但是可以在所有房屋中循环,然后循环通过所有其他房屋。 (嵌套for循环)使用distance formula查找2个房屋之间的距离。然后你有每个房子之间的距离。找到哪个房子距离最近的一种快捷方法是将每个人的步行距离加在一起给出给定的房子。步行距离最短的房子是首选的会议区。
答案 2 :(得分:3)
您的距离指标很奇怪。你可以期望在对角线上行进至少应该沿着分量方向行进的距离的sqrt(2)〜= 1.41倍,因为如果沿着对角线沿着对角线行进的是毕达哥拉斯定理,那么这是多远的距离
如果你坚持曼哈顿距离(不允许对角线),那么你想要选择最接近房屋中位数(x)+中位数(y)的房屋。
考虑一维情况,你在一条线上有一堆点,并且你想选择会面地点。为了具体/简单,让我们说有5个房子,没有重复。
考虑当会议地点从中间位置向右偏移时会发生什么。对于每个单位,直到你从左到右通过第4个房子,3个人必须向右走一步,2个人必须向左走一步,所以成本上升1.一旦你通过第四宫,然后4人必须向右迈出一步,一个人不得不向左走一步,所以费用增加3.当你将会场转移到中位数左边。远离中位数总会增加成本。
这个论点可以推广给任意数量的人,无论是否有重复的房屋,甚至是任意数量的维度,只要你不被允许使用对角线。
答案 3 :(得分:3)
我已经被同样的问题困扰了一段时间了。解决方案是早期帖子中给出的明显共识:独立找到中位数(mx,my),然后找到最接近给定N点的点,即会议地点。要了解为什么这实际上是解决方案,您应首先考虑距离。
d = sum(| xi-x |)+ sum(| yi-y |)超过所有1< = i< = N,
在x和y中是独立的。因此,我们可以解决x和y的1-D情况。我将跳过给出^^的解释,因此得出结论:(mx,my)是最好的解决方案如果我们考虑所有可能的点。更大的挑战是证明我们可以从(mx, my)到最近的(xi,yi)使得(xi,yi)是给定点之一,不改变(增加)距离。证据是:
考虑到我们已经对x坐标进行了排序(为了证明)和
X1<X2<...<Xn
。另外Xj<mx<X(j+1)
j = N/2
,现在让我们移动mx
向左迈出一步,即mx' <- mx-1
。
因此d' = |X1-mx+1| + .. + |Xj-mx+1| + |X(j+1)-mx+1| + .. + |Xn-mx+1|
我们知道mx-1将增加N / 2值(对于k> = j + 1并且减小
对于&lt; = j)因此效果是相同的。因此(mx-1,my)给出相同的结果
解。这意味着Xj<mx<X(j+1)
和Yj<my<Y(j+1)
有一个空格
{{1}}距离不变。因此我们可以找到
最接近这一点就是答案。
我忽略了偶数/奇数节点的微妙情况,但我希望当你意识到基本证据时,数学会自行解决。
这是我的第一篇文章,帮助我提高写作技巧。
答案 4 :(得分:1)
您的问题称为最佳会合点搜索。 以下论文给出了一种有效的近似算法 http://www.cse.ust.hk/~wilfred/paper/vldb11.pdf
答案 5 :(得分:0)