给定一个由n个整数段组成的向量,我正在寻找一种O(n log n)算法来计算包含最多其他段的段。实际上,我只对这些段的数量感兴趣。
我尝试了各种变化的区间树和线段树,但都不相关。真正的问题在于部分顺序。如果顺序是总的,那么通过直接计算包含树来解决问题就容易得多。
例如:
我们可以显示顺序图(不显示传递弧):
我尝试了各种变化的区间树和线段树,但都不相关。真正的问题在于部分顺序。如果顺序是总的,那么通过直接计算包含树来解决问题就容易得多。
例如:
a = [4;11] b = [2;7] c = [5;8] d = [6;7] e = [3;9] f = [1;10] g = [10;42]
在这里,我们有f包含e、c、b和d,而d是最大的。当然,g要长得多,但不包含任何其他段,所以这不是最大段的问题。我们可以显示顺序图(不显示传递弧):
f -----> b ---> d
\-->e--->c-/
a-/
g
对我来说主要问题在于,在处理段时无法排除某些子段,因为有时会出现未包含在f中的子段,从而使a成为最大的段。
[4;11]
被认为包含在[1;10]
中,但[10;42]
却不包含在[4;11]
中? - Vaughn Cato