Problem ten można rozwiązać w czasie wielomianowym za pomocą programowania liniowego, i jest to prawdą w przypadku dowolnego rzędu częściowego . Nawiasem mówiąc, możemy udowodnić przez indukcję, że dla dowolnego skończonego zbioru częściowego rzędu ( S , ≤ ) istnieje zbiór skończony S ′ ⊆ N i bijectcja f : S → S ′ , taka, że dla wszystkich s 1 , s 2 ∈ S , s 1 ≤ s 2 ⇔ f ((S,≤)(S,≤)S′⊆Nf:S→S′ .s1,s2∈S,s1≤s2⇔f(s1)|f(s2)
Niech się zestaw utworzony przez łańcuchy w S . Przypomnij, że C jest łańcuchem iff dla wszystkich v , v ′ w C , v ≤ v ′ lub v ′ ≤ vCSCv,v′Cv≤v′v′≤v
Teraz utworzyć zmiennej logicznej każdego v ∈ S oraz zmiennej logicznej a C każdego łańcucha C . Możemy napisać następujący program liniowy ( P ) dla naszego problemu:
Max ∑ v ∈ S x v z zastrzeżeniem ∑ v ∈ C x v ≤ 1 , ∀ C ∈ Cxvv∈Sydodo( P)
Max ∑v ∈ S.xvz zastrzeżeniem ∑v ∈ C.xv≤ 1 , ∀ C∈ C.xv∈ { 0 , 1 } , v ∈ S.
i jego dual :( D )
Min. ∑do∈ C.ydoz zastrzeżeniem ∑do: v ∈ C.ydo≥ 1 , ∀ v ∈ S.ydo∈ { 0 , 1 } , C∈ C.
Zatem problem znalezienia minimalnego pokrycia zamówionego zestawu przez łańcuchy jest podwójny naszego problemu. Twierdzenie Dilwortha stwierdza, że
Istnieje antychaina A i podział rzędu na rodzinę P łańcuchów, tak że liczba łańcuchów w podziale jest równa liczności A
co oznacza, że optymalne rozwiązanie tych dwóch problemów jest zgodne: O p t ( P) = O p t ( D )
Niech ( odpowiednio. ( D ∗ ) ) będzie relaksacją ( P ) ( odpowiednio. ( D ) ), tj . Tego samego programu liniowego, w którym wszystkie ograniczenia x v ∈ { 0 , 1 } ( odpowiednio. Y C ∈ { 0 , 1 } ) zastępuje się x v ∈ [ 0 , 1 ] ( odpowiednio y( P∗) ( D∗)( P) ( D )xv∈ { 0 , 1 } ydo∈ { 0 , 1 }xv∈ [ 0 , 1 ] ). Niech O p t ( P ∗ ) i O p t ( D ∗ ) będą ich optymalnymi rozwiązaniami. Od { 0 , 1 } ⊆ [ 0 , 1 ] mamy:
O p t ( P ) ≤ O p t ( P ∗ ) i O p t ( D ∗ydo∈ [ 0 , 1 ]O p t ( P∗)O p t ( D∗){ 0 , 1 } ⊆ [ 0 , 1 ]
i twierdzenie o słabej dualności ustala, że O p t ( P ∗ ) ≤ O p t ( D ∗ ), a następnie łącząc wszystko, mamy:
O p t ( P ) = O p t ( P ∗ ) = O p t ( D ∗ ) = O p t ( D )
O p t ( P) ≤ O p t ( P∗) i O p t ( D∗) ≤ O p t ( D )
O p t ( P∗) ≤ O p t ( D∗)O p t ( P) = O p t ( P∗) = O p t ( D∗) = O p t ( D )
O p t ( P∗)= O p t ( P)Xs1, s2)∈ Xs1≤ s2)s2)≤ s1X{ v1, v2)}