【发布时间】:2012-03-19 14:45:55
【问题描述】:
我正在研究一种有效的算法,以“隐藏”在一组N 矩形(轴对齐)中以 2D 形式排列的所有相交矩形对。
所有矩形都具有相同的宽度和高度。
假设我以 2D 布局的起始矩形集是
R={r_1,r_2,...,r_n}
其中r_i 是所有矩形,r_i 具有布尔属性visible。
我想找到 R 的子集 S,使得对于属于 S r_i,_r_j 的每个 r_i、r_j 不相交。
第一个简单的解决方案是蛮力最大独立集方法。
首先,我遍历N(N-1)/2 矩形(给定的矩形不与自身相交)并检查它们是否相交。同时,我还将集合R 中的所有矩形作为图G=(V,E) 的节点。该图中的边由成对的相交三角形表示。
这组不相交的矩形是图的一个最大独立集。
我认为这不是最快的方法,虽然是正确的。我在一些讨论中读过,例如如何通过 x 坐标预先对矩形列表进行排序将加速相交矩形对的计算到O(nlog(n) )(而不是蛮力O(n^2)。
现在我在问,是否有人知道针对此类问题的更好算法(用于计算一组矩形中的相交对和过滤这些矩形?)
将问题重新表述为 SAT 问题也可能很有趣,尽管这个想法刚刚出现在我的脑海中。问题在于找到visible 属性的排列,使得没有可见的矩形与另一个矩形相交。
【问题讨论】:
标签: algorithm graph-theory computational-geometry intersection