Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最大化集合中元素之间的最小差异_Algorithm_Partitioning_Greedy - Fatal编程技术网

Algorithm 最大化集合中元素之间的最小差异

Algorithm 最大化集合中元素之间的最小差异,algorithm,partitioning,greedy,Algorithm,Partitioning,Greedy,我最近想到了这个问题,我想到了一个“本能的”贪婪的解决方案,但我无法证明它的最优性 给定N个整数,V1,V2,…,VN和K集(K

我最近想到了这个问题,我想到了一个“本能的”贪婪的解决方案,但我无法证明它的最优性

给定N个整数,V1,V2,…,VN和K集(K 您需要找到一种将整数划分为多个集合的方法,以便使同一集合中任意两个元素之间的最小差异最大化

例如,当整数是1、5、6、8、8,并且有2个集合时,分割整数的最佳方法是

{1,6,8}

{5,8}

所以最小的差值在6和8之间,也就是2

例如,这种安排不是唯一的

{1,5,8}

{6,8}

也给出了最小差值2

我在想,如果我能用贪婪算法来解决这个问题

我会先排序,然后把所有的V1,V1+K,V1+2K。。。加在一起,然后是所有的V2,V2+K,V2+2K。。。一起,等等

有没有证据证明这个解决方案是最优性的,或者有一个反例证明它不起作用


谢谢。

是的,这是最好的。我们将显示,如果使用您的过程出现差异D,那么对于任何数字排列,在同一集中有一对数字,它们的差异最大为D

为了证明这一点,考虑将分类数逐个加在K集上。让我们把排序后的数字称为x[i]。假设我们将x[n]加到其中一个集合中。该集合中的最大值是x[n-k],对于某些D,x[n]-x[n-k]=D

现在,集合x[n-k],x[n-k+1],…,x[n]是k+1个数的集合,所有这些数彼此之间最多相差D(对于x[n]-x[n-k]=D)

根据鸽子洞原理,无论您如何排列,这些k+1数字中的两个必须落在同一组中,因此最大最小距离必须最多为D

这证明,如果在您的过程中出现距离D,则可达到的最大最小距离最多为D


让D_min是使用您的过程的同一集合中两个数字之间的最小差值。然后我们证明了,可以达到的最大最小距离是,例如,在1,2,3,101,102,103和3个集合中,我们可以如下划分:{1,101},{2,102},{3,103},所以答案是100。