Algorithm 获取非冲突事件计划的所有排列

Algorithm 获取非冲突事件计划的所有排列,algorithm,big-o,time-complexity,Algorithm,Big O,Time Complexity,我试图从可用课程列表中创建一组课程时间表,我希望能够从可用课程列表中找到所有可能(和有效)的时间表 我知道看到的活动选择问题/事件调度问题,但我不知道如何修改这些算法,为我提供一套完整的时间表,而不仅仅是一个完整的时间表 更简单地说,如何修改活动选择问题,以给出一组所有可能的非冲突事件计划 我还应该注意到,我相信解决这个问题的方法可能是在O(n^n)时间内,因此,如果有人对具有较低渐近运行时间的完整调度问题的解决方案有建议,请分享想法 我知道,这种方法是递归回溯的一种变体,经过一些修改,但我似

我试图从可用课程列表中创建一组课程时间表,我希望能够从可用课程列表中找到所有可能(和有效)的时间表

我知道看到的活动选择问题/事件调度问题,但我不知道如何修改这些算法,为我提供一套完整的时间表,而不仅仅是一个完整的时间表

更简单地说,如何修改活动选择问题,以给出一组所有可能的非冲突事件计划


我还应该注意到,我相信解决这个问题的方法可能是在O(n^n)时间内,因此,如果有人对具有较低渐近运行时间的完整调度问题的解决方案有建议,请分享想法


我知道,这种方法是递归回溯的一种变体,经过一些修改,但我似乎在文献中找不到任何关于它的内容。

我会尝试根据开始时间对您的所有活动进行排序。拿第一个,假设它在日程表上。然后继续浏览列表,从第一个类结束后开始的剩余类构造一个时间表。一旦你构建了所有这些,重复,但是从你的日程表中排除第一个类。您的算法将递归地查看包含或排除类所产生的调度结果。不过,您的运行时将是O(2^n)(我不认为您可以在O(n*2)中完成,但我可能错了)。我假设存在专门的算法(用于查找最佳可能的日程安排),因为查找所有可能日程安排的运行时非常糟糕。

那么要构建日程安排集,一旦从类开始完成日程安排,我会将该日程安排添加到集合中并继续递归?在递归的顶层(也就是说,当选择一个类开始时),我将迭代所有的类??递归函数将获取一些参数:一组类,以及最早的时间。第一次调用将拥有所有类的集合,最早的时间将为空。在内部,您将有两种情况:添加第一个可用类,或者不添加。在每种情况下,您的类集都会被修改以删除第一个可用的类(以及在当前最早时间之前启动的任何类)。在包含类的情况下,最早时间设置为该类的结束时间。在另一种情况下,您的最早时间不变。当您未添加任何类时,您已找到一个计划。