Эта проблема может быть решена за полиномиальное время с помощью линейного программирования, и это действительно верно для любого частичного порядка . Кстати, по индукции можно доказать, что для любого конечного множества частичного порядка существует конечное множество и биекция , такая что для всех .(S,≤)(S,≤)S′⊆Nf:S→S′s1,s2∈S,s1≤s2⇔f(s1)|f(s2)
Пусть множество , образованное цепями в . Напомним, что является цепью тогда и только тогда, когда все в ,CSCv,v′Cv≤v′ или v′≤v
Теперь создайте логическую переменную для каждого V ∈ S и булевой переменной у C для каждой цепи С . Мы можем написать следующую линейную программу ( P ) для нашей задачи:
Max ∑ v ∈ S x v с учетом ∑ v ∈ C x v ≤ 1 , ∀ C ∈ Cxvv∈SyCC(P)
Max∑v∈Sxvsubject to∑v∈Cxv≤1,∀C∈Cxv∈{0,1},v∈S
и его двойной :(D)
Min∑C∈CyCsubject to∑C:v∈CyC≥1,∀v∈SyC∈{0,1},C∈C
Тогда задача нахождения минимального покрытия упорядоченного множества цепями является двойственной нашей задачей. Теорема Дилворта утверждает, что
Существует антицепь A и разбиение порядка на семейство P цепочек, так что число цепей в разбиении равно количеству A
что означает, что оптимальное решение этих двух задач совпадает: Opt(P)=Opt(D)
Пусть ( соответственно ( D ∗ ) ) будет релаксацией ( P ) ( соответственно ( D ) ), т.е. той же линейной программы, где все ограничения x v ∈ { 0 , 1 } ( соответственно y C ∈ { 0 , 1 } ) заменяются на x v ∈ [ 0 , 1 ] ( соответственно y(P∗) (D∗)(P) (D)xv∈{0,1} yC∈{0,1}xv∈[0,1] ). Пусть O p t ( P ∗ ) и O p t ( D ∗ ) - их оптимальные решения. Так как { 0 , 1 } ⊆ [ 0 , 1 ] имеем:
O p t ( P ) ≤ O p t ( P ∗ ) и O p t ( D ∗yC∈[0,1]Opt(P∗)Opt(D∗){0,1}⊆[0,1]
и теорема о слабой двойственности устанавливает, что O p t ( P ∗ ) ≤ O p t ( D ∗ ), то, собрав все вместе, имеем:
O p t ( P ) = O p t ( P ∗ ) = O p t ( D ∗ ) = O p t ( D )
Opt(P)≤Opt(P∗) and Opt(D∗)≤Opt(D)
Opt(P∗)≤Opt(D∗)Opt(P)=Opt(P∗)=Opt(D∗)=Opt(D)
Opt(P∗)=Opt(P)Xs1,s2∈Xs1≤s2s2≤s1X{v1,v2}