Algorithm 了解Cormen邮局位置解决方案

Algorithm 了解Cormen邮局位置解决方案,algorithm,median,Algorithm,Median,Cormen的《算法简介》一书在第9章中有一个问题邮局选址问题 我们得到了n个点p1,p2,…pn,权重为w1,w2,…wn。找到一个点p(不一定是其中一个输入点),该点使总和wi*d(pi,p)最小化,其中d(a,b)=点a,b之间的距离 看看这个问题的解决方案,我知道加权中值将是这个问题的最佳解决方案 但我对实际的编码部分和用法有一些基本的疑问 如果所有元素的权重相等,那么为了找到加权中值,我们找到所有权重之和小于1/2的点。如何在这里扩展它 假设有一个真实的场景,比如说在不同的房子里投递

Cormen的《算法简介》一书在第9章中有一个问题邮局选址问题

我们得到了n个点p1,p2,…pn,权重为w1,w2,…wn。找到一个点p(不一定是其中一个输入点),该点使总和wi*d(pi,p)最小化,其中d(a,b)=点a,b之间的距离

看看这个问题的解决方案,我知道加权中值将是这个问题的最佳解决方案

但我对实际的编码部分和用法有一些基本的疑问

  • 如果所有元素的权重相等,那么为了找到加权中值,我们找到所有权重之和小于1/2的点。如何在这里扩展它

  • 假设有一个真实的场景,比如说在不同的房子里投递的信件数量作为重量,我们希望通过找到邮局的位置、给定的x坐标(假设所有的房子都在一个单一的维度中)来最小化要走的距离,我们实际上会怎么做呢

有人能帮我澄清我的疑问,理解这个问题吗

编辑:


我也在想一个非常类似的问题:有一个矩形网格(2d),不同地点的人数不同,所有人都希望在一个点上相遇(应该肯定有整数坐标),那么上述问题有什么区别,我们如何解决它?

编辑:这个答案是错误的,见评论

你要找的就是所谓的(加权中值是一维的重心)

我没听清楚你的第一个问题,你能告诉我细节吗

例如,我们将计算与此职位相关的每个办公室的信件数量加权的平均职位。这将给我们:x_中心=总和(x_i*w_i)/sum(w_i)和y_中心=总和(y_i*w_i)/sum(w_i)


它正确地回答了您的问题吗?

您仍然想要权重总和为1/2的点。选择任何一点,并考虑你是否会更好地移动一个点到左边或一个点从右边到那里。如果向左移动一点,则与左侧所有点的距离将减小一,与右侧所有点的距离将增大一。你的胜负取决于左边和右边的权重之和。如果权重之和不等于1/2,则可以沿着权重大于1/2的方向移动,因此,选择另一个权重不能做得更好的唯一点是权重为1/2的点,或者更准确地说,两侧的权重都不为1/2的点。考虑这种情况:房屋A在x=1,字母=99,房屋B在x=1000,字母=1(不考虑字母作为重量),我们通过使用质心,xz中心=1×99+1000×1/100=10.99得到。结果是总的旅行距离比邮局位于x=1时要长,在这种情况下总的旅行距离为999。有趣的是。。。我正在考虑,但没有直接的答案。重心
g
最小化
和(w_I d(p_I,g)^2)
没有重心的定义,正如我提到的,你定义的是一个最佳距离点,这应该是重心的一个属性,不是定义。事实上,最小平方距离表征更为一般,当你想要在非向量空间设置(即,你不能求和点)中的质心时,它可以作为一个定义。此外,它还有一个简单的物理解释:它是固体总惯性最小的点。无论如何,它与这里所问的(加权中值)有很大不同。它应该是
d(pi,p)
,而不是
d(pi,pj)
,不是吗?是的,很抱歉输入错误。我想你指的是权重总和为(1/2)*(权重总和)的点,对吗?是的。我有这本书的第1版,在似乎是对应的问题10-2中,它在一开始说权重是正数加一。因此,如果权重总和不等于1,则必须通过将所有权重除以总和来对其进行归一化。好的,您还可以对我的问题的进一步编辑发表意见吗?好的-答案已编辑-将答案限制为网格点可能是个问题。感觉应该不会太糟糕,因为问题是凸的,但可能是凸的,除非有聪明的技巧。谢谢你的解释,如果您已经看到了简单加权中值练习的解决方案,请您也解释一下,为什么不简单地找到权重之和为1/2的点,而不是首先找到中值,然后尝试获得权重之和为1/2的点?