Soit un ensemble de nombres naturels. Nous considérons sous l'ordre partiel de divisibilité, c'est-à-dire s_1 \ leq s_2 \ iff s_1 \ mid s_2 . LaisserS s 1 ≤ s 2
an antichain .
Si nous considérons le problème de la somme des sous-ensembles où le multi-ensemble de nombres est dans , que pouvons-nous dire de la complexité du problème lié à ? Il est simple de voir si , alors le problème est facile. Notez qu'il est facile même pour le problème de sac à dos plus difficile lorsque .
Résolution de problèmes séquentiels de sacs à dos par M. Hartmann et T. Olmstead (1993)
Réponses:
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) .
QueC 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:xv v∈S yC C (P)
et son double :(D)
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]
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) X s1,s2∈X s1≤s2 s2≤s1 X {v1,v2}
la source