【问题标题】:Group Maker Algorithm based on free time avaliable基于空闲时间的 Group Maker 算法
【发布时间】: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 的组中的每个成员都有一个相互重叠的空闲时间段?意味着组的所有成员都需要有相同的空闲时间段?我想这会更有意义,但是当我第一次阅读您的问题时,听起来像成对重叠的时隙就足够了。
  • 是的,该组的所有成员都需要有相同的空闲时间段。

标签: algorithm date


【解决方案1】:

乍一看,这似乎是一个集合覆盖问题,其中一个子集是共享一个时隙的人数,而全集是所有人。

U = {p0, p1, p2 ..... , p29}  // Number of persons.
S = {S0, S1, S2, ....... S23} // number of 1 hour slots.

我仍然不确定如何使用 G(理想组的大小)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多