【发布时间】:2015-02-13 23:24:43
【问题描述】:
假设您需要为 CEO 安排会议。必须安排尽可能多的会议(计数,而不是持续时间)。
工作日有开始时间和结束时间。
某些时间段不可用(午餐等)
输入是时间列表。持续时间为 30、60 或 90 分钟。
我的方法
将日期表示为布尔数组。索引是时间。每个数组索引代表 30 分钟。所以 day[0] 代表上午 9 点,day[1] 代表上午 9:30。 day[1] = true 表示 9:30 打开,如果为 false,则关闭。
有一个计数器变量来跟踪当前最早的空闲时间。对于每次,遍历会议列表并查看当前空闲时间 + 会议持续时间是否开放。运行时间为 O(N*N)。
缺陷
但是,我的方法不会导致一天中的会议数量尽可能多。例如,我有 120 分钟的空闲时间,以及 90、60 和 60 分钟的潜在会议。我的算法首先迭代到 90 分钟的会议并安排它,但是浪费了 30 分钟的空闲块。最好将两个 60 分钟的会议都安排在那里。
另一个想法
获取总时长不超过 90 分钟的所有潜在会议组合,并跟踪最大会议次数。我相信这必须通过每个空闲块的排列和 O(N*N!) 来完成。所以它的总运行时间是 O(N * N * N!)。
如果有任何反馈和替代解决方案,我将不胜感激。谢谢!
【问题讨论】:
-
一般意义上,这称为knapsack problem或bin-packing problem