最小化最大距离,一维阵列

时间:2020-06-18 22:20:28

标签: algorithm dynamic-programming

问题:

给定一组长度为n(已排序)的数字,每个数字都是一维线“城市”中房屋的位置。

给定数字k <= n,您需要在1D城市上放置k个“超级市场”。

对于A中的每个元素,最小距离定义为A与超市之间的最小距离:| a-c |。

城市的成本定义为所有最小距离中的最大值。

您需要找到给定长度为n且k <= n的A的最小(最优)成本。

我找不到此问题的解决方案。解决方案应使用动态编程。我正在考虑如何编写递归公式,我想我已经有了基本案例:

如果k = n,那么显然结果将为0,因为您可以将每个超级市场都放置在城市中

如果k = 1,我认为解决方案应该是:(A [n]-A [1])/ 2。

但是我无法提出实际的公式(以及整个实际的动态程序)。另外,我似乎找不到该答案的“标题”,也没有在线找到该确切答案的其他示例。

2 个答案:

答案 0 :(得分:2)

要最小化与k个超市的最大距离,请将房屋分成连续的组,以便最小化每个组中起始和结束房屋之间的最大距离。然后,您只需在每个小组的中间放置一家超市。

以这种方式解决问题可以简化动态编程,因为它消除了超市位置的连续变量。

答案 1 :(得分:0)

我想出了这个递归函数来解决这个问题:

  • 如果看台多于房屋,则答案为0
  • 如果只有一个支架,那么我们将其放置在边缘之间的中间

Othwise:

对于从i到j的所有索引,我们计算它们之间的最大值,然后计算最小值。

enter image description here