我感兴趣的决定给定的非简单的多边形是否是复杂性几乎简单,在任何两个不同的正式感官:弱简单或者非自交。由于这些术语尚未广为人知,因此让我从一些定义开始。
甲多边形 是线段的闭合循环连接一些有限序列在平面上的点的。点称为多边形的顶点,线段称为多边形的边。我们可以通过仅按顺序列出其顶点来指定任何多边形。
如果所有n个顶点都不同并且边仅在其端点处相交,则多边形很简单。等效地,如果多边形对圆是同胚的,并且每个边的长度都为正,则该多边形是简单的。但是,通常,多边形的顶点和边缘可以任意相交,甚至重合。1个
考虑两条多边形路径和,它们的交点是两者的共同子路径(可能是一个点)。我们说,如果和B的端点A(0),B(0),A(1),B(1)在公共子路径A \ cap B的邻域边界上交替,则A 交叉。如果多边形具有两个交叉子路径,则该多边形是自交叉的,否则具有 非自交叉的。2
如果多边形是一连串简单多边形的极限,则多边形是弱简单的;或者等效地,如果顶点的任意小扰动使多边形简单,则多边形是弱简单的。每个弱简单多边形都是非自相交的。但是,一些非自相交的多边形并不是那么简单。
例如,考虑以下所示的六个点。
多边形很简单;见左图。
多边形很弱;中间的图显示了附近的简单多边形。但是,此多边形并不简单,因为它访问了三次。
多边形是自交的,因为子路径和交叉。见右图以获得一些直觉。b p q z y q p a
最后,多边形(绕中间多边形缠绕两次)是非自交叉的,但并不是那么简单。直观地,此多边形的转弯数为,而任何简单多边形的转弯数必须为。(形式上的证明需要进行一些案例分析,部分原因是实际上对于角为多边形,转数实际上没有很好地定义!)± 2 ± 1 0 ∘
更新(9月13日):在下图中,多边形是非自交叉的,并且具有转弯数字1,但是并不是那么简单。多边形可以说有几个交叉的非简单子路径,但没有交叉的简单子路径。(我之所以说“可以说”,是因为目前尚不清楚如何定义两个非简单步行的时间!)
最后,这是我的实际问题:
我们能多快确定给定的多边形是否非自交叉?
我们多快可以确定给定的多边形是否是弱简单的?
可以在时间内解决第一个问题,如下所示。由于存在个顶点,因此存在个顶点到顶点子路径;我们可以测试任何特定的子路径在时间内是否简单(通过蛮力)。对于每对简单的顶点到顶点子路径,我们可以测试它们是否在时间内交叉。但这不可能是最好的算法。n O (n 2)O (n 2)
我不知道第二个问题是否可以在多项式时间内解决。我想我可以为任何非简单的多边形快速计算一个定义明确的转向数(除非多边形边缘的并集只是一条路径,在这种情况下多边形必须是弱简单的)。请参阅下面的答案。 然而,上面的新示例多边形意味着非自交和车削数1也未暗示弱简单。
我们可以通过检查每对边的相交来确定给定的多边形在时间内是否简单,或者使用标准扫掠线算法在时间内甚至在时间内确定是否简单使用Chazelle的三角剖分算法。(如果输入多边形不是简单的,则任何三角剖分算法都将引发异常,无限循环或生成不是有效三角剖分的输出。)但是这些算法都不能解决我要解决的问题。 O (n log n )O (n )
1布兰科·格伦鲍姆(BrankoGrünbaum)。 多边形:Meister是对的,而Poinsot是错的,但是占了上风。Beiträgezur代数与几何 53(1):57–71,2012年。
2参见,例如:Erik D. Demaine和Joseph O'Rourke。 几何折叠算法:链接,折纸,多面体。剑桥大学出版社,2007年。