【发布时间】:2015-09-19 07:07:02
【问题描述】:
我正在尝试提出一种算法,该算法可以根据一组人在多项式时间内拥有的最大空闲时间来分组,但我相信这个问题的解决方案可能是 NP。
问题如下:
我们将一周分为 1 个小时的时段,用户可以在每个时段放下,无论他们是空闲还是忙碌。假设我们从 30 个用户那里收集这些信息。我们还假设 users%group_size = 0
第一:
是否有可能将这些人分成大小为 G 的组,以便每个大小为 G 的组中的每个成员都有一个相互重叠的空闲时间段?
是否有可能将这些人分成大小为 G 的组,从而得出一个最佳解决方案,即在所有组中具有最大总重叠空闲时隙?
例如,如果我们有一组 6 人,有以下空闲时间:
A:周日下午 1 点至下午 3 点和周一下午 1 点至下午 3 点
B:周日下午 2 点至下午 3 点和周一下午 1 点至下午 3 点
C:周日下午 1 点至下午 3 点和周一晚上 7 点至晚上 9 点
D:周日下午 6 点至晚上 7 点和周一晚上 7 点至晚上 9 点
E:周日下午 5 点至晚上 7 点和周一晚上 7 点至晚上 9 点
F:周日下午 6 点至晚上 7 点和周一下午 1 点至下午 3 点
该算法将确定 A、B、F 将是一组,C、D、E 将是另一组,因为组之间最多有两个小时的空闲时间重叠。这与 A、B、C 和 D、E、F 相反,后者仅包含组中每个成员的 1 个重叠时隙。因此,这是所有组中重叠最多的最优解。
我意识到这个问题可能与 Hopcroft-Karp 算法有关,但需要大量修改才能完成这项任务。他们的另一种算法是否与 Hopcroft-Karp 算法更接近于解决方案?这个解能在多项式时间内实现吗?
背景:
我们有一群人(30-50 岁)想为某项事业做志愿者,他们在一周内只有特定的时间有空。我们希望将他们分成 3 到 5 人一组,并让他们为此而共同努力。我们希望小组成员之间有尽可能多的时间,因此我们希望将他们分成小组,让他们有相似的空闲时间。
非常感谢,如果这是一个明显的问题或是否需要进一步澄清,请告诉我。
【问题讨论】:
-
这是一个非常吸引人的问题,但你认为在 MathOverflow 上问会更好吗?然后,您可以使用那里的答案在此处提出特定于实现的问题。笔记;我知道并非所有 SO 问题都与实现有关。
-
我从未听说过 MathOverflow。我会检查它并把它也放在那里。谢谢!
-
上述问题是否可以将这些人分成大小为 G 的组,以便每个大小为 G 的组中的每个成员都有一个相互重叠的空闲时间段?意味着组的所有成员都需要有相同的空闲时间段?我想这会更有意义,但是当我第一次阅读您的问题时,听起来像成对重叠的时隙就足够了。
-
是的,该组的所有成员都需要有相同的空闲时间段。