【问题标题】:Appointment scheduling algorithm预约调度算法
【发布时间】: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!)。

如果有任何反馈和替代解决方案,我将不胜感激。谢谢!

【问题讨论】:

标签: algorithm schedule


【解决方案1】:

我为您准备了一个新算法,该算法实现起来可能相对简单。首先适合所有 90 分钟的会议,如果剩下一些,它们将不适合。现在通过 60 分钟的会议并安排这些会议。如果您还有剩余,请找到 90 分钟会议和 30 分钟窗口(不可能有 60 分钟窗口,否则会议将适合)并将其替换为 60 分钟会议中的 2 个。如果还剩下 60 分钟的会议,则将 2 次连续 90 分钟的会议替换为 3 次 60 分钟的会议。如果还剩下 60 分钟的会议,请将任何 90 分钟的会议替换为 60 分钟的会议。然后去空位安排 30 分钟的会议。如果还有剩余,将 90 分钟的会议替换为 3x 30 分钟。如果还有更多剩余,请更换 60 分钟会议。

根据我从背包问题中了解到的情况,应该有一个多项式解决方案,这似乎很合适,所以如果这可行,...如果 n 是计划中的空闲槽数,则上限为 6 *n^2。它与等待安排的会议数量无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多