# Géométrie algorithmique

La géométrie algorithmique est le domaine de l'algorithmique qui traite des algorithmes manipulant des concepts géométriques.

## Définition et premiers exemples

La géométrie algorithmique est l'étude des algorithmes manipulant des objets géométriques. Par exemple, le problème algorithmique qui consiste, étant donné un ensemble de points dans le plan décrits par leurs coordonnées, à trouver la paire de points dont la distance est minimale est un problème d'algorithmique géométrique.

## Histoire et utilisations

L'une des origines de la discipline est le fait que des modèles informatique, c'est-à-dire de la réalité virtuelle, remplace les maquettes dans la conception d'objets, à partir des années 1970. Ces modèles permettent ensuite l'étude d'une grande diversité de phénomène du monde réel. La discipline qui a sans doute le plus contribué historiquement au développement de la géométrie algorithmique est l'infographie. Toutefois, à l'heure actuelle, la géométrie algorithmique se voit fréquemment impliquée dans des problèmes d'algorithmique générale.
La géométrie algorithmique est aujourd'hui utilisée en infographie, en robotique, pour les systèmes d'information géographique, et la conception par ordinateur.

## Structure de données classiques

Certaines structures pouvant être utilisées à l'entrée du problème ou à l'intérieur de l'algorithme sont centrales en géométrie algorithmique : les polyèdres, les diagrammes de Voronoï, et les triangulations.

## Problèmes classiques
### Enveloppe convexe

L'enveloppe convexe d'un ensemble de points du plan est le plus petit polygone convexe contenant tous les points. Cette notion peut être immédiatement généralisée aux dimensions supérieures à 2.
Le meilleur algorithme connu actuellement permettant de déterminer l'enveloppe convexe d'un ensemble quelconque de n points en 2D (le parcours de Graham) ou 3D est en O(n log(n)). Sans connaissances additionnelles sur les données, on ne peut pas faire mieux que Ω(n log(n)) ; cependant, plusieurs algorithmes en O(n) existent pour traiter le cas de polygones simples (polygones non auto-intersectants) donnés dans l'ordre d'apparition des points. Il existe aussi des algorithmes où la complexité est donné en fonction du nombre de points n mais aussi en fonction du nombre h de points dans l'enveloppe convexe (i.e. la sortie de l'algorithme) : la marche de Jarvis est un algorithme en O(nh) et l'algorithme de Chan est en O(n log h).
Dans le cas d'une dimension quelconque d (d > 3) les meilleurs algorithmes connus sont en $\Theta (n^{\lfloor {\frac {d}{2}}\rfloor })$.

### Problèmes d'algorithmique générale

La géométrie algorithmique fournit des solutions optimales pour des problèmes décrits sur un univers borné. En effet, celle-ci traite de problèmes énoncés en termes de points disposés sur une grille bornée [1, X] × [1, Y] de dimension 2. Par extension, elle traite ces mêmes problèmes sur des grilles de dimensions supérieures et sur des intervalles d'entiers (dimension 1).
Par exemple, étant donné un ensemble de points S dans l'intervalle d'entiers [1, U], il est possible de tirer profit du caractère borné de l'univers [1, U] pour résoudre certains problèmes en dessous de leur complexité minimale pour un univers non borné. Le cas le plus trivial et le plus connu est celui du tri linéaire, le bucket sort. Les éléments de S peuvent être triés en temps |S|+ U en parcourant S une première fois et en stockant chaque élément trouvé dans le « seau » correspondant dans une série de seaux numérotés de 1 à U.
De très nombreux problèmes d'algorithmique trouvent des solutions optimales dans un univers borné :
* Étant donné un ensemble S de cardinal n sur un intervalle entier [1, U],
** Récupérer l'élément de S le plus proche d'un x donné en temps ${\sqrt {\log(U)}}$ au lieu de log(n) grâce à la structure de q-fast-trie.
* Étant donné un ensemble S sur une grille [1, U] x [1, U].
** Récupérer tous les points qui dominent un point x sur leurs deux coordonnées en temps k + log(log(U)) si k est le nombre de réponses, au lieu de k+log(n). Voir aussi recherche par plage (range searching).
* Étant donné un ensemble I d'intervalles sur l'intervalle [1, U],
** Retrouver tous les intervalles de I qui passent par-dessus un point x donné en temps k + log(log(U)) au lieu de k + log(n) si k est le nombre de réponses, grâce à la structure d'arbre de recherche avec priorité.

### Quelques autres problèmes importants

* Diagramme de Voronoï et son graphe dual la triangulation de Delaunay
* Intersection de deux segments (en)
* Intersection de deux droites (en)
* Recherche des deux points les plus rapprochés
* Triangulation d'un polygone
* Problème de la galerie d'art

## Difficultés et techniques

Une difficulté est le fléau de la dimension : les algorithmes classiques deviennent inutilisable si les données appartiennent à un espace de grande dimension. Une technique classique est d'utiliser des algorithmes probabilistes.