拆分组尽可能均匀

时间:2014-03-31 13:33:22

标签: algorithm grouping

我有n组。每组中的项目数量可以说是c1,...,cn。我需要将它分成相同大小的k个新组(大小偏差+/- d%),以便我可以最小化每个新组中的旧组数,即min [sum(c in each k)]。

你知道怎么样?也许一些标准算法?抱歉模糊的问题。我很乐意回答有关细节的任何问题。

提前致谢!

1 个答案:

答案 0 :(得分:0)

让总人数为m。如果原始组的大小大致相同,则此简单程序应大致最小化任何新组中同组老组的最大数量:

  • 如果m / k是分数,那么一些新组将需要比其余组多1个人。设e = m - roundDown(m / k)* k。将有1个更大的新组,我们将(任意)首先选择。
  • 安排人员,以便旧组形成行,并且行是"左对齐"。行的顺序以及每行中的人员并不重要。
  • 通过从左上角开始并沿最左边的列向下添加人员到第一个新组。如果你到了最低点但你仍然没有为这个新组选择roundDown(m / k)+1人,继续在第二列的顶部,等等。如果你到了一个"洞& #34; (因为此列位置的行已在左侧某处完成),只需继续向下。基本上这意味着来自同一个旧组(行)的任何两个人进入相同的新组被选中尽可能远。
    • 对前e个新组重复此操作。
    • 对于其余的k-e新组,请执行相同操作,但只为每个组选择roundDown(m / k)。