一位朋友给了我一个难题,他说它可以在O(n^3)时间之内得到解决。
给定一组n个任务,每个任务都有开始时间和结束时间(可能会有重叠),找到最小的子集,使得对于每个任务,这个子集要么包含该任务,要么包含与该任务重叠的任务。
我相信最优解是选择具有最多未标记重叠的工作,将其添加到解集中,然后标记它及其重叠。重复这个过程直到所有工作都被标记为止。
找出哪个工作具有最多未标记重叠者是一个简单的邻接矩阵(O(n^2))问题,但每次选择一个工作后都需要重新进行更新标记,以便更新标记,这使得复杂度达到了O(n^3)。
是否有更好的解决方案?