Ici, je montre que le problème est NP-complet.
Nous convertissons un CNF en une instance de votre problème comme suit. Supposons que les variables du CNF sont x i et les clauses sont m C j , où n < m . Soit U = ∪ i ( A i ∪ B i ∪ Z i ) où tous les ensembles de l'union sont complètement disjoints. En fait, A i = { a i , j ∣ x i ∈ C j } ∪ { a in xim Cjn<mU=∪i(Ai∪Bi∪Zi)et B i ={ b i , j ∣ x i ∈ C j }∪{ b i , 0 }, tandis que Z i est tout ensemble de cardinaliték=2n+1. Notons égalementZ= ∪ i Z i et fixons pour chaque Z i une famille croissante de longueurk à l'intérieur, notée Z i ,Ai={ai,j∣xi∈Cj}∪{ai,0}Bi={bi,j∣xi∈Cj}∪{bi,0}Zik=2n+1Z=∪iZiZik pourl=1 ..k. Pour chaque variable x i , on ajoute2kensembles à F , chaque ensemble de la forme A i ∪ Z i , l et B i ∪ Z i , l . Pour chaque clause C j , nous ajoutons un ensemble à F , qui contientZ, et pour chaqueélément x i ∈ C j { a i , j }Zi,ll=1..kxi2kFAi∪Zi,lBi∪Zi,lCjFZxi∈Cj{ai,j}et pour chaque élément { b i , j } .x¯i∈Cj{bi,j}
Supposons que la formule soit satisfaisable et corrige une affectation satisfaisante. Ensuite, choisissez les ensembles de la forme A i ∪ Z i , l ou B i ∪ Z i , l , selon que x i est vrai ou non. Ce sont n k ensembles incrémentaux. Ajoutez maintenant les m ensembles correspondant aux clauses. Celles-ci continuent également d'augmenter la taille, car les clauses sont satisfaisables. Enfin, nous pouvons même ajouter k plusieurs ensembles (une pour chaque variable) pour faire la couverture de séquence U .kAi∪Zi,lBi∪Zi,lxinkmkU
Supposons maintenant que ensembles soient placés dans une séquence incrémentale. Notez qu'au plus k + 1 ensembles correspondant à x i peuvent être sélectionnés pour chaque x i . Ainsi, s'il n'y a pas d'ensembles de clauses dans la séquence incrémentale, au plus n ( k + 1 ) peut être sélectionné, ce qui est trop peu. Notez que dès qu'un ensemble de clauses est sélectionné, nous pouvons sélectionner au plus deux ensembles correspondant à chaque x i , soit un total d'au plus 2 n ensembles. Par conséquent, nous devons choisir au moinsn(k+1)+mk+1xixin(k+1)xi2n ensembles de variables avant de sélectionner un ensemble de clauses. Mais comme nous pouvons choisir au plus k + 1 pour chaque x i , cela signifie que pour chacun, nous avons choisi au moins 1 , comme k = 2 n + 1 . Cela détermine la "valeur" de la variable, nous ne pouvons donc choisir que des clauses "vraies".n(k−1)k+1xi1k=2n+1
Mise à jour: modification de la valeur de de n à 2 n + 1, comme l'a souligné Marzio.kn2n+1