我觉得这是一个古老而众所周知的问题,但在搜索一段时间后我无法找到任何内容,我可能错过了一个关键字。任何人都可以给我一些帮助/指出这个问题吗?
我们想要创建一个日程安排,我们每年有一个人在每个月工作。有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分
这也必须使用未排序的列表来完成。
感谢任何帮助!
答案 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次操作,不到一百万次操作。