Яке визначення , , -повне та тверде?


247

Я перебуваю в курсі обчислення та складності , і не можу зрозуміти, що означають ці терміни.

Все, що я знаю, це те, що NP - це підмножина NP-Complete, яка є підмножиною NP-hard, але я поняття не маю, що вони насправді означають. Вікіпедія теж не дуже допомагає, оскільки пояснення все ще трохи надто високі.


6
Це формальний об'єкт з формальним визначенням. Я знайшов більшість «простих» пояснень, яких бракує. Якщо у вас є проблеми з розумінням визначень, що ви робите на уроці з теорії складності? (Серйозне запитання.) До речі, Вікіпедія - не дуже хороший посилання на TCS.
Рафаель

17
Не все, що ви знаєте, вірно: NPC (NP завершено) - це підмножина NP, а не навпаки. Повнота завжди включає в себе елемент класу, для якого проблема є повною. Крім того, NP не є сукупністю NP-важких, оскільки не кожна проблема в NP є важкою.
frafl

5
@frafl: "не кожна проблема в НП складна" - що ще потрібно показати.
Рафаель

2
@Raphael: Це насправді залежить від типу зменшення, яке ви використовуєте. Я думав про поліноміальний час багато одного скорочення, де . NPС
frafl

Відповіді:


364

Я думаю, що статті у Вікіпедії , та vs. досить хороші. Все ж ось що я б сказав: частина I , частина IIPNPPNП

[Я використаю зауваження всередині дужок, щоб обговорити деякі технічні деталі, які ви можете пропустити, якщо хочете.]


Частина I

Проблеми рішення

Існують різні види обчислювальних задач. Однак у вступі до курсу теорії складності обчислювальної техніки легше зосередитись на проблемі рішення , тобто на проблемах, де відповідь - ТАК чи НІ. Існують й інші види обчислювальних задач, але більшість часу питання щодо них можна звести до подібних питань щодо вирішення проблем. Причому проблеми з рішенням дуже прості. Тому у вступі до курсу теорії складності обчислювальної техніки ми зосереджуємо свою увагу на вивченні проблем прийняття рішень.

Ми можемо визначити проблему рішення з підмножиною входів, які мають відповідь ТАК. Це спрощує позначення і дозволяє нам записувати замість і замість .xQQ(х)=YЕSхQQ(х)=NО

Інша перспектива полягає в тому, що ми говоримо про запити щодо членства в наборі. Ось приклад:

Проблема рішення:

Введення: Натуральне число , Запитання: Чи парне число?х
х

Проблема членства:

Введення: Натуральне число , Запитання: Чи у ?х
хЕvен={0,2,4,6,}

Відповідь YES на вході ми називаємо прийнятною, а відповідь "НІ" на вході - як відхилення введення.

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

