Cormen的“算法导论”一书在第9章中有一个问题邮局位置问题。
我们给出n个点p1,p2,... pn,权重为w1,w2,.... wn。找到最小化和wi * d(pi,p)的点p(不一定是输入点之一),其中d(a,b)=点a,b之间的距离。
查看相同的解决方案,我了解 权重中位数 将是此问题的最佳解决方案。
但我对实际的编码部分和用法有一些基本的疑问。
如果所有元素具有相同的权重,那么为了找到加权的中值,我们找到所有权重的总和<1的点。 1/2。如何在这里扩展?
假设有一个真实的场景说明要在各个房屋交付的信件数量作为权重,我们希望通过找到邮局的位置来最小化旅行的距离,给出x坐标(假设全部房子只有一个单一的尺寸),我们将如何实现呢?
有人可以帮助我清除疑虑并理解问题。
编辑:
我也在考虑一个非常相似的问题:有一个矩形网格(2d),不同地方的人数不同,都想在1点见面(肯定有整数坐标),那么差异是什么从上述问题出发,我们将如何解决?
答案 0 :(得分:4)
你仍然想要权重总和为1/2的点。选择任何一点并考虑你是否会更好地将一个点向左移动或从那里向右移动一个点。如果向左移动一个点,则将左侧所有点的距离减少一个,并将右侧所有点的距离增加一个。你输赢是否取决于左边的重量和右边的重量之和。如果权重不总和为1/2,则可以通过向权重> 1的方向移动来做得更好。 1/2,所以通过选择另一个不能做得更好的唯一一点是重量为1/2的点 - 或者更确切地说,两侧的权重都是&lt; = 1 / 2。
对于1/2是正确的答案,权重必须总和为1,所以如果你从权重开始,那么你必须将它们除以字母总数来得到它们的总和。一。当然,除非你必须为每个要交付的信件单独行程,否则这个惩罚函数并没有多大意义,但我假设我们应该忽略它。
修改
对于多个维度,您几乎最终解决了直接最小化距离加权和的问题。维基百科在http://en.wikipedia.org/wiki/Geometric_median中对此进行了描述。您想要考虑权重,但这并不会使问题复杂化。一种方法是http://en.wikipedia.org/wiki/Iteratively_reweighted_least_squares。不幸的是,这并不能保证它找到的解决方案将位于网格点上,或者最接近解决方案的网格点将是最佳网格点。它可能不会太糟糕,但在所有可能的情况下找到最佳网格点可能会更棘手。
答案 1 :(得分:-1)
编辑:这个答案错了,见评论
您正在寻找的是center of mass(TMHO,加权中位数是一维的质心)。
我没有问你第一个问题,你可以详细说明吗。
对于您的示例,我们将计算平均位置,该平均位置由与此职位相关联的每个办公室的字母数加权。这将给我们:x_center = sum(x_i * w_i)/ sum(w_i)和y_center = sum(y_i * w_i)/ sum(w_i)。
它是否正确回答了您的问题?