假设我们有一个房间列表及其容纳人数和会议人数列表。我们希望通过以下方式将每个会议与一个会议室匹配:
我们能否有效地达到时间表?一次通过会很好,有些回溯是可以的,但是我可以开始工作的唯一选择(粗略的算法加上动态地违反规则3)会比我想要的慢。
这个问题并不像看起来那么简单!天真的线性方法至少失败了一个标准:
我们可以从高到低排序每个列表并开始将最大的房间配对到最大的会话,我们会在任何可能的时间提出解决方案,但我们会留下尽可能小的房间而不是最大的。 (考虑在200人,30人和20人的会议室安排10人和15人的会议。)
我们可以将会议列表从高到低排序,然后向下走,试图找到足够大的空间来容纳这个会议。但有时这会导致为更小的会议安排更大的空间。 (考虑在40人和80人的房间安排40人和30人的会议。)
但肯定有更好的方法来解决这个相对简单的问题。
答案 0 :(得分:4)
难道你不能只将两个列表从低到高排序,然后将每个会议放在第一个(即最小的)足够容纳它的房间吗?
据我所知,符合您的所有标准:
根据您的评论进行修改:
我们两次通过。第一个是上面的。在此之后,如果还有任何会议,请按以下步骤操作:
浏览房间列表和从最高到最低的未安排会议列表。
如果当前会议适合当前会议室:将其放入该会议室(将之前在该会议室中的会议添加到未安排的会议列表中(在最低位置,以便维护排序顺序))。移至列表中的下一个会议和会议室。
如果当前会议不适合当前会议室:此会议无法安排。从列表中删除会议并尝试下一次会议(使用同一个会议室)。
重复直到未安排的会议列表为空。