编辑:现在我认为这是一种扫描线问题。(请参见底部的更新2)
在这个问题中,我们有N个物体和M个约束条件。(N可以是200k,M可以是100k)。每个物体都是黑色或白色。每个约束条件都是形式为(x,y)的形式,并且意味着在对象x..y的范围内,恰好有一个白色对象;其余的都是黑色。我们想确定最大可能存在的白色对象数量,或者是否无法满足约束条件。
我发现,如果一个约束条件完全包含在另一个约束条件中,则内部约束条件将决定白色对象可以放置的位置。此外,如果有几个不相交的约束条件包含在另一个约束条件中,那么应该是不可能的,因为它违反了每个约束条件只能有一个白色对象的事实。该算法应该足够快,在2-3秒内运行。
更新:其中一个答案提到了精确覆盖问题;这是一个不是NP完全的特殊实例吗?
更新2:如果我们将每个约束条件转换为一个开始和结束事件,并对这些事件进行排序,我们是否可以系统地扫描这些事件并分配白色对象?
在这个问题中,我们有N个物体和M个约束条件。(N可以是200k,M可以是100k)。每个物体都是黑色或白色。每个约束条件都是形式为(x,y)的形式,并且意味着在对象x..y的范围内,恰好有一个白色对象;其余的都是黑色。我们想确定最大可能存在的白色对象数量,或者是否无法满足约束条件。
我发现,如果一个约束条件完全包含在另一个约束条件中,则内部约束条件将决定白色对象可以放置的位置。此外,如果有几个不相交的约束条件包含在另一个约束条件中,那么应该是不可能的,因为它违反了每个约束条件只能有一个白色对象的事实。该算法应该足够快,在2-3秒内运行。
更新:其中一个答案提到了精确覆盖问题;这是一个不是NP完全的特殊实例吗?
更新2:如果我们将每个约束条件转换为一个开始和结束事件,并对这些事件进行排序,我们是否可以系统地扫描这些事件并分配白色对象?