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

时间:2015-03-02 00:12:14

标签: algorithm partitioning greedy

我最近想到了这个问题,我想到了一个本能的"贪婪的解决方案,但我不能证明它的最优性。

您将获得 N 整数, V 1 V 2 , ..., V N K 集( K < N

您需要找到一种将整数划分为集合的方法,以便最大化同一集合中任意两个元素之间的最小差异。

例如,当整数为1,5,6,8,8并且你有2组时,分割整数的最佳方法是

{1,6,8}

{5,8}

所以最小差异在6到8之间,即2。

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

{1,5,8}

{6,8}

同样给出最小差值2。

我在想,如果我可以使用贪心算法来解决这个问题。

我先排序,然后把所有 V 1 V 1 + K ,< em> V 1 + 2K ...在一起,然后所有 V 2 V 2 + K V 2 + 2K ...在一起等等。

是否有证据证明此解决方案的最优性,或者这样做无效的反例?

感谢。

1 个答案:

答案 0 :(得分:2)

是的,这是最佳的。我们将展示如果使用您的过程出现差异D,那么对于任何数字排列,同一组中的一对数字最多相差D。

为了证明这一点,请考虑将已排序的数字逐一添加到K集中。让我们调用排序的数字x [i]。假设我们将x [n]添加到其中一个集合中。该集合中的最大值是x [n-k],对于某些D,x [n] -x [n-k] = D.

现在,集合x [nk],x [n-k + 1],...,x [n]是一组k + 1个数字,所有这些数字彼此相差至多D(对于x [n] -x [nk] = D)。

根据鸽子洞原则,无论你如何排列,这些k + 1个数中的两个必须落在同一个集合中,因此最大最小距离必须至多为D.

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

设D_min是使用您的过程在同一组中两个数字之间的最小差异。然后我们已经证明可达到的最大最小距离是&lt; = D_min,但也是D_min <=最大最小距离(因为D_min是最小距离),这表明D_min 最大最小距离