将M人分成N队,比例有限

时间:2014-12-09 12:15:35

标签: algorithm optimization split

我有以下问题,我需要一个算法。我需要编写一个程序,将M学生(在我的情况下,他们大约是170名学生)分成N队(12支队伍),每支队伍中的学生人数尽可能相同(在我的情况下是14或15名学生)团队),有3个约束。 第一个约束是团队之间的女性/男性比例应该尽可能相等。 第二个约束是团队中优秀/不优秀学生的比例应该尽可能相等。 第二个约束是学生在城市/城市之外生活的比例应尽可能相等。

我不需要找到最佳分割,但分裂得足够好,我没有足够好的定义,也许比例的最大差异可以是输入。

我掌握了学生们需要的所有信息。

感谢!!!

1 个答案:

答案 0 :(得分:1)

首先,这是一个将M组学生分成N队的一般程序:

  1. 以任何方式将RoundDown(M / N)学生分配给N队中的每一队。
  2. 如果N不能被M整除,则N - (M%N)<还有N名“额外”学生。将每个人分配给不同的团队。
  3. 完成此操作后,团队规模最多相差1(有些团队没有额外的学生,而有些团队可能只有1名额外的学生)。请注意,如果我们有几个单独的学生组,那么我们可以连续几次执行此过程以建立N个团队,并且提供我们总是将任何“额外”学生添加到最小的团队,我们将始终保持团队规模最多相差1的属性。

    您有3个单独的标准,因此每个学生都是由他们定义的2 ^ 3 = 8个组中的一个(例如,男性,非优秀,城市学生组)。所以你可以简单地执行上述程序8次,每组一次。

    这将导致:

    • 团队规模最多相差1个。
    • 任何两个团队中男性(或女性,或优秀学生等)的数量最多相差4个,因为有4个群体包括男性(男性不是男性,并且谁住在/不住在城市里,我们知道,对于这些团体中的每一个,团队中该团体的学生人数最多相差1个。

    在实践中,任何类别的人数不太可能在团队之间的差异达到4。您可以通过小心哪些最小的团队首先获得额外学生来进一步缓解这种情况 - 例如如果您有3名额外的男性,非优秀的城市学生,并且有7个小团队,您可以将他们放入拥有最少男性(或非优秀学生,或您想要优先考虑的任何标准)的3个团队中。如果一些团体中的额外学生多于小团队,则同样适用 - 如果一些团队中有4个小团队和9个额外学生,前4个学生必须去小团队,但剩下的5个学生可以去无论哪个或剩下的8个团队都给出了最好的性别平衡。