将值均匀拆分成组

时间:2010-06-09 19:22:34

标签: algorithm sorting

让我尽力解释一下这种情况。

假设我有3个值

1, 2, 3

我告诉算法将这些值拆分为x列。让我们说x = 2澄清。

算法确定这组值最好按以下方式放入两列。

1st column    2nd column
---------------------------
1             3
2

每列都有一个偶数(总数,而不是文字)值。

现在假设我有以下值

7, 8, 3, 1, 4

我告诉算法我希望将值拆分为3列。该算法现在告诉我以下是最合适的。

1st column    2nd column    3rd column
8             7             3
              1             4

注意列甚至不安静,但它尽可能接近。只要列表尽可能接近即可,只需稍微过一点就可以了。

有人有任何建议吗?知道这样做的好方法吗?

3 个答案:

答案 0 :(得分:3)

我会这样做:

答案 1 :(得分:2)

如果你想要完全相同的值,那么对于列数x = 2,它是经典的Partition Problem,它是NP-Complete,但是有伪多项式解。

更多列(即x> 2),它变为强NP完全。 3-Partition Problem

对于x> 3,我怀疑它仍将是强NP完全。

由于x分区问题可以解决你的问题,它会像上面的问题一样难。

您可能需要一些启发式方法来帮助您。

答案 2 :(得分:2)

我回答了一个类似的问题。

我可以想到一个贪婪的次优解决方案。

  1. 按降序排序数字。 (较小的数字意外减少,以后再处理它们)
  2. 决定您将拥有的套数。对此不太确定
  3. 逐个浏览设置元素并将它们放入具有最低总和的子集中(如果总和相等则为循环法)
  4. 这永远不会给你最佳解决方案。

    对于您的情况,8 7 4 3 1将是订单。你会(幸运的是)得到与你提到的相同的结果。

    8 = 8

    7 1 = 8

    4 3 = 7

    这并不总能为您提供最佳解决方案