[Зауваження: 1. Якщо б ми хотіли зробити все формально і точно, нам потрібно було б зафіксувати модель обчислення, як стандартна модель машини Тьюрінга, щоб точно визначити, що ми розуміємо під алгоритмом та його використанням обчислювальних ресурсів. 2. Якщо ми хочемо поговорити про обчислення об'єктів, з якими модель не може безпосередньо обробитись, нам потрібно буде кодувати їх як об'єкти, з якими може обробляти модель машини, наприклад, якщо ми використовуємо машини Тьюрінга, нам потрібно кодувати об'єкти, такі як натуральні числа та графіки як двійкові рядки.]


П = Проблеми з ефективними алгоритмамипошукурішень

Припустимо, що ефективні алгоритми означають алгоритми, які використовують щонайбільше поліномічну кількість обчислювальних ресурсів. Основний ресурс, який нас хвилює, - це найгірший час роботи алгоритмів щодо розміру вхідного сигналу, тобто кількість основних кроків, які алгоритм приймає на введення розміру н . Розмір вводу х дорівнює н якщо для зберігання x потрібні н -бітів пам'яті комп'ютера , і в цьому випадку ми пишемо | х | = n . Таким чином, під ефективними алгоритмами ми маємо на увазі алгоритми, які мають поліном найгіршого часу роботи .х|х|=н

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

П - клас задач рішення, який можна ефективно вирішити,
тобто задачі рішення, які мають поліноміально-часові алгоритми.

Більш офіційно ми говоримо, що проблема вирішення питання Q в П iff

існує ефективний алгоритм А такий, що
для всіх входів х ,

  • якщо Q(х)=YЕS то А(х)=YЕS ,
  • якщо Q(х)=NО тоді А(х)=NО .

Можна просто писати А(х)=Q(х) , але я пишу це таким чином , щоб ми могли порівняти його з визначенням NП .


NП = Проблеми з ефективними алгоритмами дляперевіркидоказів / довідок / свідків

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

Якщо доказ занадто довгий, він не дуже корисний, він може зайняти занадто багато часу, щоб просто прочитати доказ, не кажучи вже про перевірку, чи він дійсний. Ми хочемо, щоб час, необхідний для перевірки, був розумним у розмірі вихідного вводу, а не в розмірі даного доказу! Це означає, що ми дійсно хочемо не довільних довгих доказів, а коротких доказів. Зауважте, що якщо час роботи верифікатора має поліном у розмірі вихідного входу, він може читати лише поліноміальну частину доказу. Отже, короткі ми маємо в виду полиномиального розміру .

Формуйте цей пункт щоразу, коли я вживаю слово "доказ", я маю на увазі "короткий доказ".

Ось приклад проблеми, яку ми не знаємо, як ефективно вирішити, але ми можемо ефективно перевірити докази:


Вхід розділу : кінцевий набір натуральних чисел S ,
Питання: чи можна розділити S на два множини А і Б ( АБ=S і АБ= )
таким чином, що сума чисел у А дорівнює сума числа в Б ( хАх=хБх )?

Якщо я дам вам S і запитаю вас, чи можемо ми розділити його на два набори, щоб їх суми були рівними, ви не знаєте жодного ефективного алгоритму для його вирішення. Ви, мабуть, спробуєте всі можливі способи розділення чисел на два набори, поки не знайдете розділ, де суми рівні, або поки ви не спробуєте всі можливі розділи, і жоден не спрацював. Якщо хтось із них працював, ви б сказали "ТАК", інакше ви б сказали "НІ".

Але є експоненціально багато можливих розділів так що це займе багато часу. Однак , якщо я дам вам дві множини А і Б , ви можете легко перевірити , якщо суми рівні , і якщо А і Б є розбиттям S . Зауважте, що ми можемо ефективно обчислити суми.

Тут пари А і Б які я вам даю, є доказом відповіді ТАК. Ви можете ефективно перевірити мою претензію, переглянувши мій доказ і перевіривши, чи є він дійсним доказом . Якщо відповідь ТАК, то є вагомий доказ, і я можу надати його вам, і ви можете перевірити це ефективно. Якщо відповідь "НІ", то немає достовірних доказів. Тож все, що я вам даю, ви можете перевірити і побачити, що це не є вагомим доказом. Я не можу вас обдурити неправдивим доказом того, що відповідь ТАК. Нагадаємо, що якщо доказ занадто великий, для його перевірки знадобиться багато часу, ми не хочемо, щоб це сталося, тому ми дбаємо лише про ефективні докази, тобто докази, які мають поліноміальний розмір.

Іноді люди використовують " довідку " або " свідка " замість "доказів".

Примітка. Я даю вам достатньо інформації про відповідь на заданий вхід х щоб ви змогли знайти та перевірити відповідь ефективно. Наприклад, у нашому прикладі розділів я не кажу вам відповіді, я просто даю вам розділ, і ви можете перевірити, чи він дійсний чи ні. Зауважте, що ви повинні перевірити відповідь самостійно, ви не можете мені довіряти, що я говорю. Більше того, ви можете лише перевірити правильність мого доказу. Якщо мій доказ справедливий, це означає, що відповідь ТАК. Але якщо мій доказ недійсний, це не означає, що відповідь "НІ". Ви бачили, що один доказ був недійсним, а не те, що немає дійсних доказів. Ми говоримо про докази ДА. Ми не говоримо про докази НІ.

Подивимось на приклад: А={2,4} і Б={1,5} є доказом того, що S={1,2,4,5} можна розділити на два множини з рівними сумами. Нам просто потрібно додати числа у А і число в Б і подивитися , якщо результати рівні, і перевірити , якщо , B є розбиття S .АБS

Якщо я дав вам А={2,5} і Б={1,4} , ви перевірите і переконаєтесь, що мій доказ недійсний. Це не означає, що відповідь "НІ", це просто означає, що цей конкретний доказ був недійсним. Ваше завдання тут - не знайти відповідь, а лише перевірити, чи підтверджений вами доказ дійсний.

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

Дивовижна річ у тому, що така ж ситуація стосується багатьох інших природних проблем, які ми хочемо вирішити: ми можемо ефективно перевірити, чи є даний короткий доказ дійсним, але ми не знаємо жодного ефективного способу пошуку відповіді . Це мотивація , чому складність класу NП є надзвичайно цікавим (хоча це не було початковим мотивом для його визначення). Що б ви не робили (не лише в КС, а й з математики, біології, фізики, хімії, економіки, менеджменту, соціології, бізнесу, ...), ви зіткнетеся з обчислювальними проблемами, які потрапляють у цей клас. Щоб отримати уявлення про те, скільки проблем виявляється в NП ознайомтесь збірник проблем оптимізації NP . На насправді у вас буде важко знайти природні проблеми , які не перебувають в NП . Це просто дивовижно.

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

Більш формально ми говоримо, що проблема вирішення Q полягає в NП iff

існує ефективний алгоритм V називається верифікатором таким, що
для всіх входів х ,

  • якщо Q(х)=YЕS то існує доказ у такий, що V(х,у)=YЕS ,
  • якщо Q(х)=NО , то для всіх доказів у , V(х,у)=NО .

Ми кажемо, що верифікатор є здоровим, якщо він не приймає ніяких доказів, коли відповідь "НІ". Іншими словами, перевіряти звук не можна, щоб прийняти доказ, якщо відповідь дійсно НЕ. Немає помилкових позитивних результатів.

Аналогічно, ми кажемо, що верифікатор завершений, якщо він приймає принаймні один доказ, коли відповідь ТАК. Іншими словами, повний перевіряючий може бути переконаний у відповіді ТАК.

Термінологія походить від логіки та систем підтвердження . Ми не можемо використовувати систему звукоізоляції для доказу помилкових тверджень. Ми можемо використовувати повну систему доказів, щоб довести всі правдиві твердження.

Верифікатор V отримує два входи,

  • х : вихідний вхід дляQ і
  • у : запропоноване доказ дляQ(х)=YЕS .

Зауважимо, що ми хочемо, щоб V був ефективним розміром х . Якщо у великого доказ верифікатор матиме можливість читати тільки поліноміальних частина від у . Ось чому ми вимагаємо, щоб докази були короткими. Якщо у коротко сказати, що V ефективний у х це те саме, що сказати, що V ефективний у х та у (оскільки розмір у обмежений фіксованим многочленом розміром х ).

Підсумовуючи це, щоб показати, що проблема Q є в NП ми повинні дати ефективний алгоритм верифікатора, який є надійним і повним .

Історична довідка: історично це не первинне визначення NП . Первісне визначення використовує то , що називається недетермінованими машини Тьюринга. Ці машини не відповідають жодній фактичній моделі машини і до них важко звикнути (принаймні, коли ви починаєте дізнаватися про теорію складності). Я читав, що багато експертів думають, що вони б використали визначення верифікатора як основне визначення і навіть назвали б клас VП (для перевірки в поліноміальний час) замість NП якщо вони повернуться до зорі теорії складності обчислювальної техніки. Визначення верифікатор природніше, легше зрозуміти концептуально, і простіше у використанні , щоб показати проблеми в NП .


ПNП

Тому ми маємо П = ефективний рішення, а NП = ефективно перевіряється . Отже, П=NП якщо проблеми, які можна ефективно перевірити, такі ж, як проблеми, які можна ефективно вирішити.

Зауважте, що будь-яка проблема в П також є в NП , тобто якщо ви можете вирішити проблему, ви також можете перевірити, чи даний доказ правильний: верифікатор просто ігнорує доказ!

Це тому, що нам це не потрібно, верифікатор може обчислити відповідь сам, він може вирішити, чи відповідь ТАК чи НІ без сторонньої допомоги. Якщо відповідь "НІ", ми знаємо, що доказів не повинно бути, і наш верифікатор просто відкине кожен запропонований доказ. Якщо відповідь ТАК, то повинно бути доказ, а насправді ми просто приймати що - або в якості доказу.

[Ми могли б змусити наш верифікатор прийняти лише деякі з них, це також добре, якщо наш перевіряючий приймає хоча б один доказ, коли перевіряльник працює правильно для проблеми.]

Ось приклад:

Сума
введення: список н+1 натуральних чисел а1,,ан і с ,
Запитання: чи Σi=1наi=с ?

Проблема полягає в П оскільки ми можемо підсумувати числа, а потім порівняти їх з с , повертаємо ТАК, якщо вони рівні, і НІ, якщо їх немає.

Проблема також в NП . Розглянемо верифікатор V який отримує доказ плюс вхід для Суми. Він діє так само, як алгоритм в П який ми описали вище. Це ефективний верифікатор для суми.

Зауважте, що для Суми існують інші ефективні верифікатори, і деякі з них можуть використовувати надані їм докази. Однак того, кого ми розробили, немає, і це теж добре. Так як ми дали ефективний верифікатор для Sum проблема в NП . Той же трюк працює для всіх інших проблем в П так ПNП .


Алгоритми грубої сили / виснажливого пошуку для NП і NПЕхpТiме

Найкращими алгоритмами, які ми знаємо для вирішення довільної задачі в NП є алгоритми грубої сили / вичерпності пошуку . Виберіть ефективний верифікатор проблеми (у нас є ефективний верифікатор, за нашим припущенням, що він знаходиться в NП ) і перевірити всі можливі докази по черзі. Якщо перевіряючий приймає один з них, то відповідь ТАК. Інакше відповідь НІ.

У нашому прикладі розділів ми намагаємося всі можливі розділи та перевіряємо, чи рівні в жодному з них суми.

Зауважимо, що алгоритм грубої сили працює в гіршому випадку експоненціального часу. Розмір доказів є многочленом у розмірі вхідних даних. Якщо розмір доказів м то можливі докази 2м . Перевірка кожного з них забирає поліномальний час верифікатором. Тож загалом алгоритм грубої сили займає експоненціальний час.

Це показує, що будь-яку задачу NП можна вирішити за експоненціальний час, тобто NПЕхpТiме . (Більше того, алгоритм грубої сили буде використовувати лише поліномійну кількість простору, тобто NППSpаcе але це історія для іншого дня).

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

Однак це не означає, що немає кращих алгоритмів, ми цього не знаємо . Наскільки ми знаємо, все ще можливо (хоча вважається, що майже всі теоретики складності) дуже малоймовірні, що NП=П і всі задачі NП можуть бути вирішені в поліноміальний час.

Крім того, деякі фахівці здогадуються, що ми не можемо зробити набагато кращого, тобто є проблеми в NP які неможливо вирішити набагато ефективніше, ніж алгоритми пошуку грубої сили, які займають експоненціальну кількість часу. Додаткову інформацію див. У гіпотезі експоненційного часу . Але це не доведено, це лише здогадка . Це просто показує, як далеко ми знаходимо алгоритми поліноміального часу для довільних задач NP

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

Тим не менш, є проблеми NП які, здається, важко вирішити. Я повернусь до цього, коли ми обговоримо NП твердість.


Нижні межі здаються складно довести

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

На жаль, завдання довести нижню межу дуже складна. Ми навіть не можемо довести, що ці проблеми потребують більше, ніж лінійного часу ! Не кажучи вже про необхідність експоненціального часу.

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

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

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

Це ще одне місце, де люди плутаються. Тут "неможливість" - це математична неможливість , тобто недовгий з нашого боку деякий геній може виправити в майбутньому. Коли ми кажемо неможливе, ми маємо на увазі, що це абсолютно неможливо, як неможливо, як 1=0 . Жоден науковий прогрес не може зробити це можливим. Це те, що ми робимо, коли доводимо нижчі межі.

Довести нижню межу, тобто показати, що проблема потребує певного часу, щоб вирішити, означає, що ми повинні довести, що така єАлгоритм, навіть дуже винахідливий, який ще не знає, не може вирішити проблему швидше. Є багато розумних ідей, про які ми знаємо (жадібні, відповідність, динамічне програмування, лінійне програмування, напіввизначене програмування, програмування суми квадратів та багато інших розумних ідей) і є багато ще багатьох, про які ми ще не знаємо. Виключення одного алгоритму чи однієї конкретної ідеї розробки алгоритмів недостатньо, нам потрібно виключити всі вони, навіть ті, про яких ми ще не знаємо, навіть ті, про кого вони ніколи не знають! І все це можна комбінувати в алгоритмі, тому нам потрібно виключити і їх комбінації. Був досягнутий певний прогрес у тому, щоб показати, що деякі ідеї не можуть вирішити складний NPпроблеми, наприклад, жадібні та їх розширення не можуть працювати, і є деякі роботи, пов'язані з алгоритмами динамічного програмування, і є деякі роботи над певними способами використання лінійного програмування. Але вони навіть не близькі до того, щоб виключити відомі нам інтелектуальні ідеї (шукайте нижчі межі в обмежених моделях обчислень, якщо вас цікавить).


Бар'єри: нижні межі є Важко довести

З іншого боку, у нас є математичні результати, які називаються бар'єрами, які говорять про те, що нижня межа не може бути такою і такою, і таке і таке майже охоплює всі методи, які ми використовували для доведення нижчих меж! Насправді багато дослідників відмовилися працювати на доказ нижніх оцінок після Олександра Razbarov і Стівена Рудич в природних доказах бар'єрного результату. Виявляється, існування конкретного роду доказів мало би означало невпевненість криптографічних генераторів псевдовипадкових чисел та багатьох інших криптографічних інструментів.

Я кажу майже тому, що останніми роками спостерігається певний прогрес, головним чином Райан Вільямс , який зміг інтелектуально обійти бар'єрні результати, але результати поки що є для дуже слабких моделей обчислення та досить далеких від виключення загальних поліноміально-часових алгоритмів .

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

[З іншого боку, робота Райана Вільямса показує, що між доведенням нижньої межі і доведенням верхньої межі існує тісний зв’язок. Дивіться його розмову на ICM 2014, якщо вас цікавить.]


Скорочення: вирішення проблеми з використанням іншої проблеми як підпрограми / Oracle / Black Box

Ідея скорочення дуже проста: для вирішення проблеми використовуйте алгоритм для іншої проблеми.

Ось простий приклад: припустимо, що ми хочемо обчислити суму списку n натуральних чисел, і у нас є алгоритм Sum який повертає суму двох заданих чисел. Чи можемо ми використовувати Sum для складання чисел у списку? Звичайно!

Проблема:

Вхід: список з n натуральних чисел x1,,xn ,
вихід: повернення i=1nxi .

Алгоритм скорочення:

  1. s=0
  2. для i від 1 до n
    2.1. s=Sum(s,xi)
  3. повернути s

Тут ми використовуємо Sum в нашому алгоритмі як підпрограму . Зауважте, що нам не байдуже, як працює Sum , він діє як чорний ящик для нас, нам не байдуже, що відбувається всередині Sum . Ми часто називаємо підпрограму Sum як oracle . Це як оракул Дельфі в грецькій міфології, ми задаємо питання, а оракул відповідає на них і використовуємо відповіді.

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

Якщо оракул поверне велику відповідь, нам потрібно її прочитати, і це може зайняти деякий час, тому ми повинні порахувати час, який нам знадобиться , щоб прочитати відповідь, яку нам дав оракул. Аналогічно для написання / задавання питання від оракула. Але oracle працює миттєво, тобто, як тільки ми задаємо питання оракулу, оракул пише відповідь для нас за одну одиницю часу. Вся робота, яку робить Oracle, рахується одним кроком, але це виключає час, який нам потрібен, щоб написати запитання і прочитати відповідь.

Оскільки нам не байдуже, як працює oracle, але лише щодо відповідей, які він повертає, ми можемо зробити спрощення і вважати оракул самою проблемою замість алгоритму для нього. Іншими словами, нам байдуже, чи оракул не є алгоритмом, нам не байдуже, як оракул придумує свої відповіді.

Наприклад, Sum у вищезазначеному питанні - сама функція додавання (не алгоритм обчислення складання).

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

Іншим способом дивитися на це є мислення про це як про інтерактивне обчислення . Інтерактивне обчислення саме по собі є великою темою, тому я тут не вникатиму, але я думаю, що згадка про цю перспективу скорочень може бути корисною.

Алгоритм , який використовує оракул / чорний ящик O зазвичай позначається як A O .AOAO

Скороченням ми обговорювали вище , є найбільш загальною формою скорочення і відомо як скорочення чорного ящика (він же скорочення оракула , скорочення Тьюринга ).

Більш офіційно:

Ми говоримо, що проблема Q зводиться до чорної скриньки до задачі O і записує QTO якщо
існує алгоритм A такий, що для всіх входів x ,
Q(x)=AO(x) .

Іншими словами , якщо існує алгоритм який використовує оракула O в якості підпрограми і вирішує проблему Q .AOQ

Якщо наш алгоритм редукції працює в поліноміальний час ми називаємо це скорочення чорного ящика поліноміальний час або просто скорочення Кук (в честь Стівен А. Кук ) і писати Q P T O . (Підписка T означає «Тьюрінг» на честь Алана Тьюрінга ).AQTPOT

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

Ідея тут полягає в тому, що на заданому вході x ми виконуємо кілька поліноміально-часових обчислень і генеруємо y що є прикладом проблеми, яку вирішує оракул. Потім ми запитуємо оракул і повертаємо відповідь, яку він нам повертає. Нам дозволяється задати одне питання від оракула, і відповіді оракула - це те, що буде повернено.

Більш офіційно,

Ми говоримо, що проблема Q багато-одна зводиться до задачі O і записує QmO якщо
існує алгоритм A такий, що для всіх входів x ,
Q(x)=O(A(x)) .

Коли алгоритм редукції є поліноміальний час ми називаємо це поліноміальний час багатьох один скорочення або просто скорочення Короп (в честь Річарда М. Короп ) і позначимо його через QmPO .

Основна причина зацікавленості в цьому конкретному неінтерактивному скороченні полягає в тому, що воно зберігає NP проблеми: якщо існує багаточленне скорочення багато-одного від проблеми A до задачі NPB , то A також є в NP .

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


Повідомлення стало занадто довгим і перевищує межу відповіді (30000 символів). Я продовжую відповідь у частині II .



4
@Kaveh Це дивовижний пост, дякую. Я робив рішучість перед цим розділом у класі, але я трохи відставав у своєму розумінні доведення невідповідності. Я не знаю, чи все це має відношення до моєї нерозуміння зі складністю.
агент154

5
Я прочитав багато книг про складність від вступного рівня (включаючи Сіпсера) до більш досконалого. У мене немає проблем з абстрактною математикою (наприклад, я вмію читати алгебру Ланга). Ця відповідь найкраще пояснити NP проти P. Я б запропонував вам витратити більше часу на полірування та скласти конспекти лекцій. Це може допомогти багатьом людям.
scaaahu

@scaaahu, дякую за добру зауваження, а також за пропозиції. Планую закінчити та відполірувати це найближчим часом.
Каве

10
Ця відповідь повинна бути зроблена як опорна відповідь. Усі майбутні основні питання типу P / NP слід звернути до цього спочатку. Дуже рідкий опис!
Paresh

179

Частина ІІ

Продовження з I частини .

Попередній перевищував максимальну кількість літер, дозволених у відповіді (30000), тому я розбиваю її на дві частини.

-комплектність:Універсальнізадачі N PNP NP

Гаразд, поки що ми обговорювали клас ефективно розв'язуваних задач ( ) та клас ефективно перевіряються задач ( N P ). Як ми обговорювали вище, обидва ці верхні межі . Давайте зосередимо нашу увагу зараз на проблеми всередині N P , як дивно багато природні проблеми опиняються всередині N P .PNPNPNP

Зараз іноді ми хочемо сказати, що проблему важко вирішити . Але, як ми згадували вище, ми не можемо використовувати для цієї мети нижчі межі: теоретично вони саме те, що ми хотіли б довести, однак на практиці ми не були дуже успішними у доведенні нижчих меж і взагалі їх важко довести, як ми згадували вище. Чи є ще спосіб сказати, що проблему важко вирішити ?

Тут виникає поняття -комплектності. Але перш ніж визначити N P -комплектність, давайте ще раз подивимось на скорочення.NPNP

Скорочення як відносна складність

Ми можемо розглядати нижню межу як абсолютну складність проблем. Тоді ми можемо вважати скорочення відносною складністю проблем. Ми можемо скорочення від до BAB , як кажуть легше , ніж B . Це неявно в понятті ≤, яке ми використовували для скорочень. Формально скорочення дають часткові розпорядження щодо проблем.AB

Якщо ми можемо ефективно звести проблему до іншої проблеми B, то A не має бути складніше, ніж B для вирішення. Інтуїція така:ABAB

Нехай є ефективним скорочення в порівнянні з до B , тобто М являє собою ефективний алгоритм , який використовує B і вирішує . Нехай N буде ефективний алгоритм , який вирішує B . Ми можемо поєднати ефективне зниження М B і ефективний алгоритм N для отримання M N , який є ефективним алгоритмом , який вирішує .MBABMBANBMBNMNA

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

-комплект означає найважчі N P проблемиNPNP

Тепер, коли у нас є відносний спосіб порівняння складності проблем, ми можемо запитати, які проблеми є найбільш складними серед проблем у ? Ми називаємо такі проблеми N P -повними .NPNP

-повні проблеми - найскладніші N P проблемиNPNP,
якщо ми можемо ефективно вирішити -комплектну проблему, ми можемо ефективно вирішити всі N P- проблеми.NPNP

Більш формально ми говоримо, що проблема рішення - це N P -повний iffANP

В N P , і для всіх N P проблем B , B є поліноміальний час багатьох один зводиться до A ( B P м A ).ANP
NPBBABmPA

Ще один спосіб думати про -повні проблеми - мислити про них як про складність версії універсальних машин Тьюрінга . N P -повна проблема є універсальною серед N P проблем в тому ж сенсі: ви можете використовувати їх , щоб вирішити будь-яку N P проблеми.NPNPNPNP

Це одна з причин того, що хороші вирішувачі SAT важливі, особливо в галузі. SAT є -комплектним (докладніше про це пізніше), тому ми можемо зосередитись на розробці дуже хороших алгоритмів (наскільки це можливо) для вирішення SAT. Щоб вирішити будь-яку іншу проблему в N P, ми можемо перетворити проблемний примірник на екземпляр SAT, а потім використати високооптимізований SAT-вирішувач промислової якості.NPNP

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

Якщо задача задовольняє другу умову у визначенні -комплектності (тобто умови універсальності), ми називаємо задачу N P -твердою .NP
NP

твердість - це спосіб сказати, що проблема складна.NP

Я особисто вважаю за краще вважати стійкістю універсальністю, тому, ймовірно, N P -universal могла бути правильнішою назвою, оскільки ми наразі не знаємо, чи вони справді важкі чи це просто тому, що ми не змогли знайти алгоритм багаточленного часу для них).NPNP

