Algorithm 基本算法证明

Algorithm 基本算法证明,algorithm,language-agnostic,Algorithm,Language Agnostic,我有一个数字序列,例如:170、205、225、190、260、130、225、160,我必须将它们分成具有固定数量元素的集合,以便集合中元素之间的最大差异最小化 我保证,如果我需要将元素拆分为K元素集,那么元素的全局数量等于Z*K 对于K=4的示例,可以通过以下方式执行最佳拆分: (1):130 160 170 190(最大差值等于60) (2):205 225 260(最大差值等于55) 因此,这种情况下的全局最大差值等于60 现在,问题是:我的假设是我可以对初始数据进行排序,并从一开始就

我有一个数字序列,例如:
170、205、225、190、260、130、225、160
,我必须将它们分成具有固定数量元素的集合,以便集合中元素之间的最大差异最小化

我保证,如果我需要将元素拆分为
K
元素集,那么元素的全局数量等于
Z*K

对于
K=4
的示例,可以通过以下方式执行最佳拆分:

(1):130 160 170 190
(最大差值等于60)

(2):205 225 260
(最大差值等于55)

因此,这种情况下的全局最大差值等于60



现在,问题是:我的假设是我可以对初始数据进行排序,并从一开始就将其分成偶数部分吗?如果这是正确的,我如何证明它?如果不是,我应该使用哪种方法来解决这个问题?

如果对初始序列进行排序,则相邻的数字必须具有最小的差异

此外,序列开头和结尾的元素必须具有最大的差异

因此,包含最后一个元素和第一个元素的序列的任何“切割”都不能成为解决方案的一部分,因为它包含的差异不是最小的

因此,分割必须通过从一开始就将数字序列分成偶数部分来完成


在我看来,你的方法是正确的,但我想不出更正式的证据来证明这一点

自然地,通过对数字进行排序,您将获得成对数字之间的最小差异。您可以通过简单地拆分已排序的数字来获得差异最小的集合

在某些情况下,您可以在不增加每个集合的最大值的情况下在集合之间切换数字,因此可以有多种方法将数字划分为具有相同最大差异的集合。但是,在不增加另一个集合的最大值的情况下,不能在集合之间切换数字以减少任一集合的最大值

例如,如果设置了
1,3,4,5
6,7,8,10
,则可以切换
5
6
,而不增加两组的最大差异


如果你想要最小的平均值,那么你可以牺牲一组中的最大差异来减少另一组中的差异。

假设你的数字量总是可以精确地除以K(所以不是一组4中的13个数字),这是正确的

显然,通过排序,可以得到尽可能接近的最相似的数字。问题是,如果将数字移动到具有更接近值的集合中最差位置的值,是否会使最大差异变小

答案是否定的。排序时,数字左边的值只有相等或更低的值,移动到左边的数字将被更低的值包围。在造成最大差异的两个数字中,至少有一个会得到更差的搭档,这意味着你的最大距离会更高。右边的数字越大,效果也一样

Sorted:
[lowest, low, low, x] distance1 = x-lowest
[y, high, high, highest] distance2 = highest-y

Swapped:
[lowest, low, low, y] distance3 = y-lowest
[x, high, high, highest] distance4 = highest-x
因为xdistance1和distance4>distance2意味着情况变得更糟

如果在此处放置更高的值,其工作方式相同

不管一个数字有多差,把另一个数字放在那个位置会让他们更差

另一个选项是将整个子集向左移动一个空间:

[lowest, low, low, y]
[high, high, highest, x]
但这实际上与交换的结果相同

这就是它在2台电视机上的工作原理

共有三套:

[lowest, low, low, x]
[lowM, lowM, highM, highM]
[highM, y, high, highest]
交换x和y与前面的相同。即使x与左下角的高点非常相似,甚至相等(如果中间的低点和高点实际上相等),y仍然高于x,使得最低点的差值更大,而x离最高点更远

向前移动一组数字:

[lowest, low, lowM, lowM]
[highM, highM, highM, y]
[x, highM, high, highest];
也许最大的区别是highM和highest之间的距离,现在这个距离已经消除了。但由于你只能通过在那个里放置一个更低的值来使它远离最高点,所以你总是让它变得更糟。最高距离highM现在是hight-x,x 相反,它也同样有效。如果有下一组的话,highM可以换成更接近最高的数字,但这会让highM换成更高的数字,造成更大的差异

是的,对数据进行排序,然后将其等分,总是会得到最小的最大差异,因为更改排序集总是会得到更糟糕的结果


注意:如果数字不能被K除,那么它会变得更加复杂,你必须找出最差的一组,看看你是否可以将其最高或最低的数字移到下一个或上一个集合,而不会使另一个集合产生更大的差异。您只能将低位数字与高位数字交换的规则被删除,因为您可以将低位数字与高位数字交换,因此证明这一点是一个全新的层面。

我想知道这是否有意义,只需说,我在示例中假设的是正确的吗,
K=4
被给出了,而你却忘了提到它?@quasiverse是的,这是正确的。@hamstergene这个例子是针对
K=4
,我更新了这个问题。不过,当项目总数
n
不能被
K
平均整除时,事情变得有趣了。使用您的数据和设置
K==3
,您的最佳排列是
[130160]、[170190205]、[225225260]
。当
n mod k!=0
。请确保您的示例中的最大值会增加切换时的最大差值:切换前的最大差值为10-6=4,切换后的最大差值为10-5=5。@fl