Questo problema può essere risolto in tempo polinomiale usando la programmazione lineare, e questo è vero per qualsiasi ordine parziale . A proposito, possiamo indurre per induzione che per qualsiasi insieme di ordine parziale finito ( S , ≤ ) , esiste un insieme finito S ′ ⊆ N e una biiezione f : S → S ′ , tale che per tutti gli 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)
Lasciate l'insieme formato dalle catene in S . Ricorda che C è una catena iff per tutti v , v ′ in C , v ≤ v ′ o v ′ ≤ vCSCv,v′Cv≤v′v′≤v
Ora creare un booleano variabile per ogni v ∈ S , ed un booleano variabile y C per ogni catena C . Possiamo scrivere il seguente programma lineare ( P ) per il nostro problema:
Max ∑ v ∈ S x v soggetto a ∑xvv∈SyCC(P)
Max∑v∈Sxvsubject to∑v∈Cxv≤1,∀C∈Cxv∈ { 0 , 1 },v∈S
e il suo doppio :( D )
Min ∑C∈ CyCsoggetto a ∑C: v ∈ CyC≥ 1 , ∀ v ∈ SyC∈ { 0 , 1 } , C∈ C
Quindi il problema di trovare la copertura minima di un set ordinato per catene è il doppio del nostro problema. Il teorema di Dilworth afferma che
Esiste un antichain A e una partizione dell'ordine in una famiglia P di catene, in modo tale che il numero di catene nella partizione sia uguale alla cardinalità di A
il che significa che la soluzione ottimale di questi due problemi corrisponde: O p t ( P) = O p t ( D )
Sia ( resp. ( D ∗ ) ) il rilassamento di ( P ) ( resp. ( D ) ), ovvero lo stesso programma lineare in cui tutti i vincoli x v ∈ { 0 , 1 } ( resp. Y C ∈ { 0 , 1 }( P*) ( D*)( P) ( D )Xv∈ { 0 , 1 } yC∈ { 0 , 1 } ) sono sostituiti da ( risp. YXv∈ [ 0 , 1 ] ). Sia O p t ( P ∗ ) e O p t ( D ∗ ) le loro soluzioni ottimali. Poiché { 0 , 1 } ⊆ [ 0 , 1 ] abbiamo:
O p t ( P ) ≤ O p t ( P ∗ ) e O p t ( D ∗yC∈ [ 0 , 1 ]O p t ( P*)O p t ( D*){ 0 , 1 } ⊆ [ 0 , 1 ]
e il teorema della dualità debole stabilisce che O p t ( P ∗ ) ≤ O p t ( D ∗ ) quindi unendo tutto ciò che abbiamo:
O p t ( P ) = O p t ( P ∗ ) = O p t ( D ∗ ) = O p t ( D )
O p t ( P) ≤ O p t ( P*) e 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≤ s2S2≤ s1X{ v1, v2}