尽管有问题的标题,但我认为您实际上是在寻找将最小剖切成直线多边形的矩形的方法。(Jason的链接是关于矩形的最小覆盖,这是一个完全不同的问题。)
David Eppstein在他的2010年调查文章“计算几何问题的图论解决方案”的第3节中讨论了这个问题,他在mathoverflow.net上给出了一个很好的总结:
这个想法是找到具有两个凹顶点作为端点的不相交的平行于轴的对角线的最大数量,沿着它们分裂,然后为每个剩余的凹顶点再形成一个分裂。要找到不相交的轴平行对角线的最大数量,请形成对角线的交点图;该图是二分图,因此可以通过图匹配技术在多项式时间内找到其最大独立集。
这是我对这个令人敬佩的简短描述的掩饰,使用了Eppstein文章中的图2。假设我们有一个直线多边形,可能带有孔。
当多边形被切成矩形时,每个凹形顶点必须至少与切线的一个边相交。因此,如果这些边缘中有尽可能多的边缘具有双重作用,则它们将得到最小的解剖,即它们连接了两个凹形顶点。
因此,让我们在完全包含在多边形内的两个凹顶点之间绘制与轴平行的对角线。(“平行轴”在这里表示“水平或垂直”,多边形的对角线是连接两个不相邻顶点的线。)我们希望在剖析中使用尽可能多的这些线,只要它们不不相交。
(如果没有平行于轴线的对角线,则剖析是微不足道的-只需从每个凹形顶点进行切割即可。或者,如果在平行于轴线的对角线之间没有相交,则我们将其全部使用,再加上从每个剩余的凹入顶点上进行的切割。否则,请继续阅读。)
一组线段的相交图对每个线段都有一个节点,如果线相交,则一条边会连接两个节点。这是平行轴对角线的交点图:
它是两部分的,一部分是垂直对角线,另一部分是水平对角线。现在,我们希望选择尽可能多的对角线,只要它们不相交即可。这对应于在相交图中找到最大独立集。
在一般图中找到最大独立集是一个NP难题,但是在二部图的特殊情况下,柯尼格定理表明,这等效于找到最大匹配的问题,可以在多项式时间内解决该问题。Hopcroft-Karp算法的示例。一个给定的图可以具有多个最大匹配项,但是它们中的任何一个都可以,因为它们都具有相同的大小。在该示例中,所有最大匹配都具有三对顶点,例如{(2,4),(6,3),(7,8)}:
(此图中的其他最大匹配项包括{(1、3),(2、5),(7、8)}; {(2、4),(3、6),(5、7)};和{ (1、3),(2、4),(7、8)}。
为了从最大匹配到对应的最小顶点覆盖,请应用柯尼格定理的证明。在上面显示的匹配中,左集合为L = {1,2,6,7},右集合为R = {3,4,5,8},L中不匹配的顶点集合为U = { 1}。U中只有一个交替路径,即1–3–6,因此交替路径中的一组顶点为Z = { 1、3、6 },因此最小顶点覆盖为K =(L \ Z)∪ (- [R ∩ ž)= {2,3,7},下面以红色显示,最大独立设置为绿色:
将其转换回解剖问题,这意味着我们可以在解剖中使用五个与轴平行的对角线:
最后,从每个剩余的凹形顶点进行切割以完成解剖: