我正在尝试从可用类列表中创建一组类调度,我希望能够找到可以从可用课程列表中创建的所有可能(和有效)调度的集合。
我知道here和here看到的活动选择问题/事件排序问题,但我不知道如何修改这些算法来给我一套完整的时间表而不仅仅是* a *完整的时间表。
更为简洁的是,如何修改活动选择问题以提供一组所有可能的非冲突事件时间表?
我还应该注意,我认为解决这个问题的方法可能是O(n ^ n)时间,所以如果有人建议解决一个具有较低渐近运行时间的完整调度问题,请分享想法。
我知道这种方法是一种带有一些修改的递归回溯的变体,但我似乎无法在文献中找到任何关于它的内容。
答案 0 :(得分:3)
我会根据开始时间尝试订购所有活动。拿第一个,假设它在时间表中。然后继续完成列表并从第一个结束后开始的剩余类构建一个计划。一旦你构建了所有这些,重复,但从你的日程安排中排除第一堂课。您的算法将以递归方式查看包含或排除类的结果。你的运行时间虽然是O(2 ^ n)(我不认为你可以在O(n * 2)中完成它,但我可能错了)。我假设存在专门的算法(用于找到最佳可能的时间表),因为查找所有可能的时间表的运行时非常糟糕。