Назва -важко також збиває з пантелику людей неправильно думати , що N P -Жорсткий проблеми є проблемами , які абсолютно важко вирішити. Ми цього ще не знаємо, ми лише знаємо, що їх так само важко, як і будь-яку N P проблему вирішити. Хоча експерти вважають, що малоймовірно, що все-таки проблеми N P легко і ефективно вирішуються. Іншими словами, бути таким же важким, як і будь-яка інша проблема N P , не означає насправді складно. Це справедливо лише в тому випадку, якщо існує проблема N P, яка абсолютно єNPNPNPNPNPNP жорсткий (тобто не має алгоритму багаточленного часу).

Тепер питання:

  • Чи є якісь -повні проблеми?NP

  • Ми знаємо когось із них?

Я вже дав відповідь, коли ми обговорювали SAT-вирішувачі. Дивовижне те, що багато природних проблем виявляються N P -повними (докладніше про це пізніше). Отже, якщо ми вибираємо випадковим чином вибираємо природні задачі в N P , з дуже високою ймовірністю це або ми знаємо алгоритм поліноміального часу для нього, або ми знаємо, що це N P -комплект. Кількість природних задач, про які, як відомо, немає, досить мала (важливим прикладом є факторинг цілих чисел, див. У цьому списку список подібних проблем).NPNPNPNP

