Справа з внутрішньоздатністю: проблеми, повні з NP


43

Припустимо, що я програміст і у мене є проблема, що завершується NP, що мені потрібно вирішити. Які методи доступні для вирішення проблем NPC? Чи є опитування чи щось подібне на цю тему?


4
Буде корисно констатувати, яка у вас проблема.
Дейв Кларк

2
Це питання не стосується конкретної проблеми. Я хочу знати методи, щоб я можу застосовувати їх у майбутньому, якщо мені потрібно.
Анонім

1
Це просто як запитати: як я вирішую задачу в поліномічний час взагалі? Є мільйони проблем, і кожна має своє спеціалізоване рішення.
Дейв Кларк

3
@DaveClarke: Існують усталені методики, тому я вважаю, що питання є правильним; Однак, більш сфокусованим питанням може бути краще.
Рафаель

Відповіді:


54

Існує ряд добре вивчених стратегій; що найкраще у вашій заявці залежить від обставин.

  • Поліпшення найгіршого випадку виконання
    Використовуючи конкретну проблему, ви можете часто вдосконалити наївний алгоритм. Наприклад, існуютьалгоритмидля вершинного покриття з[1]; це величезне поліпшення в порівнянні з наївнимі може зробити розміри екземплярів релевантними для вас.O(cn)c<1.3Ω(2n)

  • Покращення очікуваного часу виконання
    Використовуючи евристику, ви часто можете розробити швидкі алгоритми у багатьох випадках. Якщо до них належить більшість, яких ви зустрічаєте на практиці, ви золоті. Прикладами є SAT, для якого існують досить задіяні розв’язувачі, та алгоритм Simplex (який вирішує поліноміальну задачу, але все ж). Однією з основних прийомів, яка часто корисна, є гілка і зв'язана .

  • Обмежте проблему
    Якщо ви можете зробити більше припущень щодо своїх входів, проблема може стати легкою.

    • Структурні властивості
      Ваші вхідні дані можуть мати властивості, які спрощують вирішення проблеми, наприклад, планарність, двосторонність або відсутність мінори для графіків. Дивіться тут кілька прикладів графічних класів, для яких CLIQUE простий.
    • Функції обмеження входу
      Інша річ, на яку слід звернути увагу, - це параметризована складність ; деякі задачі вирішуються за часом для деякого параметра екземпляра (максимальний ступінь вузла, максимальна вага ребра, ...) і константа. Якщо ви можете зв'язати за допомогою полілогіармічної функції в у ваших налаштуваннях, ви отримаєте поліноміальні алгоритми. Саїд Амірі наводить деталі у своїй відповіді .O(2knm)kmkn
    • Обмеження вхідних величин
      Крім того, деякі проблеми допускають алгоритми, які працюють у псевдополіномічний час , тобто час їх виконання обмежується поліноміальною функцією в кількості, що є частиною введення; наївна перевірка первинності - приклад. Це означає, що якщо величини, закодовані у ваших примірниках, мають розумний розмір, у вас можуть бути прості алгоритми, які добре поводяться для вас.
  • Ослаблення результату
    Це означає, що ви терпите помилкові або неповні результати. Є два основних аромати:

    • Імовірнісні алгоритми
      Ви отримуєте правильний результат лише з певною вірогідністю. Є кілька варіантів, найбільш помітний алгоритми Монте-Карло та Лас-Вегас . Відомий приклад - тест первинності Міллера-Рабіна .
    • Алгоритми наближення
      Ви більше не шукаєте оптимальних рішень, а майже оптимальних. Деякі алгоритми допускають відносні («не гірші, ніж вдвічі більше оптимального»), інші абсолютні («не гірше плюс оптимальні»), що залежать від помилки. Для багатьох проблем відкрито, наскільки добре їх можна оцінити. Є такі, які можна довільно наблизити за полиномним часом, а інші, як відомо, цього не дозволяють; перевірити теорію схем апроксимації полінома-часу .5

Щоб отримати ретельне звернення, зверніться до Алгоритміки важких проблем Громковича.


  1. Простота - краса: покращені верхні межі для вершинного покриття Чен Джіанер, Іяд А. Кандж, Ге Ся (2005)

