Je vais esquisser un algorithme correct et polytemporel. Il y a sans aucun doute des améliorations à apporter à la structure des données, mais je pense qu'une meilleure compréhension de ce problème en particulier sera nécessaire pour rechercher de très grands ensembles de données (ou, peut-être, une limite supérieure ad hoc sur les dimensions de la boîte contenant le polygone).
La boucle principale consiste à deviner le point p le plus bas dans le plus grand polygone convexe (en départageant les égalités en faveur du point le plus à gauche), puis à calculer le plus grand polygone convexe possible avec p et des points q tels que (q.y > p.y) || (q.y == p.y && q.x > p.x).
Le programme dynamique s'appuie sur les mêmes faits géométriques que Le scanner de Graham . Supposons sans perte de généralité que p = (0, 0) et classons les points q dans l'ordre de l'angle qu'ils font avec l'axe des x dans le sens inverse des aiguilles d'une montre (comparez deux points en considérant le signe de leur produit de points). Soit les points dans l'ordre trié q 1 , , q n . Soit q 0 \= p. Pour chaque 0 ≤ i < j ≤ n, nous allons calculer le plus grand polygone convexe sur les points q 0 un sous-ensemble de q 1 , , q i - 1 , q i et q j .
Les cas de base où i = 0 sont faciles, puisque le seul "polygone" est le segment de surface nulle q 0 q j . Inductivement, pour calculer l'entrée (i, j), nous allons essayer, pour tout 0 ≤ k ≤ i, d'étendre le polygone (k, i) avec (i, j). Quand pouvons-nous le faire ? En premier lieu, le triangle q 0 q i q j ne doit pas contenir d'autres points. L'autre condition est que l'angle q k q i q j n'a pas intérêt à être un virage à droite (une fois de plus, vérifiez le signe du produit de points approprié).
A la fin, renvoyer le plus grand polygone trouvé. Pourquoi cela fonctionne-t-il ? Il n'est pas difficile de prouver que les polygones convexes ont la sous-structure optimale requise par le programme dynamique et que le programme considère exactement les polygones qui satisfont la caractérisation de Graham de la convexité.