Пусть множество натуральных чисел. Мы рассматриваем в частичном порядке делимости, т.е. . Позволять
антицепь .
Если мы рассмотрим задачу о сумме подмножеств, где мультимножество чисел находится в , что мы можем сказать о сложности проблемы, связанной с ? Легко видеть, если , тогда проблема проста. Обратите внимание, что это легко даже для более сложной задачи по ранцу, когда .
Решение последовательных задач о ранцах М. Хартманном и Т. Олмстедом (1993)
Ответы:
Эта проблема может быть решена за полиномиальное время с помощью линейного программирования, и это действительно верно для любого частичного порядка . Кстати, по индукции можно доказать, что для любого конечного множества частичного порядка существует конечное множество и биекция , такая что для всех .(S,≤) (S,≤) S′⊆N f:S→S′ s1,s2∈S,s1≤s2⇔f(s1)|f(s2)
Пусть множество , образованное цепями в . Напомним, что является цепью тогда и только тогда, когда все в ,C S C v,v′ C v≤v′ или v′≤v
Теперь создайте логическую переменную для каждого V ∈ S и булевой переменной у C для каждой цепи С . Мы можем написать следующую линейную программу ( P ) для нашей задачи: Max ∑ v ∈ S x v с учетом ∑ v ∈ C x v ≤ 1 , ∀ C ∈ Cxv v∈S yC C (P)
и его двойной :(D)
Тогда задача нахождения минимального покрытия упорядоченного множества цепями является двойственной нашей задачей. Теорема Дилворта утверждает, что
Существует антицепь 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 )
источник