Paire de points la plus rapprochée
Comment déterminer la paire de points la plus rapprochée dans E. Une méthode naïve consiste à calculer la distance entre toute
paire de nœuds, ce qui donne un algorithme en O(n2). On peut faire mieux.
À une dimension, le problème est simple. En effet, il suffit de trier les points de E de la gauche vers la droite. On divise ensuite
E en 2 parties E1 et E2, avec E1 contenant les |E|/2 points les plus à gauche. Soit i la plus courte distance entre 2 points de Ei
et soit 3 la distance entre le point le plus à droite de E1 et le point le plus à gauche de E2. La plus courte distance entre deux
points de E est alors min{1,2,3}.
Le tri initial se fait en O(n log2n). Soit t(n) le temps de calcul du reste de cet algorithme. On a donc t(n)=2t(n/2)+cn, ce qui
donne une complexité totale de O(n log2n). On peut utiliser une stratégie similaire dans le plan. Supposons qu’on dispose de 2
liste triées des points de E, l’une par ordre croissant des coordonnées x et l’autre par ordre croissant des coordonnées y.
Algorithme PaireLaPlusProche (input E; output )
Si E contient moins de 4 points alors déterminer la plus courte distance en comparant toutes les distances.
Sinon
Créer E1 = ensemble des
premiers points de la liste ordonnée selon x et E2 = les autres points.
Déterminer i par des appels récursifs à PaireLaPlusProche avec les inputs Ei (i=1,2).
Soit ← min{1,2}. Soit x1 la plus grande coordonnée x dans E1 et soit x2 la plus petite coordonnée x dans E2.
Soit A1 l’ensemble des points de E1 de coordonnée x supérieure à x2-.
Soit A2 l’ensemble des points de E2 de coordonnée x inférieure à x1+.
Chaque point aA1 a au plus 6 points bA2 tel que distance(a,b) < . Calculer ces au plus 6|A1| distances et mettre à
jour si nécessaire.
Notons t(n) le temps requis par cet algorithme, sans compter la création des deux listes triées de points de E (selon x et y) qui
peuvent être obtenues une fois pour toute en O(n log2n).
La création de E1 et E2 se fait en O(n). Le calcul de 1 et 2 se fait en 2t(n/2).
La création de A1 et A2 se fait en O(n). Le calcul des au plus 6|A1| distances se fait en O(n) : lorsqu’on passe au prochain
point aA1, on doit reculer d’au plus 6 positions dans A2 pour trouver le premier candidat bA2.
Le temps total requis par cet algorithme est donc t(n)=2t(n/2)+cn, ce qui donne un algorithme en O(n log2n).
Pavages de Voronoï
Le locus, ou polygone de Voronoï associé à un point pE est l’ensemble des points du plan qui plus proche de p que des
autres points de E.
On peut donc construire une partition du plan en polygones de Voronoï. Cette partiton est appelée le pavage de Voronoï
associé à E. En supposant que les points de E sont en position générale, on a les propriétés suivantes
Propriétés
tous les sommets du pavage sont de degré 3;
tous les sommets du pavage sont le centre d’un cercle passant par 3 points de E et ne contenant aucun autre point de E;
si qE est le plus proche voisin de pE alors il existe une arête du pavage qui sépare p de q;
le locus associé à un point pE est infini si et seulement si p fait partie de l’enveloppe convexe de E.
Considérons le graphe dual D associé à un pavage P de Voronoï. Plus précisément, chaque polygone (face) de P correspond à
un sommet de D et deux sommets de D sont reliés par une arête si les deux faces correspondantes dans P ont une frontière
commune. Il y a donc une bijection entre E et les sommets de D. De plus, D est une triangulation de E, appelée triangulation
de Delaunay.
Propriété Tout pavage de Voronoï de E contient au plus 2n-5 sommets et au plus 3n-6 arêtes
Preuve Chaque arête du dual D correspond à une arête de P et chaque face finie de D correspond à un point de P. Comme D
est planaire, il contient au plus 3n-6 arêtes et 2n-4 faces. On déduit donc que P a au plus 3n-6 arêtes et au plus 2n-5 sommets
(car une face de D est infinie).