-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpolyfaq.tex
1850 lines (1584 loc) · 70.4 KB
/
polyfaq.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\documentclass[a4paper,12pt]{article}
\setlength{\oddsidemargin}{0mm}
\setlength{\textwidth}{16.8cm}
\setlength{\topmargin}{0mm}
\setlength{\textheight}{23cm}
\setlength{\headsep}{0in}
\setlength{\headheight}{0pt}
\pagestyle{plain}
%\usepackage[dvips]{graphics} % unix environment
%\usepackage[textures]{graphics} % mac textures environment
\usepackage{url,amsmath}
\usepackage{color}
%\usepackage{pslatex}
%\usepackage[dvips,draft]{graphicx} % unix environment
\usepackage[final]{graphicx} % unix environment
\usepackage[breaklinks=true, destlabel=true]{hyperref}
\DeclareGraphicsExtensions{.jpg,.eps}
\DeclareGraphicsRule{.jpg}{eps}{.jpg.bb}{`jpeg2ps -h -r 600 #1}
\graphicspath{{Figures/}{eps/}}
\definecolor{blue}{rgb}{0,0,1} % blue
\definecolor{bluegreen}{rgb}{0,0.5,0.5} % blue green
\definecolor{redblue}{rgb}{0.5,0,0.5} % red blue
% Each section have independent equation numbering like (2.12)
%\def\theequation{\arabic{section}.\arabic{equation}}
%\def\thefigure{\arabic{section}.\arabic{figure}}
\newtheorem{exercise}{Exercise}
\newtheorem{theorem}{Theorem}
%\newtheorem{lemma}[theorem]{Lemma} % the same numbering as theorem
%\newtheorem{proposition}[theorem]{Proposition} % the same numbering as theorem
%\newtheorem{corollary}[theorem]{Corollary} % the same numbering as theorem
%\newtheorem{property}[theorem]{Property} % the same numbering as theorem
%\newtheorem{remark}[theorem]{Remark} % the same numbering as theorem
%\newtheorem{assumption}[theorem]{Assumption} % the same numbering as theorem
\newcommand{\Hrule}{\noindent \hrulefill}
\newcommand{\HBrule}{\noindent \hrulefill \medskip}
\newcommand{\HTrule}{\medskip \noindent \hrulefill}
\def\mbzero{\mbox{\boldmath$0$}}
\def\dim{\mathop{\it dim}\nolimits}
\def\conv{\mathop{\it conv}\nolimits}
\def\cone{\mathop{\it cone}\nolimits}
\def\aff{\mathop{\it aff}\nolimits}
\def\lin{\mathop{\it lin}\nolimits}
\def\linsp{\mathop{\it lin.space}\nolimits}
\def\chcone{\mathop{\it char.cone}\nolimits}
\newcommand{\FL}[1]{\left\lfloor #1 \right\rfloor}
\newcommand{\RF}[1]{\left\lceil #1 \right\rceil}
%\psdraft
\title
{Frequently Asked Questions in Polyhedral Computation}
\author
{{Komei Fukuda}\\
ETH Zurich, Switzerland\\
\url{https://people.inf.ethz.ch/fukudak/}
}
\date{Version Jan 15, 2022}
\begin{document}
\maketitle
\begin{center}
\includegraphics[height=40mm]{vtest_fig_vo.eps}
\includegraphics[height=40mm]{vtest_fig_vo3d.eps}
\includegraphics[height=40mm]{vtest_fig_vode.eps}
\end{center}
\tableofcontents
% --------------------- Introduction --------------------------------------
\section{What is Polyhedral Computation FAQ?} \label{Sec:intro}
This is an FAQ to answer some basic questions arising from
certain geometric computation in general dimensional
(mostly Euclidean) space. The main areas to be covered
are the convex hull computation of a finite point set,
the vertex enumeration for a convex polytope,
the computation of Voronoi diagram and Delaunay triangulation, in $R^d$.
We illustrate typical solution processes with small examples and
publicly available codes such as cddlib \cite{f-cddhome} and lrslib \cite{a-lrshome-01}.
It is still incomplete and perhaps contains a number of
typos and mistakes at this moment, but I will try to
make it as complete as possible for the primary purposes.
We do not intend to discuss techniques and algorithms
specially designed for particular dimensions (e.g. 2D and 3D).
For those interested primarily in geometric computation in
lower dimensions (e.g. 2 and 3) should consult the
comp.graphics.algorithms {FAQ}
\cite{o-cgafaq} as well as a handbook of discrete and
computational geometry \cite{go-hbdcg-97}.
Please note that the Polyhedral Computation FAQ is available from
\cite{f-kfhome} in pdf format. The html version might become
available as well, and it has an advantage of having
html links within the documents. Yet, one has to be aware of
the fact that some conversion errors exist that give
wrong equation numberings and
missing figures. Please consider the pdf version as the most reliable source.
We do not provide any proofs for the stated results in this document.
The basic theory and computational algorithms on convex polyhedra are presented
with rigorous proofs in the textbook \cite{f-pc-20}.
To refer to this document, please use
\begin{quote}
Komei Fukuda\\
Polyhedral computation {FAQ}\\
ETH Zurich, Switzerland\\
\url{https://cddlib.github.io/polyhedral_faq/} or (less up to date)\\
\url{https://people.inf.ethz.ch/fukudak/}.
\end{quote}
Please send your comments to the email address above.
% --------------------- Polyhedron --------------------------------------
\section{Convex Polyhedron} \label{Sec:polytope}
\subsection{What is convex polytope/polyhedron?} \label{polytope:polytope}
A subset $P$ of $R^d$ is called a {\em convex polyhedron\/} if it is
the set of solutions to a finite system of linear inequalities, and
called {\em convex polytope\/} if it is a convex polyhedron and bounded.
When a convex polyhedron (or polytope) has dimension $k$, it is
called a {\em $k$-polyhedron\/} ({\em $k$-polytope\/}).
For the sequel, we might omit {\bf convex} for convex polytopes
and polyhedra, and call them simply polytopes and polyhedra.
\subsection{What are the faces of a convex polytope/polyhedron?} \label{polytope:faces}
Let $P$ be a convex $d$-polyhedron (or $d$-polytope) in $R^d$.
For a real $d$-vector $c$ and a real number $d$, a linear inequality
$c^T x \le d$
is called {\em valid\/} for $P$ if $c^T x \le d$ holds for all $x \in P$.
A subset $F$ of a polyhedron $P$ is called a {\em face\/} of $P$ if it is
represented as
\[
F= P \cap \{ x: c^Tx = d \}
\]
for some valid inequality $c^T x \le d$. By this definition,
both the empty set $\emptyset$ and the whole set $P$ are
faces. These two faces are called {\em improper\/} faces while the other
faces are called {\em proper\/} faces.
We can define faces geometrically. For this, we need to
define the notion of supporting hyperplanes.
A hyperplane $h$ of $R^d$ is {\em supporting
$P$\/} if one of the two closed halfspaces of $h$ contains $P$.
A subset $F$ of $P$ is called a {\em face\/} of $P$
if it is either $\emptyset$, $P$
itself or the intersection of $P$ with a supporting hyperplane.
The faces of dimension $0$, $1$, $\dim(P)-2$ and $\dim(P)-1$ are called the {\em vertices\/},
{\em edges\/}, {\em ridges\/} and {\em facets\/}, respectively.
The vertices coincide
with the {\em extreme points\/} of $P$ which are defined as points which cannot
be represented as convex combinations of two other points in $P$.
When an edge is not bounded, there are two cases: either it is a line
or a half-line starting from a vertex.
A half-line edge is called an {\em extreme ray\/}.
\subsection{What is the face lattice of a convex polytope}
\label{polytope:facelattice}
The {\em face poset\/} $FL(P)$ of a convex polyhedron is
the set of all faces of $P$ ordered by set inclusion.
Two polytopes are called {\em isomorphic\/} if
their face posets are isomorphic.
The face poset of a convex polytope is a lattice.
The face poset of a convex polyhedron is sometimes
referred to as the {\em combinatorial structure\/} of the polyhedron.
Thus the expression ``two polyhedra are combinatorially equal''
means they are isomorphic.
\subsection{What is a dual of a convex polytope?} \label{polytope:dual}
For a convex polytope $P$, any convex polytope $P'$ with $FL(P')$
anti-isomorphic to $FL(P)$ (i.e. ``upside-down'' of $FL(P)$)
is called a {\em (combinatorial) dual\/} of $P$. By the definition,
a dual polytope has the same dimension as $P$. The duality theorem
states that every convex polytope admits a dual.
\begin{theorem} [Duality of Polytopes] \label{thm:polydual}
Every nonempty $d$-polytope $P$ in $R^d$
admits a dual polytope in $R^d$. In particular,
one can construct a dual polytope by the following ``polar'' construction:
\[
P^* = \{y \in R^d: x^T y \le 1 \text{ for all } x \in P \}
\]
where $P$ is assumed to contain the origin in its interior.
\end{theorem}
When $P$ contains the origin in its interior,
the polytope $P^*$ is called the {\em polar\/} of $P$. One can
easily show that
\[
P^* = \{y \in R^d: v^T y \le 1 \text{ for all } v \in V(P) \}
\]
where $V(P)$ denote the set of vertices of $V$, and this inequality
(H-) representation of $P^*$ is minimal (i.e. contains
no redundant inequalities).
\subsection{What is simplex?} \label{polytope:simplex}
A subset $P$ of $R^d$ is called a {\em $k$-simplex\/} ($k =0,1, 2, \ldots$)
if it is the convex hull of $k+1$ affinely independent points. It has
exactly $k+1$ vertices and $k+1$ facets. A simplex is
a $k$-simplex for some $k$.
Simplices are selfdual, i.e. a dual (see \ref{polytope:dual}) of a simplex is again a simplex.
\subsection{What is cube/hypercube/cross polytope?} \label{polytope:hypercube}
A subset $P$ of $R^d$ is called a {\em unit $d$-cube\/} if it is
the convex hull of all $2^d$ points with components $0$ or $1$. It has
exactly $2^d$ vertices and $2 d$ facets. A {\em cube\/} or
{\em hypercube\/} is a
convex polytope which is isomorphic to the $d$-cube for some
$d$.
A dual (see \ref{polytope:dual}) of a cube is called
a {\em cross\/} polytope.
\subsection{What is simple/simplicial polytope?} \label{polytope:simpsimp}
A $d$-polytope is called {\bf simple} if each vertex is contained
in exactly $d$ facets. A $d$-polytope is called {\bf simplicial}
if each facet contains exactly $d$ vertices. By definition,
a dual of simple (simlicial)
polytope is simplicial (simple, respectively).
Every facet of a simplicial $d$-polytope is a $(d-1)$-simplex. Each vertex
of a simple $d$-polytope is contained in exactly $d$-edges.
A $d$-cube is a simple polytope and a $d$-simplex is both simple and
simplicial.
\subsection{What is 0-1 polytope?} \label{polytope:01}
A polytope in $R^d$ is called {\bf 0-1} if all its vertices
are in $\{0, 1\}^d$. In other words, a 0-1 polytope is
the convex hull of a subset of the $2^d$ point set $\{0, 1\}^d$,
for some $d\ge 0$.
\subsection{What is the best upper bound of the numbers of
$k$-dimensional faces of a $d$-polytope with $n$ vertices?} \label{polytope:upperbound}
Let $f_k(P)$ denote the number of $k$-faces of a $d$-polytope $P$,
for $k=0,1,\ldots,d$.
The exact upper bound for $f_k$ in terms of $f_0$ and $d$.
is known, thanks to McMullen's upper bound theorem.
The convex hull of distinct $n$ points on the moment curve
$\{m(t)=(t^1, t^2, \ldots, t^d) : t\in R \}$ in $R^d$
is known as a {\em cyclic polytope}. It is known that
its combinatorial structure (i.e. its face lattice, see
Section \ref{polytope:facelattice})
is uniquely determined by $n$ and $d$.
Thus we often write $C(d, n)$ to denote any such
cyclic $d$-polytope with $n$ vertices.
McMullen's Upper Bound Theorem shows that the maximum
of $f_k(P)$ is attained by the cyclic polytopes.
\begin{theorem} [Upper Bound Theorem] \label{thm:MUB}
For any $d$-polytope with $n$ vertices,
\[
f_k(P) \le f_{k}(C(d,n)), \; \forall k=1, \ldots, d-1,
\]
holds.
\end{theorem}
The number of $k$-faces of a cyclic polytope $C(d,n)$ can
be explicitely given and thus one can evaluate the order of
the upper bound in terms of $n$ and $d$.
\begin{theorem} \label{thm:Cyclic}
For $d \ge 2$ and $0 \le k \le d-1$,
\[
f_{k}(C(d,n)) = \sum_{r=0}^{\lfloor d/2 \rfloor}
\binom{n-d+r-1}{r} \binom{r}{k}
+
\sum_{r=\lfloor d/2 \rfloor+1}^{d}
\binom{n-r-1}{d-r} \binom{r}{k} .
\] In particular,
\begin{align} \label{polytope:FacetUB}
f_{d-1}(C(d,n))
&= \binom{n-\RF{d/2}}{\left\lfloor \frac{d}{2} \right\rfloor} + \binom{n-\FL{d/2}-1}{\left\lceil \frac{d}{2} \right\rceil -1}\\
& = O(n^{\left\lfloor \frac{d}{2} \right\rfloor}) \text{\quad for any fixed $d$}.
\end{align}
\end{theorem}
\noindent
For example,
\[
\begin{array}{lrrrrr}
P & f_0 & f_1 & f_2 & f_3 & f_4 \\
C(5,10) & 10 & 45 & 100 & 105 & 42\\
C(5,20) & 20 & 190 & 580 & 680 & 272\\
C(5,30) & 30 & 435 & 1460 & 1755 & 702
\end{array}
\]
The upper bound theorem can be written in dual form which
gives, for example, the maximum number of vertices in
a $d$-polytope with $m$ facets.
\begin{theorem} [Upper Bound Theorem in Dual Form] \label{thm:MUBDual}
For any $d$-polytope with $m$ facets,
\[
f_k(P) \le f_{d-k-1}(C(d,m)), \; \forall k=0,1, \ldots, d-2,
\]
holds.
\end{theorem}
The original proof of the Upper Bound Theorem is in
\cite{m-mnfcp-70,ms-cpuc-71}.
There are different variations,
see \cite{k-lpsasp-97,m-cg-94,z-lop-94}. The textbook \cite[Chap 6]{f-pc-20}
presents a detailed proof based on \cite{k-lpsasp-97} which is beautiful
but has a little typo.
\subsection{What is convex hull? What is the convex hull problem?}
\label{polytope:convhullcomp}
For a subset $S$ of $R^d$, the convex hull $conv(S)$ is defined
as the smallest convex set in $R^d$ containing $S$.
The convex hull computation means the ``determination''
of $conv(S)$ for a given finite set of $n$ points
$S = \{p^1, p^2, \ldots, p^n\}$
in $R^d$.
The usual way to determine $conv(S)$ is to
represent it as the intersection of halfspaces, or more precisely,
as a set of solutions to a minimal system of linear inequalities.
This amounts to output a matrix $A \in R^{m \times d}$ and
a vector $b\in R^m$ for some $m$ such that
$conv(S) =\{ x | A \; x \le b \}$.
When $conv(S)$ is full-dimensional,
each (nonredundant) inequality corresponds to
a facet of $conv(S)$. Thus the convex hull problem is
also known as the {\em facet enumeration problem}, see
Section \ref{polytope:repconv}.
Some people define the convex hull computation as the determination
of extreme points of $conv(S)$, or equivalently that of
redundant points in $S$ to determine $conv(S)$. This is much simpler
computation than our convex hull problem. In fact, this can be done
by solving $O(n)$ linear programs and thus polynomially solvable,
see Section \ref{polytope:Vredundancy}
and \ref{polytope:Vredundancy2}.
It is better to name this as the ``redundancy removal for a point set $S$''.
\subsection{What is the Minkowski-Weyl theorem for convex polyhedra?
}
\label{polytope:MWtheorem}
The Minkowski-Weyl Theorem states every polyhedron is
finitely generated and every finitely generated set is a
polyhedron. More precisely,
for two subsets $P$ and $Q$ of $R^d$, $P+Q$ denotes the
{\em Minkowski sum} of $P$ and $Q$:
\begin{eqnarray*}
P + Q & = &
\{ p +q: p \in P \mbox{ and } q \in Q \}.
\end{eqnarray*}
\begin{theorem} [Minkowski-Weyl's Theorem] \label{thm:Minkowski-Weyl1}
For a subset $P$ of $R^d$, the following statements are equivalent:
\begin{description}
\item[(a)] P is a polyhedron, i.e., for some real (finite) matrix $A$ and real vector $b$,
$ P=\{ x : A x \le b \}$;
\item[(b)] There are finite real vectors $v_1, v_2, \ldots, v_n$ and
$r_1, r_2, \ldots, r_s$ in $R^d$
such that\\
$P = conv(v_1, v_2, \ldots, v_n) + nonneg(r_1, r_2, \ldots, r_s)$.
\end{description}
\end{theorem}
Thus, every polyhedron has two representations of type (a) and (b),
known as (halfspace) {\em H-representation\/} and (vertex)
{\em V-representation\/},
respectively. A polyhedron given by H-representation (V-representation)
is called {\em H-polyhedron} ({\em V-polyhedron}).
\subsection{What is the vertex enumeration problem, and what is the facet enumeration
problem?} \label{polytope:repconv}
When a polyhedron $P$ in $R^d$ has at least one extreme point and full dimensional,
both representations (a) and (b) in Miknowski-Weyl
Theorem \ref{thm:Minkowski-Weyl1} are unique up
positive multiples of each inequality and ray $r_j$.
Under these regularity conditions, the conversions between the H-representation
and the V-representation are well-defined fundamental problems.
The transformation (a) to (b) is known as the {\em vertex enumeration\/}
and the other (b) to (a) is known as the {\em facet enumeration\/}.
When $P$ is in addition bounded (i.e. polytope), the facet enumeration problem
reduces to
what we call the convex hull problem, see \ref{polytope:convhullcomp}.
If a given polyhedron does not satisfy the assumptions, it is easy to
transform the polyhedron to an isomorphic lower dimensional
polyhedron satisfying the assumptions.
There are easy (nondegenerate) cases and difficult (degenerate) cases.
For simplicity, we assume that $P$ is bounded (i.e. polytope).
The vertex enumeration is called {\em nondegenerate\/} if
there is no point $x \in R^d$ which satisfies $d+1$ given inequalities
with equality, and {\em degenerate\/} otherwise.
The facet enumeration
is called {\em nondegenerate\/} if
there is no $(d+1)$ given points which are on a common
hyperplane, and {\em degenerate\/} otherwise.
\subsection{How can one enumerate all faces of a convex polyhedron?} \label{polytope:faceenum}
Let $P$ be a convex polytope in $R^d$. One can extend the
discussion below for the unbounded case (polyhedron) by adding
a face at infinity, but for simplicity we assume $P$ is bounded.
First of all the answer does not depend on how $P$ is given.
The problem for H-polytopes is equivalent to
the one for V-polytopes by duality.
See Sections \ref{polytope:MWtheorem} and \ref{polytope:dual}.
There are algorithms (e.g. \cite{r-dchhd-92,s-chdch-86,flm-abala-97} )
that can generate all faces from
a V-representation or from a H-rerepsentation. Perhaps the backtrack
algorithm \cite{flm-abala-97} is easiest to implement and works
directly for the unbounded case. It is also
a compact polynomial algorithm (see \ref{polytope:rconvcomplexity})
and thus needs little space to run.
Algorithms that need to store all faces during computation
tend to be too complicated to
implement, because one needs to manage a complex
data structure of faces and their incidences.
Another approach to generate all faces consists of
two steps.
\begin{description}
\item [(1)] Firstly compute the second representation by a representation
conversion algorithm.
\item [(2)] Secondly use a combinatorial method to genrate all
faces.
\end{description}
The first part is discussed in Section \ref{polytope:rconvcomplexity} and
Section \ref{Sec:codes} presents some existing implementation.
The second part can be done efficiently by
purely combinatorial computation, see \cite{fr-cfecp-94}.
As explained in \cite{fr-cfecp-94},
when the polytope is simple (simplicial), the face listing without
duplication can be done implicitely by sorting the vertices (the facets)
by a generic linear function (a generic line through an interior
point).
\subsection{What computer models are appropriate
for the polyhedral computation?} \label{polytope:computermodel}
There are two important computational models, the unit cost RAM
(random access machine)
and the Turing machine. The essential difference is
that the Turing machine uses the binary representations
of numbers and the computational time is measured precisely
down to the number of (unit cost) bit operations.
I believe that the RAM model, in which
each elementary arithmetic operation takes a unit time
and each integer number takes a unit space,
is the standard model for the polyhedral computation.
This model, despite its simplicity, often illuminates
the critical parts of an algorithm and thus
reflects the actual computation well.
Of course, ignoring the number of bits
of a largest number arising in the computation is dangerous,
if one does not control the exponential growth of bit lengths of
the numbers (in terms of the input bit length). This warning should be
always kept in mind to design a good implementation.
Furthermore, there are certain cases in which
we need to use the Turing complexity.
For example, all known ``polynomial'' algorithms for the linear programming
(see Section \ref{Sec:LP}) are Turing polynomial but not RAM polynomial.
We may avoid this problem by pretending that there were a RAM polynomial
algorithm for LP. After all, we (those interested in
geometric computation) are interested in an analysis
which reflects the reality and the simplex method for LP is
practically a RAM polynomial (or equivalently, strongly polynomial)
method.
We refer to the recent book \cite{y-fpaa-00} for further discussions.
\subsection{How do we measure the complexity of
a convex hull algorithm?} \label{polytope:rconvcomplexity}
To answer this question, we assume the unit cost RAM model, where
the computational time is essentially
the number of elementary arithmetic operations and the storage for
any integer number takes a unit space. See Section \ref{polytope:computermodel}.
There are two approaches to evaluate
the complexity of a given convex hull algorithm.
Let $\alpha$ be an algorithm which computes a minimal
inequality description $P=\{x : A x \le b \}$
of a full-dimensional convex polytope $P=conv(S)$
for a given point set $S$ in $R^d$
with $n=|S|$. Let $m$ denote the number of inequalities in
the output $A x \le b$.
(One can interprete the discussion here
in dual setting: consider $\alpha$ as an algorithm to compute
all vertices $S'$ of a convex polytope $P=\{x : A' x \le b' \}$
with $n$ inequaities with $m$ vertices.)
First of all, most people agree that the efficiency of
computing the convex hull
should be measured at least by the critical
input parameters $d$ and $n$. Some people
like to see the complexity by fixing $d$ to
constant, but it is always better to evaluate
in terms of $d$ as well, and fix it later.
The first measure, often employed by computational geometers, is
to bound the worst case running time of an algorithm $\alpha$ for any
input with $n$ points in $R^d$. For example, if $\alpha$ is of
$O(d! \; n^d)$, then it means $\alpha$ terminates in time
$O(d! \; n^d)$ for ANY input of $n$ points in dimension $d$.
Also, when one set $d$ to be fixed (constant), such an algorithm
is said to have time complexity $O(n^d)$, since $d!$ is simply
a constant. We may call this {\em worst-case-input measure}.
For fixed dimension,
there is an optimum algorithm \cite{c-ochaa-93} for the convex hull in terms of
the worst-case-input measure, that runs in time $O(n^{\lfloor d/2 \rfloor})$
for $d\ge 4$.
It cannot be better because the largest output is of
the same order by the upper bound theorem (Theorem \ref{thm:MUB}).
The worst-case-input measure
is quite popular, but it might be little misleading.
For example, suppose algorithms $\alpha$ and $\beta$ are of time complexity
$O(n^d)$ and $O(n^{2d})$, respectively. Then by this measurement,
the algorithm $\alpha$ is {\em superior to\/} $\beta$.
Here is a potentially serious problem with this worst-case-input measure.
Above, it is still possible that $\alpha$ takes worst-case time $n^d$ for
ALL input of $n$ points in $R^d$, and $\beta$ takes time proportional
to some polynomial function of $n, d, m$.
Note that the number $m$ of inequalities varies
wildly from $O(1)$ to $O(n^{\lfloor d/2 \rfloor})$, even for fixed $d$
(by the upper bound theorem Theorem~\ref{thm:MUB} and (\ref{polytope:FacetUB})). This diversity is just too big to be ignored
if $d \ge 4$.
Furthermore, the input data leading to the worst-case output
hardly occurs in practice. In fact, for the random spherical polytope,
the expected size of $m$ is {\bf linear in $n$}, see Section
\ref{polytope:expectedHcomplexity}.
While the worst-case-input optimal
algorithm \cite{c-ochaa-93} is a remarkable theoretical achievement,
{\bf we are still very far from knowing the best ways
to compute the convex hull for general dimensions}.
In order to circumvent this pitfall, one can use a measure using
all key variables $d, n, m$. Or more generally, one can
measure the time complexity in terms of both the size of
input and the size of output.
We say an algorithm $\alpha$ is {\em polynomial\/}
if it runs in time bounded by a polynomial in $d, n, m$.
This polynomiality coincides with the usual polynomiality
when the output size is polynomially bounded by the size of
input.
Under the nondegeneracy assumption (see \ref{polytope:repconv}),
there is a polynomial algorithm for the convex hull problem.
Few of the earlier polynomial algorithms are pivot-based
algorithms \cite{cch-itlp-53,d-cvem-83}
solving the problem in dual form (the vertex enumeration problem)
and a wrapping algorithm \cite{ck-acp-70}.
A more recent algorithm \cite{af-pachv-92} based on reverse search technique
\cite{af-rse-96} is not only polynomial but {\em compact\/} at
the same time. Here, we say an algorithm is {\em compact\/} if its
space complexity is polynomial in the input size only.
In the general case, there is no known polynomial algorithm.
The paper \cite{abs-hgach-97} is an excellet article presenting
how various algorithms fail to be polynomial, through ingenious
constructions of ``nasty'' polytopes.
\subsection{How many facets does the average polytope with $n$ vertices in
$R^d$ have?}
\label{polytope:expectedHcomplexity}
Clearly we need to define a probability distribution of
points to answer the question.
Perhaps the most interesting describution for which the answer
is known is the uniform distribution on the unit sphere $S^{d-1}$.
The results of Buchta et al \cite{bmt-sacb-85} show that the expected number
of facets is $f(d, n) = \frac{2}{d} \gamma((d-1)^2) \gamma(d-1)^{-(d-1)} (n + o(1))$
assymtotically with $n \rightarrow \infty$.
The important fact is that it depends linearly on $n$ essentially.
Here the function $\gamma(p)$ is defined recursively by
\begin{align*}
\gamma(0) &=\frac{1}{2}\\
\gamma(p) &=\frac{1}{2 \; \pi \; p \; \gamma(p-1)}.
\end{align*}
\noindent
Just to see how large the slope $g(d)=\frac{2}{d} \gamma((d-1)^2)
\gamma(d-1)^{-(d-1)}$ of this ``linear'' function in $n$ is,
we calculate it for $d \le 15$:
\begin{center}
\begin{tabular}{rr}
$d$ & $g(d)$\\
2 & 1 \\ 3 & 2 \\ 4 & 6.76773 \\ 5 & 31.7778 \\ 6 &
186.738 \\ 7 & 1296.45 \\ 8 & 10261.8 \\ 9 & 90424.6 \\ 10 &
872190. \\ 11 & 9.09402\,E+06 \\ 12 & 1.01518\,E+08 \\ 13 &
1.20414\,E+09 \\ 14 & 1.50832\,E+10 \\ 15 & 1.98520\,E+11
\end{tabular}
\end{center}
\subsection{How many facets can a 0-1 polytope with $n$ vertices in
$R^d$ have?}
\label{polytope:01Hcomplexity}
Let $f(d)$ denote the maximum number of facets of a
0-1 polytope in $R^d$.
The question such as ``is this function bounded by an exponential in $d$?''
was open just until recently. The negative answer was given by
B\'ar\'any and P\'or who proved the superexponential behavior
of $f(d)$.
\begin{theorem}[B\'ar\'any and P\'or \cite{bp-01pmf-00}]
There is a positive constant $c$ such that
\begin{align}
f(d) > \left ( \frac{c\;d}{\log d} \right )^{\frac{d}{4}}.
\end{align}
\end{theorem}
This is a recent breakthrough in the theory of 0-1 polytopes.
\subsection{How hard is it to verify that an H-polyhedron $P_H$ and
a V-polyhedron $P_V$ are equal?}
\label{polytope:verification}
This is a fundamental complexity question associated with
the Minkowski-Weyl theorem (Theorem \ref{thm:Minkowski-Weyl1}).
This problem, known as the {\em polyhedral verification problem\/}
was first posed by L. Lovasz (see \cite{s-nhg-94}).
To simplify our discussion, let us assume $P_H$ and $P_V$ are
bounded and thus polytopes. Also we may assume that the given
representations contain no redundant data, since removing
redundancies is just a matter of solving linear programs, see
Sections \ref{polytope:Vredundancy} and \ref{polytope:Hredundancy}.
The verification consists of two questions,
``is $P_V \subseteq P_H$?'' and ``is $P_H \subseteq P_V$?''
The first question is easy to answer by just checking
whether each generator (vertex) of $P_V$
satisfies the H-representation of $P_H$.
The second question is known to be coNP-complete, due to \cite{fo-ocfpsc-85}.
(It is not hard to see that it belongs to coNP, since the negative answer
to the question
has a succinct certificate, a vertex $v$ of $P_H$ and a hyperplane
separating $v$ from $P_V$.)
Yet, the complexity of the second question, when the first question has
the positive answer, is not known.
It is possible
to prove that the polynomial solvability of this problem implies
the polynomial solvability of the representation conversion problem
for general convex polytopes
(i.e. the vertex enumeration and the facet enumeration problems).
Here the polynomial solvability of the representation conversion
problem means the existence of an algorithm that generates
the second minimal representation in time polynomial in
the size of both input and output. See Section \ref{polytope:rconvcomplexity} for discussion on complexity measures.
How does the above reduction work?
Assume we have a polynomial algorithm for the verification,
and we design an algorithm to generate all vertices of
an H-polytope $P_H$.
Let $V$ be a set of vertices of $P_H$
generated so far.
Take the first inequality from the H-representation,
and ask whether we have generated all vertices on
the face $F_1$, the intersection of $P_H$ and
the hyperplane given by the first inequality being
forced to be equality. This is just one application
of the verification algorithm. If yes, we move to
the second inequality and repeat. Otherwise, we go
down to lower dimensional face by setting one of
the remaining inequality to equality. When we have
$d$-independent equalities, we compute the unique vertex
by solving the equation system. The key observation
is that we generate a subproblem only when the verification
algorithm returns NO answer. This means every subproblem
created generates at least one new vertex. This guarantees
our generation algorithm to be polynomial.
I do not know who is the first to recognize this reduction.
I consider this belongs to folklore.
Finally I repeat: the complexity of the polyhedral verification
problem is unknown. Is it in P or in coNP-complete?
This is perhaps the most important question in polyhedral
computation.
A fascinating question, indeed.
\subsection{Is there an
efficient way of determining whether a given point $q$
is in the convex hull of a given finite set $S$ of points in $R^d$?}
\label{polytope:Vredundancy}
Yes. However, we need to be careful.
First we give a method that we do not recommend but many people use.
This method computes an inequality
representation $\{x\in R^d: A x \le b \}$ of $conv(S)$ where
$A$ is some $m \times d$ matrix and $b$ is a $m$-vector.
This is called the convex hull computation
\ref{polytope:convhullcomp}. Once the system $A x \le b$ is
computed, it is easy to check whether $p$ satisfies the system
or not.
In most cases, this method is too expensive, since the convex
hull computation is very hard in general and impossible for
large data. In fact,
the number of inequalities in such a system $A x \le b$
is often exponential in $d$ and $n=|S|$.
(This method might be of practical interests when we need to
remove lots of redundant points in clouds of points in small dimensions,
see \ref{polytope:Vredundancy2}.)
A standard method to check
whether $q$ is in $conv(S)$ uses
linear programming (LP) technique \ref{Sec:LP}.
An LP problem to be formulated for
the question is the following. Let $S=\{p_1, p_2, \ldots, p_n \}$.
\begin{align} \label{eq:Vredundancy_lp1}
\begin{array}{lll}
\text{find} & \lambda\\
\text{satisfying} & q = \sum_{i=1}^n \lambda_i p_i \\
& \sum_{i=1}^n \lambda_i = 1\\
& \lambda_i \ge 0 \text{ for all } i=1, \ldots, n.
\end{array}
\end{align}
This problem has no objective function and such a problem is
often called a {\em linear feasibility problem}. Although it
might look simpler problem to solve, it is polynomially equivalent
to the general LP. In fact, it is usually a good idea to set up
an equivalent LP to solve it. More specifically, the problem
(\ref{eq:Vredundancy_lp1}) has a solution if and only if the following
has no solution:
\begin{align} \label{eq:Vredundancy_lp2}
\begin{array}{lll}
\text{find} & z_0\in R \text{ and } z \in R^d\\
\text{satisfying} & z^T p_i \le z_0 \text{ for all } i=1, \ldots, n\\
& z^T q > z_0.
\end{array}
\end{align}
Geometrically, the meaning of this problem is simple. If it admits
a solution $(z_0, z)$, then the set $H=\{x \in R^d: z^T x = z_0 \}$
is a hyperplane in $R^d$ separating the polytope $conv(S)$ from the
inquiry point $q$. Thus the existence of the separation means
the nonredundancy. Now, to actually solve the problem
(\ref{eq:Vredundancy_lp2}), we set up the LP:
\begin{align} \label{eq:Vredundancy_lp3}
\begin{array}{lll}
f^* = &\text{maximize} & z^T q - z_0\\
&\text{subject to} & z^T p_i - z_0 \le 0\text{ for all } i=1, \ldots, n\\
& & z^T q - z_0 \le 1.
\end{array}
\end{align}
The last inequality is artificially added so that the LP has
a bounded solution. It is easy to see that the point $q$ is
non-redundant if and only if the optimal value $f^*$ of
the LP (\ref{eq:Vredundancy_lp3}) is (strictly) positive.
\subsection{How can one remove all interior points of $conv(S)$ from $S$
for large clouds $S$ of points in $R^d$?}
\label{polytope:Vredundancy2}
The problem is formally known as the {\em redundancy removal}.
Let $S$ be a set of $n$ points in $R^d$.
We say a point $q \in S$ is {\em redundant\/} (for $conv(S)$) if
$q \in conv(S-q)$. In short, redundant points are unnecessary
to determine the convex hull $conv(S)$.
In principle, one can apply the linear programming (LP)
method given in \ref{polytope:Vredundancy}
to remove all redundant points. This amounts to solving $n$ LPs.
While the time complexity of this pure LP method is polynomial and
additional techniques given by \cite{c-mosga-94,oss-eephd-95}
can reduce the size of LPs,
this might end up in
a very time consuming job for large $n$ (say $>1,000$).
We have recently tested Clarkson's algorithm \cite{c-mosga-94}
experimentally. Initial results posted in
\url{https://people.inf.ethz.ch/fukudak/ClarksonExp/ExperimentCube.html}\\
indicate a huge acceleration for highly redundant cases.
There is a technique that might be useful to remove
``obviously redundant'' points quickly as a preprocessing.
This works only in small dimensions (probably up to $100$?).
Such a method
picks up a few nonredundant point set $T=\{t_1, \ldots, t_k\}$ from $S$.
Selecting nonredundant points can be done by picking points
maximizing (or minimizing) any given linear function over $S$.
When $k$ is small relative to $d$, say $d+2$ or $d+3$, the computation
of $conv(T)$ is usually very easy with any standard convex hull
algorithm. Thus we assume that an inequality
system $A x \le b$ such that $conv(T)=\{x: A x \le b\}$ is given.
It is easy to see that any point $q \in S-T$ satisfying
the inequalities (i.e. $A q \le b$) is redundant.
One can repeat the same procedure with a different set
$T'$ of nonredundant points as long as it removes
``sufficient number'' of redundant points.
\subsection{Is there any efficient algorithm to remove
redundant inequalities from a system of linear inequalities}
\label{polytope:Hredundancy}
This problem is essentially equivalent to the redundancy
removal from point sets given in \ref{polytope:Vredundancy2}.
Although one can transform one to the other, let us describe
a direct method. Let $A x \le b, s^T x \le t$ be a given system of $m$-inequalities in $d$-variables $x=(x_1,x_2,\ldots,x_d)^T$.
We want to test whether the subsystem of first $m-1$ inequalities $A x \le b$
implies the last inequality $s^T x \le t$. If so,
the inequality $s^T x \le t$ is redundant
and can be removed from the system.
A linear programming (LP)
formulation of this checking is rather straightforward:
\begin{align} \label{eq:Hredundancy_lp1}
\begin{array}{lll}
f^* = &\text{maximize} & s^T x\\
&\text{subject to} & A x \le b
\\
& & s^T x \le t+1.
\end{array}
\end{align}
Then the inequality $s^T x \le t$ is redundant if and only if
the optimal value $f^*$ is less than or equal to $t$.
By successively solving this LP for each untested inequality
against the remaining,
one would finally obtain a equivalent non-redundant system.
As we discussed in \ref{polytope:Vredundancy2}, there is
a very promising idea to improve the naive LP technique above.
It is proposed by Clarkson \cite{c-mosga-94} .
The main idea is the following. Let's denote by $m'$ the number of
nonredundant constraints which is not known in advance. Clarkson's algorithm uses
the same LP technique but for a subsystem $A' x \le b'$ of $A x \le b$
of size at most $m'$.
\begin{align} \label{eq:Hredundancy_Clarkson}
\begin{array}{lll}
f^* = &\text{maximize} & s^T x\\
&\text{subject to} & A' x \le b'
\\
& & s^T x \le t+1.
\end{array}
\end{align}
The subsystem is the currently recognized system of nonredundant
constraints at some stage. If the tested inequality is redundant for
this subsystem, then obviously it is redundant for the whole system.
What can we do if the tested inequality is nonredundant? There is
a so called ``ray-shooting'' technique that will find a new nonredundant
inequality. The detailed discussion can be found in the textbook \cite[Chap 7]{f-pc-20}.
We have tested Clarkson's algorithm \cite{c-mosga-94}
experimentally. Initial results posted in
\url{https://people.inf.ethz.ch/fukudak/ClarksonExp/ExperimentCube.html}\\
indicate a huge acceleration for highly redundant cases.
%As we discussed in \ref{polytope:Vredundancy2}, one might
%be able to remove many redundant inequalities by using
%the same technique in dual form. Let $A x \le b$ be the
%given system with high redundancy. The first step is to
%select a small subsystem $A' x \le b'$ of non-redundant inequalities from
%the original system. Typically such a system contains
%only $d+k$ inequalities for some small $k$ (say $2$ or $3$).
%The second step is to compute all extreme points
%of $P'=\{x : A' x \le b'\}$. (Here we assume that $P'$ is bounded,
%but one can generalize the technique for the unbounded case.)
%This is known as the vertex enumeration computation, \ref{polytope:repconv}.
%Clearly $P'$ contains the feasible region $P=\{x : A x \le b\}$.
%The final step is to test whether each original inequality
%is satisfied by all extreme points and rays.
%If so, the inequality is redundant for the subsystem and
%thus redundant for the original system.
\subsection{Is there any efficient algorithm to compute
the intersection of two (or $k$) polytopes}
\label{polytope:kintersection}
Let $k \ge 2$, and let $P_1, \ldots, P_k$ be input polytopes
in $R^d$, and let $P=P_1 \cap P_2 \cap \cdots \cap P_k$ be
the polytope we want to compute.
This problem of computing $P$ needs to be specified further. Namely,
what is the representation of input and that of output?
If the input polytopes are H-polytopes (given by inequalities)
then the intersection is represented by the union of
the two inequality systems. To get a minimal H-reprentation
for the intersection is just a redundancy removal given
in Section \ref{polytope:Hredundancy}. To get a minimal V-representation
for the intersection is the vertex enumeration problem explained
in Section \ref{polytope:repconv}.
An interesting case is when both input and output polytopes
are V-polytopes (i.e. given by vertices and perhaps some
redundant points). One primitive way to solve this problem
consists of two steps: (1) generate minimal H-representations
of each of the input $k$ polytopes, (2) solve the vertex
enumeration problem for the union of
the $k$ H-representations. This naive approach might be
satisfactory for small dimensions or not-too-complicated polytopes.
Recently, a polynomial algorithm has been found for the special
case when the input polyopes are in general position \cite{fll-ech-00}.
This algorithm is not yet practical because the general
position assumption does not seem to be easily simulated
for the general case. It should be remarked that the dual
version of this problem is to compute a minimal H-representation
of the convex hull of $k$ H-polytopes. Actually the paper \cite{fll-ech-00}
treats this dual problem.
\subsection{Is there any efficient algorithm to compute
the volume of a convex polytope in $R^d$?}
\label{polytope:volume}
It is known that computing the volume of a $V$-polytope
(or H-polytope) is \#P-hard, see \cite{df-tccvp-88}
and \cite{k-cpvc-93}. There are theoretically efficient randomized algorithms
to approximate the volume of a convex body \cite{ls-rwcbi-93}
but no implementation seems to be available.
There is a comparative study \cite{bef-cevcm-00} of various
volume computation algorithms
for convex polytopes. It indicates that there is no single
algorithm that works well for many different types of polytopes.
For ``near'' simple polytopes, triangulation-based algorithms are
more efficient. For ``near'' simplicial polytopes, sign-decomposition-based
algorithms are better. See the paper for the justification of
these claims.
% --------------------- Voronoi --------------------------------------
\section{Voronoi Diagram and Delaunay Triangulation} \label{Sec:voronoi}
\subsection{What is cell complex? What is triangulation?}
\label{voronoi:complex}
A {\em cell complex\/} or simply {\em complex} in
$R^d$ is a set $K$ of convex polyhedra (called
{\em cells\/}) in $R^d$ satisfying two conditions:
(1) Every face of a cell is a cell (i.e. in $K$), and (2) If $P$ and $P'$ are
cells, then their intersection is a common face of both.
A {\em simplicial complex\/} is a cell complex whose cells are all
simplices.
The {\em body\/} $|K|$ of a complex $K$ is the union of all cells.
When a subset $P$ of $R^d$ is the body of a simplicial complex $K$,
then $K$ is said to be a {\em triangulation\/} of $P$.
For a finite set $S$ of points in $R^d$, a {\em triangulation of $S$}
is a simplicial complex $K$ with $|K|=conv(S)$.
\subsection{What is Voronoi diagram in $R^d$?} \label{voro:def}
See also \ref{voro:dela_def}.
Given a set $S$ of $n$ distinct points in $R^d$,
Voronoi diagram is the partition of $R^d$ into $n$ polyhedral regions
$vo(p)$ ($p \in S$). Each region $vo(p)$,
called the {\em Voronoi cell\/} of $p$,
is defined as the set of points in $R^d$ which are
closer to $p$ than to any other points in $S$, or more precisely,
\[