【发布时间】:2013-04-06 17:05:59
【问题描述】:
编辑:现在我认为这是一个扫描线问题。 (见底部的update2)
在这个问题中,我们得到N 对象和M 约束。 (N 可以是200k,M 可以是100k)。每个物体要么是黑色的,要么是白色的。每个约束的形式为(x, y),表示在对象x..y 的范围内,恰好有一个白色对象;其余的都是黑色的。我们想确定可以存在的白色对象的最大数量,或者是否不可能满足约束。
我观察到,如果一个约束完全包含在另一个约束中,则内部约束将决定可以放置白色对象的位置。此外,如果在另一个约束中包含多个不相交的约束,这应该是不可能的,因为它违反了每个约束只能有 一个 白色对象的事实。该算法应该足够快,可以在 2-3 秒内运行。
更新:其中一个答案提到了确切的封面问题;这是不是 NP 完全的特殊实例吗?
Update2:如果我们将每个约束更改为 begin 和 end 事件,并对这些事件进行排序,我们是否可以系统地扫过这些事件并分配白色对象?
【问题讨论】:
-
“另外,如果在另一个约束中包含多个不相交的约束,这应该是不可能的,因为它违反了每个约束只能有一个白色对象的事实。”我不跟随;什么时候约束既不相交又包含在另一个约束中?我假设“包含在另一个中”是指形式 (x,y) (u,v),其中 x
-
是的,这就是我的意思,现在我想起来了,你认为通过处理/模拟某些东西来贪婪地确定白色物体是否可行?
-
这可能更适合cs.stackexchange.com...
-
这看起来根本不像是图形问题。边缘在哪里?
-
嗯我不确定贪心,在我看来,减少约束系统后,你应该能够做到这一点并应用组合方法。考虑一下可以为约束系统推导的约简规则可能会有所帮助。例如,假设您有三个约束 (a,c) (b,f) (d,e),其中 a
标签: algorithm