Перш ніж перейти до прикладів -повних завдань, зауважте, що ми можемо дати подібні визначення для інших класів складності та визначити класи складності, такі як E x p T i m e -complete. Але, як я вже сказав, N P займає дуже особливе місце: на відміну від N P, інші класи складності мають мало природних повноцінних проблем.NPExpTimeNPNP

(Під природною проблемою я маю на увазі проблему, яку люди дійсно дбають про вирішення, а не проблеми, які люди визначають штучно для демонстрації певного моменту. Ми можемо модифікувати будь-яку проблему таким чином, щоб вона залишалася по суті тією ж проблемою, наприклад, ми можемо змінити відповідь на те, що вхід в SAT буде НІ. Ми можемо визначити нескінченно багато різних проблем аналогічним чином, не змінюючи істотно проблеми. Але хто б насправді переймався цією штучною проблемою самостійно?)p¬p

неповні проблеми: У N P є універсальні проблемиNPNP

По- перше, відзначимо , що якщо є Н Р -Жорсткий і поліноміальний час багато один зводиться до B , то B також Н Р -Жорсткий. Ми можемо вирішити будь-яку задачу N P за допомогою A і ми можемо вирішити A за допомогою B , тому ми можемо вирішити будь-яку задачу N P за допомогою B !ANPABBNPNPAABNPB

