算法综述

增量算法 分治算法 Sweep line 算法

应用背景
理论介绍
实现

    关于计算Voronoi图的算法有很多,如 Shamos Hoey1975),Sibson1980,Ohya et al., 1984)等提出的算法,其他的计算Delaunay图的算法有Lee Schachter1980,Guibas Stolfi1985)等提出的算法。因为Voronoi图和Delaunay图之间有对偶关系,所以计算Voronoi图和Delaunay图的算法之间可以互相转换。任何算法的构造在最坏的情况下至少要O(nlogn),平均至少为O(n)

下面是计算Voronoi图的算法的简单介绍:

Naive方法,Rhynsburger1973),是最早的方法之一,是对Voronoi图定义的直接转化。Bentley et al. 1980)结合bucketing技术,使算法的复杂度平均为O(n)

另一种Naive方法,“walking method”。Voronoi图的顶点和边一个接一个的按顺序构造,好像沿Voronoi图的边行进一样。这种方法在1977Lawson的关于Delaunay图文中有描述,Masus1984)利用bucketing技术构造了平均复杂度为O(n)的算法。

“flip method”,最初先构造一个初始图,然后一步一步修改,直到它变为Voronoi图。它是Sibson1978首先提出的。

Incremental 方法,是一个简单但是很有用的方法。先构造2个或3generatorVoronoi图,然后再一个个地增加generator来修改Voronoi图。这种方法最早是Green Sibson1978)提出的。以后很多人对这种方法进行了改进。这种方法在最坏的情况下时间复杂度是O(n2),但是平均时间复杂度通过使用特殊的数据结构可以降到O(n)。这种方法无论是从时间复杂度还是鲁棒性地角度看,都是最实用的方法之一。

Divide-and-conquer 方法。Generator被递归的分为小子集,然后把这些子集的Voronoi图合并到一起。这种方法是Shamos Hoey1975)最初提出的。最坏的情况下,这种方法的时间复杂度是O(nlogn)。同样的,以后也有很多人对这种方法做了进一步的工作,使其鲁棒性得到提高,平均时间复杂度也达到了O(n)

Sweep line 方法。由Fortune19861987)提出。Sweep line方法是计算几何最基本的技术之一,它把一个二维问题降为一维问题。一条垂直线,即sweep line,从平面的左面移到右面,Voronoi图就沿着这条线构造。

lift-up method”,利用二维Voronoi图和三维凸包的关系构造Voronoi图。

 

 

有关此站点的问题请向[lyq,ywj@keg.cs.tsinghua.edu.cn,

                   wpchen@cad.cs.tsinghua.edu.cn]发邮件。
上次更新时间: 2001年01月11日。