在每个组的总和> =给定值的约束下,将一组非负值分成尽可能多的组

时间:2014-12-24 06:27:01

标签: arrays algorithm

例如,如果我们有一个数组[4,1,2,5,2,3]且最小组和为5,

然后以下分组符合要求:

[1,2,4],[2,3],[5]

我认为这是我们能做的最好的事情,也就是说,我们不能在不违反约束的情况下将数组分成4组或更多组。

我能想到的解决这个问题的方法是首先对数组进行排序,然后从最大值处理数组。

  • 如果它大于等于最小值,则它已经构成一个组。
  • 如果小于最小值,请先将其注册到临时组,然后查看已排序数组的另一端。从尚未分组的最小值开始,我们重复将值添加到组中,直到组和等于或大于最小值。
  • 重复上述两个步骤,直到不再消耗任何元素,即所有剩余元素的总和小于最小值。最后一步,我们将所有这些元素添加到任何现有组中。

再次以前一个数组为例。我们首先将其分为[1,2,2,3,4,5]:

  1. 5可以拆分为一个单独的组。
  2. 4小于5,因此我们将1,最小的未组合值添加到其中并形成一个新组。
  3. 同样,第3组和第2组。
  4. 2是唯一剩下的元素。我们可以把它放到任何现有的组中。
  5. 我不太确定这种看似贪婪的方法是否有效,但我无法想象一个反面的例子。不确定性在于第3步。我们是否有可能以某种方式从现有组中提取一个或多个元素,并将它们与剩余的未组合值组合以创建另一个组?

    我想知道我的解决方案是否正确或任何其他解决方案是否有效(理想情况下是多项式时间)。

0 个答案:

没有答案