Це дуже корисна лема. Якщо ми хочемо показати , що проблема є -Жорсткий ми повинні показати , що ми можемо звести всі N P проблеми до нього, що ні так просто , тому що ми нічого не знаємо про ці інших , ніж вони в задачах N P .NPNPNP

Подумайте про це на секунду. Це досить дивно, коли ми це бачимо вперше. Ми можемо довести все проблеми зводиться до SAT і нічого не знаючи про ті , крім того , що вони в задачах N P !NPNP

На щастя, нам це не потрібно проводити не один раз. Як тільки ми покажемо таку проблему, як є N P- твердою для інших проблем, нам потрібно лише зменшити S A T до них. Наприклад, щоб показати, що S u b s e t S u m є N P- твердий, нам потрібно лише дати скорочення від S A T до S u b s e t S u m .SATNPSATSubsetSumNPSATSubsetSum

Гаразд, покажемо, що існує проблема -комплект.NP

Універсальний верифікатор -повнийNP

Примітка: наступна частина може бути трохи технічною при першому читанні.

Перший приклад трохи штучний, але я думаю, що він простіший і корисний для інтуїції. Нагадаємо визначення випробувач . Ми хочемо визначити проблему, яку можна використати для їх вирішення. То чому б просто не визначити проблему таким?NP

