Table des matières

Deux points les plus proches

Page Wikipedia

On donne un tableau de points du plan avec leurs coordonnées $(x\,;\,y)$.

Quels sont les deux points les plus proches ?

Algorithme naïf

Consiste à chercher les distances pour les $\frac{n\,(n-1)}{2}$ paires de points possibles. Il s'agit donc d'un algorithme en $n^2$, c'est à dire que s'il y a $10\times$ plus de points, l'algorithme sera $100\times$ plus long.

Algorithme quasi-linéaire

Quasi-linéaire signifie que s'il y a $10\times$ plus de points, le temps de calcul sera quasiment $10\times$ plus long. On comprend que cet algorithme devient beaucoup plus rapide quand le nombre de points augmente. Il faut bien sûr considérer de très grands nombres, par exemple 100 000. Tant qu'il n'y a qu'une centaine de points, la machine calcule très vite sans qu'on perçoive de différence.

Il s'agit d'un algorithme de type diviser pour régner.

Description générale

On réalise une fonction recherche qui reçoit en argument une liste points de paires (x,y).

Si le nombre n de paires est inférieur ou égal à 3, on se contente de faire une recherche exhaustive de la paire la plus proche.

Sinon on lance le mécanisme habituel de la méthode diviser pour régner qui procède en 3 étapes :

Diviser

Déterminer une abscisse $x_0$ permettant de couper la liste de points en deux. Ceux à gauche et ceux à droite de $x_0$. On forme ainsi deux ensembles de points que l'on peut appeler $G$ et $D$.

Régner

On exécute recherche sur les deux sous ensembles, $G$ et $D$. On obtient ainsi la paire de points les plus proches dans $G$ et la paire de points les plus proches dans $D$.

Combiner

C'est le plus compliqué :

Pour faciliter la tâche

Il pourra être utile de trier les points dès le départ selon les $x$ croissants.

Implémentation

Vous devez implémenter cet algorithme et le tester.

Puisqu'il s'agit d'optimiser un temps d'exécution, il sera bienvenu de prévoir une comparaison de temps d'exécution entre cet algorithme et un algorithme naïf.