基于空闲时间的分组制作算法

时间:2015-07-01 22:47:35

标签: algorithm date

我正在尝试提出一种算法,该算法可以根据一组人在多项式时间内获得的最大空闲时间来制作组,但我相信这个问题的解决方案可能是NP。

问题如下:

我们将一周划分为1小时的时段,用户无论是空闲还是忙碌都可以为每个插槽放下一个小时。我们假设我们从30位用户那里收集了这些信息。我们还假设用户%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点

周日下午5点至7点,周一下午7点至9点

周日下午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组,让它们为这个原因共同努力。我们希望小组成员尽可能多地相互拥抱,因此我们希望将他们分成具有相似空闲时间的小组。

非常感谢,如果这是一个显而易见的问题,或者需要进一步澄清,请告诉我。

1 个答案:

答案 0 :(得分:0)

初看起来,它似乎是一个集合覆盖问题,其中一个子集是共享一个时隙的人数,而通用集将是所有人。

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

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