因此,给定一组间隔,在按照右端点对间隔进行排序后,可以在线性时间内找到具有最大间隔数的非重叠间隔的子集。但是,如果我们想要输出具有最大数量的非重叠间隔的所有解决方案子集,该怎么办?运行时间应该是输出敏感的,因为对于n个间隔,最佳解决方案的数量可以是指数的,例如,高达O(sqrt(n)^ sqrt(n))。因此,如果存在S个最优解,那么它们是否能够在时间上与S的大小成线性比例(也许还有多项式依赖于n)?
答案 0 :(得分:1)
在区间图中运行最大独立集的标准动态编程算法。这会告诉您最大数量是多少。可以直接修改此算法以跟踪获得所述最大数量的方式的数量。
对于每个间隔I,编译一个不重叠的所有后续间隔的列表,您可以从中创建一个独立的最大尺寸集。
现在使用上一段中编译的信息对所有独立集进行简单的递归枚举。
如果最大独立集的大小为h,则需要O(hS + n ^ 2)时间; n ^ 2用于DP,hS用于递归和输出。