Навчання NP-повноті - скорочення Turing проти скорочення Карпа


25

Мене цікавить питання, як найкраще навчати NP-повноті спеціальностей з інформатики. Зокрема, чи слід вчити цього за допомогою скорочення Карпа чи використання скорочень Тьюрінга?

Я відчуваю, що поняття завершеності NP і скорочення - це те, чого повинен вивчити кожен основний інформатик. Однак, навчаючи NP-повноти, я помітив, що використання скорочення Карпа має деякі недоліки.

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

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

Нарешті, як студент, я пам’ятаю, що я був спантеличений, коли зіткнувся з такою проблемою, як «тавтологія» - наприклад, задавши булеву формулу, перевірте, чи це тавтологія. Заплутаним було те, що ця проблема очевидно складна: будь-який поліномальний алгоритм для неї означатиме, щоP=NP; і вирішити цю проблему, очевидно, так само важко, як і розв’язати проблему тавтології. Однак, хоча інтуїтивно тавтологія є такою ж важкою, як і задоволеність, тавтологія не є важкою для NP. Так, я сьогодні розумію, чому це так, але я пам’ятаю, що мене це спантеличило. (Що пройшло через мою голову, коли я, нарешті, зрозумів: «Чому ми все-таки робимо цю різницю між NP-Hard і Co-NP-Hard? Це здається штучним і не дуже добре мотивованим практикою. Чому ми орієнтуємось саме на NP ніж спів-NP? Вони здаються однаково природними. З практичної точки зору твердість co-NP має, по суті, такі ж практичні наслідки, як і твердість NP, тому чому ми всі зависаємо від цього розрізнення? Так, я знаю відповіді, але, будучи студентом, я пам’ятаю, що це просто змусило тему відчути себе більш затаємниченою і погано мотивованою.

Отже, моє запитання таке. Коли ми навчаємо студентів незавершеності NP, чи краще вчити використовувати скорочення Карпа чи скорочення Тьюрінга? Хтось намагався викладати концепцію повноти NP з використанням скорочень Тьюрінга? Якщо так, як це пішло? Чи були б якісь неочевидні підводні камені чи недоліки, якби ми навчали концепцій із використанням скорочень Тьюрінга та пропускали концептуальні проблеми, пов’язані зі скороченням Карпа?


Пов'язане: дивіться тут і тут , де згадується, що причина, чому ми використовуємо скорочення Карпа в літературі, полягає в тому, що це дозволяє нам розрізняти NP-твердість і твердість co-NP. Однак, схоже, це не дає жодної відповіді, зосередженої на педагогічній перспективі того, чи є ця здатність критичною для навчальних цілей класу алгоритмів, які повинні бути прийняті кожним спеціалістом CS. Дивіться також тут, на cstheory.SE , який має подібну дискусію.


Мотиваційне спостереження: Turing-зводиться до проблеми в NP невідомо, що це означає . XNP

1
@ RickyDemer, зрозуміло - але коли ми намагаємось продемонструвати проблему важко, нам насправді все одно, чи є в NP чи ні, так що це не мотивує мене надто ефективно. І показати проблему важко - головне застосування NP, NP-повноти, NP-твердості тощоX
DW

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

Відповіді:


10

Я б сказав, що напевно навчаю, використовуючи скорочення Карпа (багато хто). Незалежно від переваг використання скорочень Тюрінга у багаторазовому режимі (Кука), скорочення Карпа є стандартною моделлю.

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

Я погоджуюсь, що скорочення Кука є в декількох сенсах більш розумним, і що немає різниці між твердістю NP і твердістю coNP в практичному плані, в тому сенсі, що вони обоє означають "Ця проблема є досить важкою, і ви не збираєтеся отримати загальний, ефективний, точний алгоритм, який може впоратися з великими екземплярами ". З іншого боку, відмінність NP і coNP не є цілком артефактом теорії, заснованої на скороченнях Карпа: ви не часто говорите про графіки, які не є 3-кольоровими або в яких кожен набір  вершин містить хоча б один край. Так чи інакше, "природна" версія проблеми часто здається в НП, а не в СЗП.k


7

Краще навчити обох ! Про них обох повинен знати майстер інформатики.

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

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

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

Коли ми переглядаємо і з метою пошуку (детермінованих) алгоритмів для їх вирішення, між ними немає різниці. Я думаю, що ця думка є причиною того, що ти вважаєш скорочення Карпа не такою важливою. Але це не правильний спосіб думати про . Правильний спосіб думати про - це дуже потужна і природна мова специфікації проблеми . Якщо ви сприймете серйозно перегляд мови, що підтверджується, та специфікацію проблеми, тоді ви не зможете піти з заміни скорочень Карпа на скорочення Кука та на .c o N P N P N P N P P N PNPcoNPNPNPNPPNP

(Я також згадую скорочення Левіна, проходячи хоч і не завжди поіменно, вказуючи, що приклади скорочення, які ми бачимо протягом курсу, мають цю властивість, що дало доказ для ми можемо ефективно обчислити доказ для )f ( x ) BxAf(x)B


2
Цікаво! Чи можете ви детальніше зупинитися на тому, чому ми не можемо піти з заміни скорочень Karp на зменшення кука, якщо взяти вигляд мови специфікації проблеми? все ще може бути природним класом (виходячи з подання мови специфікації проблеми), і все одно можна довести твердість для проблем, використовуючи скорочення Карпа. Тому я не розумію, чому той факт, що - клас природної складності, заважає нам використовувати скорочення Карпа для міркування про мови в - чи можете ви детальніше про останнє речення у своєму четвертому абзаці більше? ? НП НП НПNPNPNPNP
DW

@DW Ви мали на увазі "Кухар" замість (другого та третього) "Карпа" у вашому коментарі? Ви все ще можете довести, що проблеми з Куком важко, це не проблема. Проблема полягає в тому, що NP не закривається під ними, тобто скорочення кухаря не зберігає ефективної перевірки проблем.
Kaveh

2
Ой, так, я мав на увазі Кука, а не Карпа. (Так!) Я розумію, що NP не закривається за скороченням Кука, але чи можете ви детальніше пояснити, чому це проблема, з точки зору того, як ми навчаємо алгоритми для студентів? Які педагогічні чи концептуальні проблеми це створює? Якими будуть негативні наслідки, якби ми навчили подібним алгоритмам і просто визнали / прийняли, що NP не закривається під час скорочення Кука? Наприклад, чи це спричинило б якесь проблемне концептуальне непорозуміння серед студентів?
DW

-3

Інтуїтивне поняття скорочення - "якщо у мене є алгоритм для вирішення проблеми X, то я можу використовувати його і для вирішення проблеми Y".

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

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


Іншими словами, мабуть, можуть існувати алгоритми, які повертаються Yза P час, але також потребують "більшого часу", ніж час P, щоб повернутися, Nі теорія базується на / орієнтованому / орієнтованому на час, необхідний для відповіді Y.
vzn

1
Будь-який студент, який написав більше п’яти програм, знайомий з поняттям "алгоритм, який не зупиняється" з прямого особистого досвіду.
Девід Річербі

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