Універсальний
вхідний верифікатор, обмежений часом : код алгоритму який отримує вхід і доказ, вхід x і два числа t і k . Вихід: Y E S, якщо є доказ розміру не більше k- го, він приймається V для введення x в t -приступках, N O, якщо таких доказів немає.Vxtk
YESkVxtNO

Це не важко показати цю проблему , яку я буду називати є Н Р -Жорсткий:UniVerNP

Візьмемо верифікатор для завдання в N P . Щоб перевірити, чи є докази для даного входу x , ми передаємо код V і x на U n i V e r . ( t і k - верхні межі часу виконання V та розміру доказів, які ми шукаємо x . вони потрібні їм для обмеження часу виконання V та розміру доказів поліномами розміром x .)VNPxVxUniVer
tkVxVx

(Технічні деталі: час роботи буде многочленом , і ми хотіли б мати розмір введення , щонайменше т тому ми даємо т в одномісний нотації НЕ бінарне Аналогічно. До дається в унарний.)tttk

Нам все ще потрібно , щоб показати , що сама проблема в . Щоб показати U n i V e r в N P, ми розглянемо наступну проблему:NPUniVerNP


Введення інтерпретатора, обмеженого часом: код алгоритму , вхід x для M та число t . Вихід: Y E S, якщо алгоритм M, введений вхід x, повертає Y E S у т кроки, N O, якщо він не повертає Y E S через t кроки.MxMt
YESMxYEStNOYESt

