Java如何解决日历安排问题

时间:2014-10-13 07:40:27

标签: java algorithm calendar

我觉得这是一个古老而众所周知的问题,但在搜索一段时间后我无法找到任何内容,我可能错过了一个关键字。任何人都可以给我一些帮助/指出这个问题吗?

我们想要创建一个日程安排,我们每年有一个人在每个月工作。有12个人,每个人在他们想要工作的一年中挑选和排列他们3个月的选择。我们必须创建最佳的时间表,每个人被分配到一年中的不同月份。例如,

                  david         greg        bob
first choice       dec          dec         mar
second choice      feb          march        may
third choice      april         feb          apr

忽略其他9个人,这3个人的最佳时间表将是:大卫在feb,greg在12月,bob在3月。

我们可以使用积分系统来决定订单:

每位志愿者分配他或她的第一选择<3>

每位志愿者分配他或她的第二选择2分

每个志愿者分配他或她的第三选择

1分

每位未分配任何选择的志愿者0分

这也必须使用未排序的列表来完成。

感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

我想说这是稳定婚姻问题的一个版本:http://en.wikipedia.org/wiki/Stable_marriage_problem

编辑: 不,@ keuleJ是对的。我认为分配问题是对这个问题的正确处理。见下面的评论。

也许我稍后会回来实现它。

答案 1 :(得分:0)

您可能想要针对此问题尝试动态编程和位掩码,因为我们只有12个人,因此我们可以使用12位来表示这些人的状态(位{{1}如果ith人尚未被分配任何月份,则为0,反之亦然。“

所以我们尝试每月分配(从0到11)。 Java代码:

ith

时间复杂度为2 ^ 12 * 12 * 12次操作,不到一百万次操作。