【问题标题】:Algorithm : allocation of N railway stations in a M villages which are on a straight line算法:在直线上的M个村庄中分配N个火车站
【发布时间】:2013-01-16 20:03:20
【问题描述】:

我有下一个我很难解决的问题。

我有一条直线,上面有 M 个村庄的列表。我需要在这些村庄中分配 N 个火车站,以便将一个村庄到火车站的平均距离最小化。 示例:

村庄:-----1--------------2--3---------4--5-------- ----6------------7--- 我们有 3 个火车站。

尝试使用动态编程,但做不到。任何人都可以提出解决这个问题的方法吗? (除了尝试所有选项的明显方式)?

【问题讨论】:

  • 算法对不同网站的更好解决方案提出质疑——可能是程序员或数学?
  • 我在考虑最小生成树,其中节点是村庄,一个节点的边缘是村庄到所有其他村庄的距离,然后你只需设置应该选择多少个节点。
  • @ ks6g10 - 这行不通,我会一直选择我们开始的直线上的 MST
  • @kakush M 和 N 的限制是什么?这似乎是编程竞赛中的一个问题,对于此类竞赛,对输入参数的限制通常可以帮助您计算解决方案的预期内存/时间复杂度。
  • @IvayloStrandjev - 唯一的限制是它们是整数。

标签: algorithm optimization dynamic-programming


【解决方案1】:

我假设,对于每个村庄,您只关心从该村庄到特定火车站的距离,而不是所有火车站。因此,如果您可以在每个村庄放置一个火车站,那么即使村庄相隔数千英里,“村庄到火车站的平均距离”也会为零,因此从一个村庄到另一个火车站的距离另一个村庄会很大。

如果您有一组必须使用同一个火车站的村庄,那么该火车站的最佳位置是村庄线的中间位置(如果村庄的数量是奇数)或中间之间的任何位置行中的两个村庄(如果村庄的数量是偶数)。这是因为如果火车站在其他任何地方,将其移向中间位置会缩短与组中大多数村庄的距离,而只会增加与少数村庄的距离。

因此,解决这个问题的一个简单方法是计算出如何将 M 个村庄划分为 N 个相邻的村庄组,每组由一个火车站提供服务,位于中间村庄,或位于两个最中心村庄之间的任何地方组。

这是一个动态规划问题,您沿着村庄线工作,计算村庄 k 将这 k 个村庄分成 j 个组的最佳方式,以及该最佳方式的成本。您可以通过检查每个 i 从最后 i 个村庄创建一个组的成本并加上从前 k - i 个村庄创建 j-1 个组的成本来做到这一点。

如果您真的是指每个村庄和每个火车站之间的平均距离,请注意您可以一次处理一个火车站,因为一个火车站的位置不会影响定位另一个火车站的成本。然后,如果有偶数个村庄,那么您会在中间建有 N 个火车站,或者沿着两个中心村庄之间的地带建造 - 这真的没有意义。

【讨论】:

    猜你喜欢
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多