Ви можете думати про алгоритмі приблизно як код на програми. Це не важко зрозуміти цю проблему в P . По суті, це написання перекладача, підрахунок кількості кроків і зупинка після t кроків.CPt

Я буду використовувати для цієї проблеми абревіатуру .Interpreter

UniVerNPMxtkcckInterpreterMYESxct

SATNP

UniVerNPUniVerNP

NPSAT

SAT


φ
YESφNO

SATNP


Буде написано ...

NP

NP

NP

PNP

Що далі? Куди піти звідси?


6
Я хотів би, щоб я міг подати заявку не раз, дякую за те, що ви доклали стільки зусиль, щоб відповісти!
Фінгольфін

2
Ого, дивовижна стаття! Я також дуже з нетерпінням чекаю на анонсовані частини, особливо "Що робити, якщо вам доведеться вирішити повну проблему?".
Тобіас Герман

5
@ xci13 Можна! Обновіть першу частину;)
Вінс Емі

4
Я створив тут рахунок лише для того, щоб проголосувати обидва ваші повідомлення!
ghosts_in_the_code

6
@Kaveh Чи плануєте закінчити цю чудово написану статтю?
Габ

26

Більше ніж корисні згадані відповіді, я рекомендую вам дуже переглянути " Поза обчислення: проблема П проти НП " Майкла Шипсера . Я думаю, що це відео має бути заархівоване як одне з провідних навчальних відео з інформатики.!

Насолоджуйтесь!


Цікаво, що мій підручник - саме він. Це не жахлива книга, але вона залишає бажати кращого.
агент154,

8

Копіювання моєї відповіді на подібне запитання на переповнення стека:

Найпростіший спосіб пояснити P v. NP та подібне, не вдаючись до технічних питань - порівнювати "проблеми зі словом" з "проблемами з численним вибором".

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

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

Тепер, якщо ми погодимось із зусиллями, які потребують часу полінома «легко», тоді клас P складатиметься з «легких проблем зі словом», а клас NP складатиметься з «легких задач множинного вибору».

