Точні експоненціальні часові алгоритми для програмування 0-1


10

Чи відомі алгоритми для наступної проблеми, яка перемагає наївний алгоритм?

Вхідні дані : Система х б з т лінійних нерівностей.Axbm

Вихід: можливе рішення якщо таке існує.x{0,1}n

Припустимо, що і b мають цілі записи. Мене цікавлять найгірші межі.Ab

Відповіді:


14

Якщо є надлінійним, такий алгоритм спростує гіпотезу сильного експоненціального часу, оскільки формули у сполучній нормальній формі є особливим випадком програмування 0-1, а лемма розщеплення дозволяє зменшити k -SAT до CNF-SAT на лінійно багато пунктів .mk

Однак існує алгоритм завдяки Імпальязцо, Патурі та мені, який може вирішити таку систему нерівностей, якщо число проводів, тобто кількість ненульових коефіцієнтів в , лінійне. Зокрема, якщо кількість проводів c n , алгоритм працює в часі 2 ( 1 - s ) n , де s = 1Acn2(1s)n .s=1cO(c2)


1

Якщо досить малий, ви можете зробити краще, ніж наївний алгоритм, тобто краще, ніж у 2 n рази. Тут "досить малий" означає, що m менше, ніж щось на зразок n / lg n . Час роботи все ще буде експоненціальним - наприклад, це може бути 2 n / 2 рази - але це буде швидше, ніж алгоритм наївності.m2nmn/lgn2n/2

Між іншим, схоже, що це дозволяє нам вирішити задачу швидше, ніж за у деяких випадках, коли матриця A має надлінійну кількість записів. Я не знаю, як це визначити за допомогою іншої відповіді, наданої тут. Отже, ви повинні уважно перевірити мою відповідь: це може означати, що я десь зробив серйозну помилку.2nA


Основний підхід: запишіть , де x 0 містить перші n / 2 компоненти x і x 1 містить останні n / 2 компоненти; і аналогічно A = ( A 0 , A 1 ) , де A 0 має лівий n / 2 стовпців A і A 1 правий nx=(x0,x1)x0n/2xx1n/2A=(A0,A1)A0n/2AA1 стовпчики. Тепер A x b можна переписати у формуn/2Axb

A0x0+A1x1b,

або рівнозначно,

A0x0bA1x1.

Перерахуємо всі можливості для A 0 x 0 , і нехай S позначає набір можливих значень, тобто2n/2A0x0S

S={A0x0:x0{0,1}n/2}.

Аналогічно перерахуйте множину усіх 2 n / 2 можливостей для b - A 1 x 1 , тобтоT2n/2bA1x1

T={bA1x1:x1{0,1}n/2}.

Тепер проблема стає

Враховуючи множини розміром 2 n / 2 , чи існують s S і t T такі, що s t ?S,TZm2n/2sStTst

(Тут взято по точці, тобто нам потрібно, щоб s it i для всіх i .)sitii

Остання проблема обговорюється на CS.StackExchange , і, мабуть, існує алгоритм для неї, який працює в часі . Якщо m досить малий (скажімо, менший n / lg n ), то з цього випливає, що загальний час роботи буде менше 2 n , як бажано.O(2n/2(n/2)m1)mn/lgn2n


m=1m=1xi=1A1,i0xi=0x


1
Алгоритм з моєї відповіді також зводиться до векторної проблеми, описаної у вашій відповіді, використовуючи той самий метод, тобто розділити змінні та перерахувати всі їх призначення.
Стефан Шнайдер

2
2O(m)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.