4
звичайно, алгоритм "monte carlo" або "лас-вегас" навряд чи зможе працювати в політаймі з важкою проблемою, пов'язаною з NP
Сашо Ніколов

12

Інші відповіді вирішили це з більш теоретичної точки зору. Ось більш практичний підхід.


Що стосується "типових" проблем, що стосуються повного вирішення NP ( "чи існує річ, яка задовольняє всі ці обмеження?" ), Я завжди намагаюся спершу:

  1. Напишіть просту програму, що кодує ваш проблемний екземпляр як екземпляр SAT .

  2. Потім візьміть хороший розвідник SAT , запустіть його (використовуючи найшвидший багатоядерний комп'ютер, який у вас трапляється), і подивіться, що відбувається.

Спробуйте спочатку з меншими екземплярами, щоб зрозуміти, скільки часу це може зайняти.


Дивно, але цей підхід набагато кращий, ніж намагатися реалізувати власний вирішувач спеціально для вашої поточної проблеми:

  • SAT вирішувачі дуже розумні та добре оптимізовані. Вони легко перевершують вашу власну реалізацію пошукового пошуку (незалежно від того, скільки часу ви витрачаєте на оптимізацію коду). Вони також легко перевершують багато альтернативних варіантів, таких як цілі лінійки розв'язувачів лінійного програмування.

  • Для цього потрібно дуже мало програмування. Крок 1 є відносно простим і не є критичним для продуктивності; ви можете використовувати мови сценаріїв, такі як Python. Хтось ще подбав про те, щоб реалізувати все, що вам потрібно для кроку 2.


Для типових проблем з оптимізацією жорсткої NP ( "знайти найменше, що задовольняє всім цим обмеженням" ) такий підхід може чи не може працювати.

Якщо ви можете легко перетворити її на проблему рішення ( "чи існує річ розміру 4, яка задовольняє всім цим обмеженням?" , "Як щодо розміру 3?" ), Чудово, дотримуйтесь того ж підходу, що і вище, і з проблемами вирішення.

В іншому випадку ви можете скористатися евристичним вирішувачем, який намагається знайти невелике рішення (не обов'язково найменше рішення). Наприклад:

  1. Кодуйте свою проблему як (зважений) екземпляр MAX-SAT .

  2. Використовуйте евристичні вирішувачі з пакету UBCSAT . Евристичні розв'язувачі тривіально паралелізуються; спробуйте знайти комп’ютерний кластер із сотнями комп’ютерів. Ви можете запускати розв’язувачі скільки завгодно, а потім приймати найкраще рішення, яке ви знайшли досі.


8

Параметризована складність

Одним із способів атакувати непридатність є думка про проблему в контексті параметризованої складності.

У параметризованій складності ми вирішуємо задачу, фіксуючи деякий параметр (скажімо, ). Якщо нам вдасться вирішити якусь задачу за час, ми кажемо, що проблема є фіксованим параметром, який можна простежити в . Тут - лише якась обчислювана функція. Є безліч важких проблем з NP, які є FPT, однак, існує багато проблем в NP, які, як вважають, не мають фіксованого параметра.kf(k)p(n)kf(k)

Якщо, виправивши якийсь параметр, ми зможемо вирішити задачу за час , ця проблема, як кажуть, є в XP. Ми вважаємо, що XP не дорівнює FPT (так само, як ми вважаємо, P NP). Але існує також багато проблем між цими двома (FPT та XP), і ми визначили ієрархію (насправді декілька), однією з яких є W-ієрархія. У ієрархії W у вас є скорочення на зразок скорочення NP-повних класів, за винятком того, що ми не шукаємо політомічних скорочень, нам просто потрібно FPT скорочення. Клас W [0] - клас FPT.O(nf(k))

Ось кілька зразків у різних класах ієрархії W:

  1. Обкладинка вершини - FPT (так само вершинні роз'єднані шляхи на непрямих графіках)
  2. Незалежний набір і кліка є W [1] -повними
  3. Домінантний набір W [2] -комплект.

Це ще один рівень складностей, щоб класифікувати задачі NP більш точним способом, і якщо ви хочете більше, ви можете подивитися на параметризовану складність ланцюга та ієрархію W від Downey et al (1998).

А якщо ви хочете ще більше, добре прочитати Теорію параметризованої складності Флума та Грое .

І, нарешті:

Параметризована складність та алгоритми наближення:

Відомо, що якщо проблема має FPTAS (повністю поліноміально-часову схему наближення ), то це також FPT (що очевидно) Але в зворотному напрямку нічого невідомого, також є деякі роботи щодо відношення PTAS та XP, але є не дуже тісний зв’язок між PTAS та W ієрархією (принаймні, я не знаю на даний момент).

Також в деяких випадках ми можемо зафіксувати різні параметри, наприклад: довжина найдовшого шляху у графі обмежена, а розмір рішення обмежений (наприклад, у вершині зворотного зв’язку), ...

Зразок практичного використання:

Можливо, деякі люди вважають, що параметризована складність на практиці марна. Але це неправильно. Багато параметризованих алгоритмів виявлено в реальних програмах, коли ви можете виправити деякі параметри, ось приклад:

  1. Одна з основних теорем параметризованої складності - це зробити Courcell, він надає алгоритм часу роботи для деяких класів задач, що параметризуються. Кількість веж становить , що означає , неможливо. Але одна група реалізувала його алгоритм з деякими модифікаціями на більш спеціальному випадку, і вони отримали надзвичайно швидкий алгоритм для вершинного покриття, який зараз використовується на деяких станціях метро в Німеччині.2...2O(n)2O(k)k=10

  2. Одним з найшвидших і найточніших евристичних алгоритмів для TSP є: об'єднання турів та розкладання гілок , в яких використовується параметризація задачі (не безпосередньо, а декомпозиція гілки та застосовуваний динамічний програмування, заснований на деяких хороших припущеннях).


5

Повнота NP - це найгірший варіант внутрішньопрофільної здатності. Залежно від того, над якою проблемою ви працюєте, багато класів екземплярів можуть бути вирішеними у розумний час на практиці (хоча вам може знадобитися більш спеціалізований алгоритм, щоб отримати хороші умови виконання).

Поміркуйте, чи існує ефективне скорочення від вашої проблеми до проблеми з хорошими доступними рішеннями, такими як булева задоволеність або цілісне лінійне програмування.


4

Загалом у вас є три варіанти: Перший - це розглянути особливі випадки вашої проблеми . У деяких особливих випадках ваша проблема може бути вирішеною поліноміально, наприклад, визначення того, чи існує простий шлях від до до у довільному спрямованому графіку є NP-Complete, але він буде поліноміальним (лінійним), коли зменшимо. Другий варіант - використовувати хороший алгоритм оцінки для вирішення вашої проблеми. Алгоритми оцінки дають майже оптимальні відповіді на вашу проблему. Якщо ви не можете скористатися попередніми параметрами, єдиним залишився спосіб: використовувати алгоритм, який можна допустити, щоб вирішити вашу проблему в експоненціальний часv j v k G GvivjvkGG. Серед експоненціальних алгоритмів час роботи деяких з них може бути допустимим, коли розмір вводу вашої проблеми менший за конкретне значення.


2

Хоча я коротко торкався в деяких відповідях, дозвольте підкреслити, що на практиці проблеми, повні з NP, постійно вирішуються (або наближаються). Основна причина того, що ви можете вирішити неповні завдання на практиці, це:

Випадки, що трапляються на практиці, не є «гіршим випадком».

Ще одна причина розбіжності:

Важко проаналізувати евристичні алгоритми формально.

На практиці ви використовуєте евристичні алгоритми для вирішення ваших NP-повних проблем і сподіваєтесь на найкраще. Результати часто приголомшливі.

Ще одне питання, яке стосується інших відповідей:

Іноді експоненціальні алгоритми досить швидкі.

Це, звичайно, залежить від проблеми. Коли задіяні великі дані, ми маємо протилежну максимуму:

Іноді єдиними можливими алгоритмами є квазілінійні.


Боюся, що натовп тут досить теоретично схильний. Ви можете отримати кращі відповіді на головному сайті stackexchange.

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