所以我正在阅读我的笔记,但我并没有真正理解这一部分:
将f,s定义为间隔的开始和结束时间。 按完成时间排序所有间隔。 因此,假设我们有一组间隔I_1,...,I_n并定义pred [i] =最大索引j,使得f_j< = s_i。 (所以基本上是在i之前的下一个最接近的间隔,它不会重叠i。)
现在我们要解决n中所有I_i的所有pred [i]。为什么这个theta的运行时间(n log n)?我认为,在最坏的情况下,所有的I_1,......,I_(i-1)都与I_i重叠;因此需要进行n - 1次比较,然后进行n - 2次比较,等等。最好的情况是没有间隔重叠,而pred(i)对每个间隔进行1次比较。我不确定为什么“排序和计算pred [i] values”的运行时是theta(n logn)。
答案 0 :(得分:0)
你命名的条件,max j使得f [j]< s [i],不是重叠检查。
相反,它是在间隔i完成之前开始的最后一个间隔
(它们可能会或可能不会实际重叠)。我想你可以得到间隔
按开始时间排序,即theta(nlogn),然后使用二进制搜索
找到f [j]为每个s [i](也是theta(nlog n))
P.S by theta我的意思是平均情况,而不是你提到的最坏情况。