Суть P v. NP полягає в питанні: "Чи існують легкі проблеми з численним вибором, які непрості, як проблеми зі словом"? Тобто, чи є проблеми, на які легко перевірити обґрунтованість даної відповіді, але знайти цю відповідь з нуля важко?

Тепер, коли ми інтуїтивно розуміємо, що таке НП, ми повинні кинути виклик своїй інтуїції. Виявляється, є "проблеми з численним вибором", які в певному сенсі є найважчими з усіх: якби можна було знайти рішення однієї з "найважчих з усіх" проблем, можна було б знайти рішення ВСІХ Проблеми НП! Коли Кук відкрив це 40 років тому, це стало повною несподіванкою. Ці "найважчі з усіх" проблеми відомі як NP-hard. Якщо ви знайдете «вирішення проблеми із словом» для однієї з них, ви автоматично знайдете «вирішення проблеми у слові» для кожної «простої проблеми з множинним вибором»!

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


Тепер, коли ми інтуїтивно розуміємо, що таке НП, ми повинні кинути виклик своїй інтуїції. Виявляється, є "проблеми з численним вибором" - ви мали на увазі "проблеми зі словом" там? Я думаю, що так, тому що всі проблеми з NP легкі як "множинні вибори" за визначенням.
Дмитро Григор’єв

За рядком Виявляється, що існують "проблеми з вибором", які в певному сенсі є найважчими з усіх, які я мав на увазі. Виявляється, є проблеми НП, які в певному сенсі є найважчими з усіх . Ці проблеми з NP справді є простими проблемами множинного вибору за визначенням, але вони також найважчі з усіх, як проблеми зі словами. Стандартний приклад - SAT3: це легко як проблема з вибором, але важко як слово.
Майкл

7

Найпростіший з них - Р, сюди належать задачі, що вирішуються в поліноміальний час.

Потім настає НП. Тут належать проблеми, що вирішуються в поліномі на недетермінованій машині Тьюрінга.

Твердість і повнота пов'язана зі зменшенням. Проблема A є важкою для класу C, якщо кожна проблема в C зводиться до A. Якщо проблема A є важкою для NP , або NP-жорсткою, якщо кожна проблема в NP зводиться до A.

Нарешті, проблема є повною для класу C, якщо вона знаходиться в C, і важко для C. У вашому випадку проблема A є повною для NP , або NP-повною, якщо кожна проблема в NP зводиться до A, а A - у NP .

Щоб додати до пояснення NP, проблема полягає в NP тоді і лише тоді, коли рішення можна перевірити в (детермінований) поліном час. Розгляньте будь-яку відому вам проблему NP, SAT, CLIQUE, SUBSET SUM, VERTEX COVER тощо. Якщо ви «отримаєте рішення», ви можете перевірити його правильність у поліноміальний час. Вони, відповідно, присвоєння істини змінним, повний підграф, підмножина чисел і набір вершин, що домінує над усіма краями.


6

З точки зору основного відео, відео P і NP та Computational Complexity Zoo здається набагато простішим для розуміння.

Для комп'ютера з дійсно великою версією проблеми :

П проблеми

легко вирішити (кубік Рубікс)

Проблеми НП

важко - але перевірити відповіді легко (судоку)

Можливо, це все справді проблеми P, але ми цього не знаємо ... P vs. NP .

NP-комплект

Багато проблем з NP зводиться до тієї самої (судоку є новачком у списку).

Проблеми EXP

дійсно важко (найкраще наступний хід у шахах)

NP-важкі проблеми

Редагувати: NP-hard не дуже добре пояснений у відео (це все рожеві шматочки), діаграма Ейлера NP-Hard у Вікіпедії щодо цього чіткіша.

Підсумок відео

Діаграми Ейлера на дошці P, NP, NP-комплектні, EXP та NP-жорсткі

Вікіпедія NP-важка діаграма Ейлера

Діаграми SVG Euler P, NP, NP-повні та NP-жорсткі


0

P , NP , NP-complete та NP-hard - це класи складності, які класифікують задачі за алгоритмічною складністю їх вирішення. Коротше кажучи, вони засновані на трьох властивостях:

Таблиця класів складності

Розв'язується в поліном час: визначає задачі рішення, які можуть бути вирішені детермінованою машиною Тюрінга (DTM), використовуючи багаточленну кількість обчислювального часу, тобто час його виконання є верхньо обмеженим поліноміальним виразом у розмірі вхідних даних для алгоритму. Використовуючи позначення Big-O, ця часова складність визначається як O(n ^ k), де n - розмір вхідного та ka постійного коефіцієнта.

Розв’язання рішення в поліномічний час: визначає проблеми рішення, для яких дане рішення може бути перевірене DTM, використовуючи поліномічну кількість часу обчислення, навіть якщо отримання правильного рішення може зажадати більших витрат часу.

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


Нещодавно я написав статтю з цього приводу, де виклав докладнішу інформацію, включаючи демонстрацію коду для зменшення проблеми NP у важку проблему NP: Класи складності проблем

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