Ce problème peut être résolu en temps polynomial en utilisant une programmation linéaire, et cela est en fait vrai pour tout ordre partiel (S,≤) . Soit dit en passant, nous pouvons prouver par induction que pour tout ensemble d'ordre partiel fini (S,≤) , il existe un ensemble fini S′⊆N et une bijection f:S→S′ , telle que pour tous s1,s2∈S,s1≤s2⇔f(s1)|f(s2) .
Que C l'ensemble formé par les chaînes en S . Rappelez-vous que C est une chaîne ssi pour tout v,v′ en C , v≤v′ ou v′≤v
Maintenant créer une variable booléenne pour chaque , et une variable booléenne pour chaque chaîne . Nous pouvons écrire le programme linéaire suivant pour notre problème:
xvv∈SyCC(P)
Max∑v∈Sxvsubject to∑v∈Cxv≤1,∀C∈Cxv∈{0,1},v∈S
et son double :(D)
Min∑C∈CyCsubject to∑C:v∈CyC≥1,∀v∈SyC∈{0,1},C∈C
Ensuite, le problème de trouver la couverture minimale d'un ensemble ordonné par chaînes est le double de notre problème. Le théorème de Dilworth déclare que
Il existe une antichaine A, et une partition de l'ordre en une famille P de chaînes, de sorte que le nombre de chaînes dans la partition est égal à la cardinalité de A
ce qui signifie que la solution optimale de ces deux problèmes correspond:Opt(P)=Opt(D)
Soit ( resp. ) la relaxation de ( resp. ) ie le même programme linéaire où toutes les contraintes ( resp. ) sont remplacés par ( resp. ). Soit et leurs solutions optimales. Depuis nous avons:
et une dualité faible le théorème établit que(P∗) (D∗)(P) (D)xv∈{0,1} yC∈{0,1}xv∈[0,1] yC∈[0,1]Opt(P∗)Opt(D∗){0,1}⊆[0,1]
Opt(P)≤Opt(P∗) and Opt(D∗)≤Opt(D)
Opt(P∗)≤Opt(D∗)puis en mettant tout ensemble on a:
Opt(P)=Opt(P∗)=Opt(D∗)=Opt(D)
Ensuite, en utilisant la méthode Ellipsoïde , nous pouvons calculer ( ) en temps polynomial. Il existe un nombre exponentiel de contraintes mais il existe un oracle de séparation temporelle polynomiale. En effet étant donné une solution , on peut énumérer tous les couples et vérifier si ou , et donc décider en temps polynomial si est faisable ou sinon la contrainte associée à la chaîne est violé.Opt(P∗)=Opt(P)Xs1,s2∈Xs1≤s2s2≤s1X{v1,v2}