【发布时间】:2015-05-31 19:48:13
【问题描述】:
我需要帮助来设计一种算法,该算法会根据 N 个学生的偏好(一组偏好,两者都有或没有)将 N 个学生分成两组,以便我们尽可能地匹配他们的偏好,并将他们平均分为两组。我应该使用动态编程得到 O(N^3) 。
所以我认为算法应该遍历 N/2 个学生并选择他们的偏好,剩下的就完成了。现在取决于选择这N / 2个学生的顺序,但我不知道这是否是一个好方法。如果有人可以给我一个提示,谢谢。
【问题讨论】:
-
我相信有一个 O(N) 贪心算法可以解决这个问题:根据学生的偏好将学生分配到一个小组中(如果他们偏好其中一个,但不是两者都有或两者都没有),直到您的小组空间不足,或者您有偏好的学生人数不足。然后将其他所有人分配到剩下的任何空间。我声称这给出了 O(N) 时间和空间的最优解。如果你必须使用动态规划,你必须,我想,但 O(N^3) 实在是太过分了。
标签: algorithm dynamic-programming