最小化最大距离,一维数组

Posted

技术标签:

【中文标题】最小化最大距离,一维数组【英文标题】:Minimize the max distance, 1D array 【发布时间】:2020-10-09 02:51:37 【问题描述】:

问题:

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

给定一个数字 k

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

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

您需要找出长度为 n 且 k

我找不到这个问题的解决方案。解决方案应使用动态规划。我正在考虑如何编写递归公式,并且我想我已经提出了基本案例:

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

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

但我想不出实际的公式(以及整个实际的动态程序)。另外,我似乎找不到这个答案的“标题”,我没有在网上找到这个确切答案的任何其他例子。

【问题讨论】:

邮箱是什么意思?我相信你指的是超市?超市可以在 1D 线上的任何地方出现 - 您是需要放置它们以获得最佳成本的人。 【参考方案1】:

为了最小化与 k 个超市的最大距离,您将房屋分成连续的组,以便最小化每组中起始房屋和结束房屋之间的最大距离。然后你就在每组中间放一个超市。

这样解决问题使得动态规划更容易,因为它去除了超市位置的连续变量。

【讨论】:

谢谢!我明白你在说什么,但我不知道如何把它变成一个递归函数。 令 SOLUTION(n,k) 成为给定 k 和前 n 个房屋的解决方案。如果您对所有 x 嗨,我提出了一个我认为可行的递归函数。我用一些输入检查了它,它起作用了,你怎么看?这是所有的工作和非常高的复杂性。你认为我能以某种方式改进它吗? SOLUTION(n,k) = min_for_all_i【参考方案2】:

我想出了这个问题的递归函数:

如果展位多于房屋,则答案为 0 如果只有一个支架,那么我们将它放在边缘之间的中间

否则:

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

【讨论】:

欢迎来到 SO。您的答案可能很有用,但前提是您对其添加一些解释

以上是关于最小化最大距离,一维数组的主要内容,如果未能解决你的问题,请参考以下文章

找出一维数组中最大最小的数,数组在内存中的存储地址

java编程:计算一个一维数组中的最大值和最小值及其差值。

编程求出一个一维int型数组的元素最大值、最小值、平均值和所有元素之和

输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

vb,编写过程求一维数组中的最大值及其在数组中的位置(最好能把程序写下来)

C语言中怎样用指针找出一维数组中的最大值和最小值并输出它们的下标