鉴于我有这个 O(n!) 调度程序问题:
- 我想在 5 天的工作周内安排 10 个不同持续时间的任务
- 每天有 8 个工作小时,分为 15 分钟。插槽(1 天 = 8 小时 = 32 个插槽)
- 这些任务在“允许的日期和时间范围”方面有不同的要求(例如,一项任务可能只允许在星期四上午 8 点至上午 9 点之间进行,另一项仅允许在周一、周二和周三上午 10 点至上午 11 点之间进行)
要求的结果: 应该有尽可能多的“连续空闲槽”可用于以后分配更多/其他任务
当前解决方案: 我尝试通过 BFS/DFS 解决方案组合所有可能的插槽,然后找到没有重叠任务和“最大空闲插槽块”的最佳组合。由于 O(n!) 的复杂性,这个解决方案在性能和/或内存方面会扼杀我。
问题: 在有限的时间内解决这个问题,计算机科学必须提供的最“合理”的方法是什么(或者也许你以前解决过这样的问题)。