Let be a given set of points in . Computing the Voronoi diagram normally means to generate the set of Voronoi vertices, and computing the Delaunay complex is essentially the same thing. Once the Voronoi vertices are generated, the nearest neighbor sets for all Voronoi vertices can be easily computed, and in fact most of the algorithms for generating the Voronoi vertices computes the nearest neighbor sets as well at the same time.
The complexity of computing the Voronoi diagram is not well understood in general. For example, there is no known algorithm that runs polynomial in the size of input and output. For the much easier nondegenerate case, there is an algorithm, known as the reverse search algorithm, which runs in time . When the dimension is fixed (in particular ), one can analyse complexities of various-type algorithms in terms of the input size. In the plane, there are algorithms that is optimal, and for fixed there is an incremental algorithm, see [Ge97, Chapter 20].
How large is the number |Vo(S)| of output? The tight upper bound was given in [Sei91] which is . While this bound may be a far over-estimate of expected behavior, the number of output typically grows exponentially in and , and thus the computation itself is expected to be heavy. Therefore, one must take a caution to do the Delaunay/Voronoi computation. In fact,
I know quite a few people who tried to use Voronoi diagram computation codes in order to accomplish a much simpler task.It is not only a waste of time and computer resources, but it often leads to a prohibitively hard computation, while an appropriate use of mathematical techniques resolves the problem instantly.
For example, the following computations are much simpler and should be solved via linear programming techniques in Section 4:
The most natural way to compute the Voronoi diagram is by computing the vertices and the extreme rays of the polyhedron in given in 3.2. By ignoring the last component of each vertices we obtain the Voronoi vertices.