AccueilđŸ‡«đŸ‡·Chercher

Algorithme de Preparata-Hong

L'algorithme de Preparata-Hong est une mĂ©thode algorithmique pour calculer l'enveloppe convexe d'un ensemble fini de points dans l'espace euclidien de dimension 2 (le plan) ou de dimension 3 (l’espace). L'algorithme prĂ©sente une stratĂ©gie utilisant le paradigme "diviser pour rĂ©gner". Cet article prĂ©sente uniquement le cas de la dimension 2.

Description du problĂšme

On considÚre un ensemble fini de points. On suppose sans perte de généralité que tous les points ont toutes leurs coordonnées différentes. On cherche à trouver les sommets de son polygone convexe.

Principe en dimension 2

On commence par ranger les points de dans l'ordre croissant selon la derniÚre (i.e. deuxiÚme) coordonnée. Notons le cardinal de . Soit l'ensemble aprÚs le tri.

Cas de base

Le cas de base dans l’algorithme diviser pour rĂ©gner survient lorsqu’il y a 1, 2 ou 3 points. Dans ce cas, le calcul de l’enveloppe convexe est facile Ă  calculer : il s'agit d'un point, d'un segment pour 2 points, d'un segment ou un triangle pour 3 points.

Cas récursif

S’il y a plus de 3 points, on commence par sĂ©parer l’ensemble des points en deux parties infĂ©rieure et supĂ©rieure de mĂȘme cardinal Ă  un point prĂšs, et on calcule leur enveloppe convexe respective par la stratĂ©gie diviser pour rĂ©gner. On note et deux ensembles qui forment une partition de (on a pris pour la moitiĂ© plus Ă©ventuellement un des points de qui sont le plus "en bas" et le complĂ©mentaire de dans , c'est-Ă -dire la moitiĂ© moins Ă©ventuellement un des points de qui sont le plus "en haut"). On appelle enveloppe convexe infĂ©rieur l'enveloppe convexe de et enveloppe convexe supĂ©rieur l'enveloppe convexe de .

Ensuite, on vise Ă  reconstruire l’enveloppe convexe globale Ă  partir de ces enveloppes convexes infĂ©rieure et supĂ©rieure, en les reliant Ă  la fois Ă  gauche et Ă  droite de la figure, par l’algorithme de fusion. À droite de la figure, on cherche Ă  relier deux points provenant des parties infĂ©rieure et supĂ©rieure, en faisant en sorte que tous les points dans les deux parties soient Ă  gauche de la droite tracĂ©e.

  • Deux enveloppes convexes de points
    Les enveloppes convexes supérieure et inférieure à fusionner.
  • Fusion des deux enveloppes convexes Ă  gauche et Ă  droite
    Jointure des enveloppes convexes.
  • Une unique enveloppe convexe
    L'enveloppe convexe finale fusionnée.

On applique pour cela l’algorithme suivant (on appelle et les parties infĂ©rieure et supĂ©rieure respectivement) :

  • On part des points les plus Ă  droite de chaque partie, pour et pour ,
  • On cherche dans tel que la pente de soit supĂ©rieure Ă  la pente de ,
  • On cherche dans tel que la pente de soit infĂ©rieure Ă  la pente de ,
  • On itĂšre jusqu’à rencontrer un blocage.

À la fin de cet algorithme, on relie les deux points dans et que l’on a trouvĂ©s. On rĂ©alise la mĂȘme opĂ©ration Ă  gauche de et , en adaptant l’algorithme ci-dessus, et on retire les arĂȘtes superflues dans le nouveau polygone.

Algorithme de fusion dans le cas de la dimension 2

DĂ©termination de la tangente Ă  droite
Play Pause Stop Précédent Suivant Select

C'est l'algorithme que l'on va utiliser pour fusionner les enveloppes convexes supérieur et inférieur.

Soient et deux polygones convexes du plan euclidien.

Soient des entiers strictement positifs, reprĂ©sentant respectivement le nombre de sommets de et de . Soient et les sommets en question. On suppose que les ordonnĂ©es des points du premier ensemble sont toutes strictement infĂ©rieures Ă  celles des points du second ensemble. On suppose que dans la rĂ©union de ces deux ensembles, les abscisses et les ordonnĂ©es sont distinctes deux-Ă -deux. Supposons aussi que dans chaque ensemble, on range les sommets dans le sens horaire de leur parcours sur le polygone Ă  partir du sommet le plus "Ă  droite" (celui d'abscisse la plus grande, il est reprĂ©sentĂ© sur les figures ci-contre respectivement pour A et B par et ). À l'aide de l'algorithme prĂ©cĂ©dent, on cherche Ă  calculer l'enveloppe convexe de la rĂ©union de ces deux ensembles de points, qu'on va noter , Ă  partir de et . Pour des raisons pratiques, on pourra raisonner sur les indices des sommets de et respectivement modulo et modulo . Nous allons considĂ©rer que (le cas se traite de maniĂšre analogue, en ce qui concerne Ă  la fois le pseudo-code et la correction).

Pour et , on note la pente de la droite . Pour on note la pente de la droite et pour on note la pente de la droite . On note et respectivement les indices du sommet de le plus "Ă  gauche" (celui d'abscisse la plus petite) et du sommet de le plus "Ă  gauche" (celui d'abscisse la plus petite).

Le but de l'algorithme qui va suivre est de trouver la tangente droite de . Voici le pseudo-code de l'algorithme, on notera et respectivement l'abscisse et l'ordonnĂ©e de oĂč est un point du plan euclidien, et on suppose que les coordonnĂ©es des sommets de et et que les valeurs pour et pour sont stockĂ©es dans des tableaux (accessibles Ă  coĂ»t constant) :



Soient

On Ă©crit

Si et faire et recommencer Ă  partir de

Si et faire et recommencer Ă  partir de

Renvoyer le couple


Il est facile de voir que l'algorithme termine car on incrĂ©mente et de 1 si on doit recommencer Ă  partir de la deuxiĂšme ligne de pseudo-code et dans le cas marginal oĂč et on passe directement Ă  la derniĂšre ligne de pseudo-code. De lĂ , on remarque aussi que la complexitĂ© de l'algorithme est en , et donc en .

Correction de l'algorithme

Rechercher la tangente droite consiste à trouver les indices dans et dans telles que les points et soient ses extrémités. On se restreint au cas et .

Notons déjà quelques résultats qui s'obtiennent grùce à la convexité de et :

ligne brisée convexe
  • la suite est dĂ©croissante (voir la concatĂ©nation des segments associĂ©s comme une fonction convexe)
  • la suite est dĂ©croissante (voir Ă©galement la concatĂ©nation des segments associĂ©s comme une fonction convexe)
tangente droite pour les convexes A et B

Ainsi, on peut caractériser géométriquement la pente de la tangente droite (de façon qu'elle constitue bien un cÎté de l'enveloppe convexe issu de la fusion de et ) par :

  • si , alors ;
  • si , alors ;
  • si , alors ;
  • si , alors .


Il reste alors à montrer que l'algorithme renvoie bien ce que l'on souhaite, c'est-à-dire les indices dans et dans vérifiant la caractérisation ci-dessus.

On sait que l'algorithme s'arrĂȘte quand on a les deux conditions et . Pour ĂȘtre sĂ»r que et , il faut s'assurer que l'on a l'intĂ©gralitĂ© de la caractĂ©risation prĂ©cĂ©dente. Pour cela, on distingue trois cas :

  • soit on a , auquel cas on a directement la caractĂ©risation, l'algorithme renvoie bien ce que l'on souhaite ;
  • soit on a auquel cas soit la ligne 3 soit la ligne 4 n'est jamais exĂ©cutĂ©e, on peut alors montrer facilement que l'on a caractĂ©risation en se penchant sur la seule ligne itĂ©rĂ©e ;
  • soit il y a dĂ©jĂ  eu une itĂ©ration de la ligne 3 et la ligne 4 de pseudo-code, on distingue alors deux sous-cas :


l'indice est le dernier indice auquel on a fait une incrĂ©mentation, auquel cas on avait juste avant l'incrĂ©mentation, on a aussi (regarder le triangle sur la figure ci-contre) et par succession d'inĂ©galitĂ©s des pentes sur la chaĂźne , on rĂ©itĂšre l'inĂ©galitĂ© pour remonter Ă  juste aprĂšs la derniĂšre incrĂ©mentation de l'indice (qui existe par hypothĂšse) et l'indice correspondant vĂ©rifie (car l'incrĂ©mentation de indique de et donc la chaĂźne est concave), par la chaĂźne d'inĂ©galitĂ© on a bien , de mĂȘme (par inĂ©galitĂ© des pentes sur la fonction convexe issue de la chaĂźne ) cela donne : en incrĂ©mentant (de 1), on a finalement les conditions et ;


l'indice est le dernier indice auquel on a fait une incrĂ©mentation, juste avant cette incrĂ©mentation on a . De mĂȘme on ne peut pas avoir , sinon on a la chaĂźne qui est concave, ce qui entraĂźne (inĂ©galitĂ© des pentes) et comme la chaĂźne est concave par hypothĂšse, on obtient et donc que la chaine est concave , ce qui veut dire que ; si on revient sur le pseudo-code, si juste avant la derniĂšre incrĂ©mentation de on avait une incrĂ©mentation de , alors on aurait eu d'aprĂšs la troisiĂšme ligne de pseudo-code que , ce qui est impossible ; donc comme il est supposĂ© qu'on a incrĂ©mentĂ© au moins une fois, juste avant la derniĂšre incrĂ©mentation de , on a encore une autre incrĂ©mentation de avec ; il s'obtient alors par rĂ©currence qu'on ne va jamais atteindre dans l'exĂ©cution de l'algorithme : contradiction. On a alors la premiĂšre inĂ©galitĂ© . Aussi, comme la chaĂźne est concave par hypothĂšse, on obtient directement . Donc, en incrĂ©mentant (de 1), on a bien les conditions et .

Ceci termine la preuve de la correction de l'algorithme.

ComplexitĂ© temporelle de l’algorithme

On suppose que pour un ensemble initial de points du plan, cet algorithme de fusion est exécuté en temps . Ainsi, en notant la complexité temporelle associée au calcul de l'enveloppe convexe de points du plan euclidien, stockés dans un tableau et triés par avance dans l'ordre croissant selon une coordonnée, on a la relation de récurrence suivante :

Par le master theorem ou par une analyse Ă  la main, on conclut que est en . Comme le tri d'un tableau (par exemple par tri fusion) peut ĂȘtre rĂ©alisĂ© en temps , la complexitĂ© totale de l'algorithme est elle aussi en .

Une autre approche du problĂšme

Il existe une autre façon de calculer l'enveloppe convexe de en calculant deux convexes non bornés dont l'intersection des deux donne l'enveloppe convexe final, en déterminant pour chacun de ces convexes l'ensemble des segments et demi-droites qui les délimitent. Il s'agit d'une méthode proposée par F. Preparata et M. Shamos.

Liens externes

Sources

  • Article original de Preparata et Hong - Convex Hulls of Finite Sets of Points in Two and Three Dimensions[1]
  • Calcul de complexitĂ© : le Master theorem - Algorithms[2] (Sanjoy Dasgupta, Christos H. Papadimitriou, Umesh V. Vazirani) ; Introduction to algorithms[3] (Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein)
  • Calcul d'enveloppe convexe - Gestion dynamique d'une enveloppe convexe[4] (enseignement de l'informatique Ă  l'Ă©cole Polytechnique de France)

Notes et références

  1. (en) F. P. Preparata ; S. J. Hong, « Convex Hulls of Finite Sets of Points in Two and Three Dimensions »,
  2. (en) Sanjoy Dasgupta, Christos H. Papadimitriou, Umesh V. Vazirani, Algorithms, McGraw-Hill,
  3. (en) Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, Introduction to algorithms, MIT press,
  4. Jean Berstel, « Gestion dynamique d'une enveloppe convexe »
Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.