TP : recherche d’une enveloppe convexe
Option info MPSI
Étant donné un ensemble de points, on cherche leur ensemble convexe, c’est à dire le plus petit ensemble
convexe contenant ces points.
On représentera un point par un couple de flottants et un ensemble de points par une liste.
P0
P2
P3
P1
Q
P4
Figure 1 – Un ensemble de points avec son enveloppe convexe
I Fonctions utilitaires
1. Écrire une fonction det prenant 3 points P,Q,Ren arguments et renvoyant det(
P Q,
P R).
2. En déduire une fonction direct qui prend 3 points P,Q,Ren arguments et renvoie true ssi (
P Q,
P R)
est un angle dans le sens direct (c’est à dire dans le sens trigonométrique).
II Marche de Jarvis
La marche de Jarvis est un algorithme permettant de calculer une enveloppe convexe d’un ensemble de
points. Elle consiste à partir d’un point P0dont on sait qu’il est sur l’enveloppe convexe, puis à trouver le point
P1tel que (
P0P1,
P0Q)soit direct pour tout Q(voir Figure 1), et ainsi de suite jusqu’à revenir sur le point
initial P0.
1. Écrire une fonction mini_y qui prend une liste de points en arguments et renvoie le point ayant une
ordonnée minimum (si plusieurs points ont la même ordonnée minimum, on renverra celui qui est d’abscisse
minimum).
2. Écrire une fonction next qui prend une liste de points let un point pen arguments et qui renvoie le
prochain point de l, à partir de p, en suivant la marche de Jarvis.
3. Écrire une fonction jarvis renvoyant l’ensemble des points de l’enveloppe convexe, dans l’ordre, d’une
liste de points donnée en argument.
Le fichier tp_enveloppe.ml contient une fonction affiche telle que affiche lp enveloppe affiche les
points lp et relie les points de enveloppe. L’utiliser pour vérifier votre fonction.
On fermera la fenêtre graphique en appuyant sur une touche quelconque et non pas en cliquant sur la croix.
4. Quelle est la complexité de la fonction précédente, en fonction du nombre hde points sur l’ensemble
convexe et du nombre total nde points ?
1
III Intersections
1. On veut déterminer informatiquement si deux segments [P1P2]et [P3P4]se croisent. Que peut-on dire des
angles (
P1P2,
P1P3)et (
P1P2,
P1P4)dans ce cas ? En déduire une condition nécessaire et suffisante pour
que [P1P2]et [P3P4]s’intersectent et écrire une fonction le déterminant.
Vérifier avec les 4 points de la Figure 2, puis en échangeant P4et P2.
P1(0,0)
P2(3,2)
P3(4,1)
P4(1,2)
Figure 2 – [P1P2]et [P3P4]s’intersectent
2. Écrire une fonction ayant un point Pet une liste `de npoints en arguments et déterminant si Pest situé
à l’intérieur de l’enveloppe convexe de `.
Indice : on pourra considérer un point P« à l’infini » ((1000., 0.) suffira pour nous) et regarder le
nombre de fois que [P P]intersecte l’enveloppe convexe de `.
Vérifier que (2,2) est dans l’enveloppe des points sur la Figure 2, mais que (2,2.5) n’y est pas.
3. Quelle est la complexité de l’algorithme précédent ?
IV Compléments
La marche de Graham est une autre méthode qui permet de trouver l’enveloppe convexe d’un ensemble de
npoints, et qui a comme complexité O(nlog(n)).
1. Montrer qu’un algorithme en complexité C(n)pour la recherche d’une enveloppe convexe peut être utilisé
pour trier un tableau de nentiers en complexité C(n). En déduire la complexité optimale d’un algorithme
de recherche d’enveloppe convexe.
Indice : si test un tableau d’entiers, considérer les points (t.(i),t.(i)2).
On s’intéresse à une application de la recherche d’une enveloppe convexe : trouver les deux points les plus
éloignés parmi npoints.
2. Quelle est la complexité de la méthode naïve ? L’implémenter.
3. Améliorer l’algorithme précédent en remarquant que les deux points les plus éloignés sont forcément sur
l’enveloppe convexe.
4. Quelle est la complexité de l’algorithme précédent si on utilise la marche de Graham pour trouver l’enve-
loppe convexe ?
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !