Algorithm 非重叠区间所有最大子集的输出敏感快速枚举

Algorithm 非重叠区间所有最大子集的输出敏感快速枚举,algorithm,Algorithm,因此,给定一组区间,在按区间右端点排序后,可以在线性时间内找到具有最大区间数的非重叠区间子集。然而,如果我们想要输出具有最大数量的非重叠区间的所有解子集,该怎么办?运行时间应该对输出敏感,因为对于n个区间,最优解的数量可能是指数的,例如高达O(sqrt(n)^sqrt(n))。因此,如果存在S个最优解,它们是否可以在时间上以与S的大小成线性比例的方式进行枚举(也可能是多项式依赖于n)?对区间图中的最大独立集运行标准动态规划算法。这将告诉您最大数量是多少。修改此算法以跟踪获得所述最大数量的方法的数

因此,给定一组区间,在按区间右端点排序后,可以在线性时间内找到具有最大区间数的非重叠区间子集。然而,如果我们想要输出具有最大数量的非重叠区间的所有解子集,该怎么办?运行时间应该对输出敏感,因为对于n个区间,最优解的数量可能是指数的,例如高达O(sqrt(n)^sqrt(n))。因此,如果存在S个最优解,它们是否可以在时间上以与S的大小成线性比例的方式进行枚举(也可能是多项式依赖于n)?

对区间图中的最大独立集运行标准动态规划算法。这将告诉您最大数量是多少。修改此算法以跟踪获得所述最大数量的方法的数量是很简单的

对于每个间隔I,编译一个不与I重叠的所有后续间隔的列表,从中可以形成一个独立的最大大小集

现在,使用上一段中编译的信息,对所有独立集运行一个简单的递归枚举


如果最大独立集的大小为h,则需要O(hS+n^2)时间;n^2代表DP,hS代表递归和输出。

这是否更适合?@LasseV.Karlsen我熟悉贪婪算法,但不熟悉动态规划算法。我有一种感觉,有一个相当简单的答案,虽然像由tmpyklebu张贴的答案。当我觉得答案“简单”(例如,只需要一些基本背景)时,我会把问题放在这里,因为我觉得这是在浪费cs.stackexchange.com的时间。其他人在这里张贴面试问题。我也这么看我的帖子。也许我需要更好地理解不同网站的意图,但这里有一个算法标签。@LasseV.Karlsen:这里也适用;这是一个实用的、可回答的编程问题。对不起,我不是说它必须在cs上,这是一个问题。老实说,整个问题都是我无法回答的,但你似乎没有“实际”的编程问题。但你是对的,算法问题在这两个网站上都有。我知道现在你已经接受了给出的答案,我的评论只是关于如何增加你获得可用答案的机会,但这是所有的问题:)@LasseV.Karlsen:是的,有一个奇怪的子集,所以用户认为该网站完全是为了调试写得很差的PHP代码或其他东西。我不是故意指责你是其中之一;我只是想先发制人地阻止人们点击“关闭”的潮流,因为在这个问题上没有坏掉的PHP代码。