计算几何入门 1.5:凸包构造算法下界

从极点法的O(n^4)复杂度,到极边法的O(n^3),再到增量构造法和Jarvis March的O(n^2),我们经历了将特定问题算法不断优化、降低复杂度的过程。那么还有比O(n^2)更高效的算法吗?凸包构造算法的下界是什么?推广到一般情况,在计算模型固定的情况下特定问题的复杂度下界又是如何确定的?

 

在计算模型固定的情况下特定问题的复杂度下界(lower bound)是确定的。严谨考虑,在设计算法前应该先确定下界是多少。

 

对于某个问题的特定算法,我们当然能够去评价这个算法的好坏,就是估算它的时间复杂度。算法能达到的下界也就是所谓问题的难度。当然这种评价通常是比较麻烦的,有时候甚至是不可行的。这就要引入新的的方式来衡量一个算法的好坏。

 

一、规约(reduction)

我们引入规约(reduction)的方法来间接衡量一个算法。规约简单来讲就是用一个“参照物”对比待评算法,得到算法的复杂度。规约的一般方法如图:

计算几何入门 1.5:凸包构造算法下界_第1张图片

左侧是已知的问题A,已经明确它的难度,右侧是待分析问题B,复杂度未知。我们在二者之间建立起一种基本reduction关系:linear-time reduction。linear-time reduction具体表述为:任何一个A的输入(input of A),都可以在O(n)复杂度转化为一个B的输入(input of B),然后通过B的某种算法(any algorithm)计算出结果(output of B),而对于output of B又都可以在在O(n)复杂度转化为A问题的结果(output of A)。两次转换的复杂度不能超过线性,也就是linear-time。

 

能够进行上述操作,就称为:A问题可以规约到B问题(problem A is linear-time reducible to problem B)。注意表述方式防止搞混A和B的位置。

 

可以通过曹冲称象的故事来帮助理解规约的思想。要解决的问题是:没有秤能直接称量大象重量(问题B的难度无法直接衡量),解决方案是:利用船和石块间接称量。石头块的重量是可以直接称量的(问题A的难度是已知的),利用船来转换石头和大象的重量是可操作的(规约的方法是可操作的)。

 

引入规约记号。problem A is linear-time reducible to problem B表示为:

将问题A、B的难度分别表示为|A|,|B|。规约记号的意思相当于|A|≤|B|,A的下界必然就是B的下界。规约的过程先将A的输入转化为B的输入,经过B的某种算法获得解后又转化为A的解,也就是这个算法也是解决A问题的算法。已知A问题的下界,那么这个算法必然不会低于A的这个下界。

 

二、构造凸包的下界

按照“曹冲称象”的规约思想,分析问题的难度,最重要的在于找到“石头”,而船就是规约这种方法。以二维凸包(2d-CH)来分析,首先将待解决的问题放到规约记号右边,而左边的“石头”就是排序算法

排序是纯粹的数值计算问题,而凸包是典型的几何问题,二者是如何联系在一起的呢?前面增量构造法和Jarvis March算法正是分别由两种排序算法来类比引入的,可见排序和凸包之间有深刻的内在联系。二者之间的联系可以通过下图表示:

计算几何入门 1.5:凸包构造算法下界_第2张图片

首先清点要做的任务:

 

  • 可以在线性时间内,将排序问题的输入转化为凸包问题的输入
  • 可以在线性时间内,将凸包问题的结果转化为排序问题的结果

先看第一条。排序问题的输入可以表示为x轴上的一系列的点(图中蓝色点)。然后将这些点转化为凸包问题的输入,就是将这些待排序的数转化为平面上的点。引入辅助线——一条抛物线,例如图中蓝色虚线。接下来要对蓝色点做到抛物线上的映射(O(n)),映射在抛物线上的点用绿色标出。这样就完成了将待排序数字转化为平面上点的操作。接下来就可以用某种算法将绿色点构造为凸包,即图中CH(P)。

 

 

再看第二条。凸包CH(P)就是问题问题B的解,如何将B的解转化为A的解?注意最左和最右边两点的连线,即图中1和4的连线4→1。除去这条连线之外,其他首尾相接的连线:1→2,2→3和3→4都是“沿着x方向单调的”,遍历这些首尾相连的边(O(n))就能得到一系列的数值,并且已经是有序的了。这样就将凸包问题的解——凸包CH(P)转化为了排序问题的解——有序数值序列。

 

两次转化说明规约是可行的,因此2d-CH问题的下界可由sorting的下界确定。一般而言,排序问题的难度是确定的:O(nlogn)。2d-CH问题的下界也就是

O(nlogn)

更高维的凸包问题下界也是如此。

 

增量构造法和Jarvis March的O(n^2)到O(nlogn)之间的鸿沟能否跨越呢?是否存在O(nlogn)复杂度的凸包构造算法?后续文章会有回答。

 

本文是学堂在线课程《计算几何》的笔记,帮助理解和记录思考过程,不够严谨请见谅。

你可能感兴趣的:(algorithm,and,data,structure)