Цю задачу можна вирішити в поліноміальний час за допомогою лінійного програмування, і це фактично справедливо для будь-якого часткового порядку (S,≤) . До речі, ми можемо довести за допомогою індукції, що для будь-якого набору кінцевих часткових порядків (S,≤) існує кінцевий набір S′⊆N і біекція f:S→S′ , така що для всіх s1,s2∈S,s1≤s2⇔f(s1)|f(s2) .
Нехай C безліч , утворене ланцюгами в S . Нагадаємо, що C - це ланцюг iff для всіх v,v′ в C , v≤v′ або v′≤v
Тепер створіть логічний змінну для кожного , і булевої змінної для кожної ланцюга . Ми можемо написати наступну лінійну програму для нашої проблеми:
xvv∈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
Тоді проблема пошуку мінімальної кришки упорядкованого набору ланцюгами є подвійною нашою проблемою. Теорема Ділворта стверджує, що
Існує античін А та розподіл порядку в сімействі P ланцюгів, таким чином, що кількість ланцюгів у перегородці дорівнює кардинальності A
що означає, що оптимальне рішення цих двох завдань відповідає:Opt(P)=Opt(D)
Нехай ( респ. ) - це релаксація ( відповідно. ), тобто тієї ж лінійної програми, де всі обмеження ( респ. ) замінюються на ( відповідно ). Нехай і є їх оптимальними рішеннями. Оскільки маємо:
та слабку подвійність теорема встановлює, що(P∗) (D∗)(P) (D)xv∈{0,1} yC∈{0,1}xv∈[0,1] yC∈[0,1]Opt(P∗)Opt(D∗){0,1}⊆[0,1]
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}