Що є NP-завершеним у галузі інформатики?


429

Що є проблемою, повним NP? Чому це така важлива тема в галузі інформатики?


5
Можливо, вас зацікавлять відповіді на це питання: stackoverflow.com/questions/111307/…
Дан Дайер

1
Добре, я вирішив написати свою відповідь, тому що мені не сподобалося, як подається прийнята відповідь, і я включив посилання на питання P = NP.
grom

1
Існує дуже гарна лекція з аргументації з дискретної математики, яка пояснює, що таке NP-повна проблема. Перші 50 хвилин в основному булеві алгебри. Тож переходьте до початку 53 хвилини, якщо вас цікавлять лише концепції P, NP, NP-повноти, булева проблема задоволеності та скорочення.
davitenio

1
Ми ніколи не дізнаємось, тому що з великим п яно ніколи не завершиться;)
Піт Елвін

1
Мені дуже подобається і дуже рекомендую перевірити це пояснення відео: youtube.com/watch?v=YX40hbAHx3s
Максим Овсяников

Відповіді:


209

NP позначає недетермінований поліномний час.

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

Головне, що потрібно позбавити від повної NP-проблеми, це те, що вона не може бути вирішена в поліноміальний час відомим способом. NP-Hard / NP-Complete - це спосіб показати, що певні класи проблем не вирішуються в реалістичний час.

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


2
"... проблема NP може бути зведена до заданої проблеми ..." - важливе обмеження скорочення полягає в тому, що воно має бути детерміновано многочленом.
Rafał Dowgird

2
Позначення O () - це загальне математичне позначення, яке використовується скрізь: алгоритми наближення дійсно задані точністю O () - шукайте будь-який папір алгоритму наближення на arxiv.org
Ying Xiao

1
Щоб трохи уточнити, проблеми НП - це посилання на недетерміновані машини Тьюрінга. Досі невідомо, чи можна вирішити задачу, повну NP, за багаточлен на детермінованій машині Тьюрінга.
rjzii

1
@Yuval: Просто для того, щоб було зрозуміло. Те, що ви мали раніше, було абсолютно неправильним (якщо тільки P = NP). З вашого коментаря я відчуваю, що ви вважаєте, що обидві версії були правильними. Якщо ні, прошу вибачення.

33
Ця відповідь далеко не повна і зрозуміла, і я не можу зрозуміти, чому в ній так багато відгуків.
nbro

428

Що таке НП ?

NP - це сукупність усіх проблем рішення (запитання з відповіддю "так" або "ні"), для яких відповіді "так" можуть бути перевірені в поліноміальний час (O (n k ), де n - розмір проблеми, а k - a постійна) детермінованою машиною Тюрінга . Поліномний час іноді використовується як визначення швидкого або швидкого .

Що таке Р ?

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

Що таке NP-Complete ?

Проблема x, яка є в NP, також є в NP-Complete, якщо і лише тоді, коли будь-яка інша проблема в NP може бути швидко (тобто в поліноміальний час) перетворена в x.

Іншими словами:

  1. x знаходиться в NP, і
  2. Кожна проблема в NP зводиться до x

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

Дивіться також пост Що таке "P = NP?", І чому це таке відоме питання?

Що таке NP-Hard ?

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


4
"Тобто NP в NP-Hard не означає не поліноміальне" <- NP в NP-повному (або деінде) також не означає не поліномальному.
sepp2k

1
Дякую sepp2k за виправлення. Я мав на увазі сказати, що це не означає NP (тобто недетермінований полиномний час).
grom

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

3
Про NP: Я думаю, що це має бути: Проблему можна вирішити недетермінованою машиною Тьюрінга. (недетермінантний, а не дерміністичний)
hqt

2
@hqt Те, що я написав, є правильним .. Зверніть увагу на слово "перевірено". Ви також правильно, NP може бути вирішена за поліноміальний час недетерміністіческую машини Тьюринга
Grom

32

NP-Complete означає щось дуже конкретне, і ви повинні бути обережними, або ви зрозумієте неправильне визначення. По-перше, проблема НП - це так / ні проблема

  1. Існує доказ поліноміального часу для кожного випадку проблеми з відповіддю «так», що відповідь - «так», або (рівнозначно)
  2. Існує алгоритм багаточленного часу (можливо, використовуючи випадкові змінні), який має нульову ймовірність відповіді "так", якщо відповідь на екземпляр проблеми "так" і скаже "ні" в 100% часу, якщо відповідь - «ні». Іншими словами, алгоритм повинен мати показник помилково негативних показників менше 100% і не мати помилкових позитивних результатів.

Проблема X є NP-Complete, якщо

  1. X знаходиться в NP, і
  2. Для будь-якої проблеми Y в NP існує "скорочення" від Y до X: поліноміально-часовий алгоритм, який перетворює будь-який екземпляр Y в екземпляр X, таким чином, відповідь на Y-екземпляр - "так", якщо і тільки якщо відповідь X-екземпляра "так".

Якщо X є NP-повним і існує детермінований поліноміальний часовий алгоритм, який може правильно вирішити всі екземпляри X (0% хибнопозитивних, 0% помилкових негативів), то будь-яка проблема в NP може бути вирішена в детерміновано-поліноміально- час (зведення до X).

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


1
Я не люблю вихвалятися, але я дуже пишаюся своїм алгоритмом детермінованого полінома-часу, який я підтвердив, що не існує. ;)
Кайл Кронін

20
Я виявив справді чудовий доказ цього, який цей коментар є занадто вузьким, щоб його містити;)
quick_dry

Умова № 2 - це твердження P =? NP, а не стандартне визначення повноти NP. Це повинно бути: існує детермінований багаточасний алгоритм, який може перетворити будь-який інший екземпляр NP в екземпляр Y цієї проблеми. Відповідь на Y - "так", якщо і лише тоді, коли відповідь на X - "так".
Кріс Конвей

"Ви повинні бути обережними, або ви отримаєте визначення неправильним", - як це підтверджує сама відповідь. Ця відповідь частково правильна, але вона точно не повинна була бути прийнята.
програміст Windows

29

В основному проблеми цього світу можна віднести до категорії

         1) Нерозв'язна задача 2) Нерозв'язна задача 3) NP-задача 4) P-задача


         1) Перший - це не вирішення проблеми. 2) Другий - час експоненціальної потреби (тобто O (2 ^ n) вище). 3) Третя називається НП. 4) Четверта легка проблема.


П: відноситься до розв’язання задачі про поліном час.

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

NP Complete: посилається на поліноміальний час, але ми ще не повинні знайти рішення, але це може бути перевірено в поліноміальний час. Проблема NPC в NP є більш складною проблемою, тому, якщо ми можемо довести, що у нас є P розв’язання проблеми NPC, то проблеми NP, які можна знайти в рішенні P.

NP Hard: посилається на поліном час ще для пошуку рішення, але він впевнений, що він не може бути перевірений у поліноміальному часі. NP Hard problem перевершує складність NPC.


Радий бачити цю відповідь, категоризаційна частина є досить виразною для всієї концепції. Я думав, що взаємодіючі проблеми - це NP-проблеми.
PeerNet

22

NP-Complete - це клас проблем.

Клас Pскладається з тих задач, які розв’язуються в поліноміальний час . Наприклад, вони можуть бути вирішені в O (n k ) для деякої постійної k, де n - розмір вхідного сигналу. Простіше кажучи, ви можете написати програму, яка запуститься у розумні строки.

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

Деякі приклади - булева задача (або SAT ), або проблема гамільтонівського циклу. Існує багато проблем, які, як відомо, є в класі NP.

NP-Completeозначає , що проблема в тому , по крайней мере , так само важко , як і будь-якої проблеми в НП.

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

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


це неправильно. Проблема в NP може бути перетворена в будь-яку проблему в NP-повному, а не в будь-яку проблему в NP. Це велика різниця.
Девід Неме

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

Дякую за ваші спостереження. Я оновив відповідь, включаючи ваші виправлення.
Вінсент Рамдхані

1
Ваше визначення NP-Complete не є повним, вам також потрібно вказати, що проблеми NP-Complete є також проблемами NP (і NP-hard) і не так важко, як будь-які проблеми NP. Я подзвоню, якщо ви вирішите змінити, дайте мені знати, і я видалю нижню заяву.
nbro

20

Це клас проблем, де ми повинні імітувати всі можливості, щоб бути впевненими, що в нас є оптимальне рішення.

Існує багато хорошої евристики для деяких проблем NP-Complete, але вони в кращому випадку є лише освіченою здогадкою.


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

1
Хоча це не зовсім правильно, це досить близько для практичного використання. Педантичне визначення не є необхідним, хоча ОП, ймовірно, бажає педантичного визначення. Це гарне наближення!
doug65536

18

Якщо ви шукаєте приклад неповної проблеми, тоді я пропоную переглянути 3-SAT .

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

(a or b) and (b or !c) and (d or !e or f) ...

Проблема 3-SAT полягає у пошуку рішення, яке задовольнить вираз, у якому кожен із OR-виразів має рівно 3 булевих значень:

(a or !b or !c) and (!a or b or !d) and (b or !c or d) ...

Рішенням цього може бути (a = T, b = T, c = F, d = F). Однак не знайдено жодного алгоритму, який би вирішив цю проблему в загальному випадку за многочлен. Це означає, що найкращий спосіб вирішити цю проблему - це, по суті, зробити відгадку та перевірити грубі сили та спробувати різні комбінації, поки не знайдете одну, яка працює.

Особливість проблеми 3-SAT полягає в тому, що будь-яка NP-повна проблема може бути зведена до 3-SAT проблеми. Це означає, що якщо ви зможете знайти алгоритм поліноміального часу, щоб вирішити цю проблему, то ви отримаєте $ 1 000 000 , не кажучи вже про повагу та захоплення комп'ютерних вчених та математиків у всьому світі.


Можливо, мене бентежать інші пояснення тут, але чи не слід це читати "БУДЬ-яка проблема NP може бути зведена до 3-SAT проблеми в поліноміальний час". Тому що це не те, що робить 3-SAT NP-Complete?
DubiousPusher

@DubiousPusher Nope. У відповіді це правильно зазначено. Це зображення прояснює його stackoverflow.com/a/7367561/2686502
jayeshsolanki93

14

Чесно кажучи, Вікіпедія може бути найкращим місцем для пошуку відповіді на це.

Якщо NP = P, ми можемо вирішити дуже важкі проблеми набагато швидше, ніж ми вважали, що могли раніше. Якщо ми вирішимо лише одну задачу NP-Complete за P (поліном) час, то вона може бути застосована до всіх інших задач у категорії NP-Complete.


6
"Якщо NP = P, ми можемо вирішити дуже важкі проблеми набагато швидше, ніж ми вважали, що могли раніше". - Ні. Якщо NP = P, то існують рішення (існують детерміновані алгоритми їх вирішення), але немає гарантії, що ми коли-небудь дізнаємося, що вони є.
програміст Windows

Справедливий момент. Моя здогадка - будь-який доказ того, що P = NP, ймовірно, може бути конструктивним (наприклад, публікація поліноміального алгоритму для 3-SAT).
Кріс Конвей

10

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

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

Це означає, що багато простих проблем є і «в NP», тому що ми можемо написати погані алгоритми для вирішення легких проблем. Було б добре знати, які проблеми в НП справді складні, але ми не просто хочемо сказати, "це ті, для кого ми не знайшли хорошого алгоритму". Зрештою, я міг би створити проблему (назвіть це X), яка, на мою думку, потребує супердивовижного алгоритму. Я кажу світові, що найкращий алгоритм, який я міг би придумати, щоб погано вирішити шкали Х, і тому я вважаю, що Х - це дійсно жорстка проблема. Але завтра, можливо, хтось розумніший за мене винайде алгоритм, який вирішує X і знаходиться в P. Отже, це не дуже добре визначення важких проблем.

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


5

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

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

Але не все втрачено, якщо проблема, з якою ви зіткнетеся, - NP Complete. Існує широке і дуже технічне поле, де люди вивчають алгоритми наближення, що дасть вам гарантії наближення до вирішення повної задачі NP. Деякі з них неймовірно сильні гарантії - наприклад, на 3sat ви можете отримати гарантію 7/8 через дійсно очевидний алгоритм. Навіть краще, насправді є кілька дуже сильних евристик, які чудово дають відповіді (але жодних гарантій!) На ці проблеми.

Зауважимо, що дві дуже відомі проблеми - ізоморфізм графіка та факторинг - невідомі як P або NP.


5

Я почув пояснення, тобто: "NP-повнота - це, мабуть, одна з найбільш загадкових ідей при вивченні алгоритмів." NP "означає" недетермінований поліноміальний час ", і це назва для того, що називається класом складності які проблеми можуть належати. Важливим у класі складності NP є те, що проблеми в межах цього класу можна перевіритиза поліноміальним алгоритмом часу. Як приклад, розглянемо проблему підрахунку матеріалів. Припустимо, на столі стоїть пучок яблук. Проблема полягає в тому, "скільки яблук є?" Вам надається можлива відповідь, 8. Ви можете перевірити цю відповідь у поліноміальний час, використовуючи алгоритм, так, підрахувавши яблука. Підрахунок яблук трапляється в O (n) (це позначення Big-Oh), тому що для підрахунку кожного яблука потрібно один крок. Для n яблук потрібно n кроків. Ця проблема знаходиться в класі складності NP.

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

Класичний приклад проблеми NP-Complete - проблема продавця подорожей ".

Автор: ApoxyButt Від: http://www.everything2.com/title/NP-complete


2

Проблема NP: -

  1. Проблема НП - така проблема, яку можна вирішити в недетермінований поліном час.
  2. Недетермінований алгоритм працює в два етапи.
  3. Стадія недетермінованого відгадування && Недетермінований етап перевірки.

Тип завдання Np

  1. NP в комплекті
  2. NP Hard

NP Повна проблема: -

1 Проблема рішення A називається NP завершеною, якщо вона має дві властивості: -

  1. Належить до класу NP.
  2. Кожна інша проблема в НП може бути перетворена на Р в поліноміальний час.

Деякі екс: -

  • Проблема з рюкзаком
  • проблема заданої суми
  • Проблема покриття вершин

Швидке запитання про ваші етапи ... чи не може етап підтвердження бути детермінованим? Не підтверджені проблеми з NP в P-час
Кек

1

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


1

Наскільки я розумію

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

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

NP-Hard - це той набір, де проблеми принаймні такі ж важкі, як і NP. Будь-яка проблема в NP може бути перетворена на NP-Hard задачу за багаточлен. Ці задачі не можуть бути вирішені за багаточлен, якщо P не дорівнює NP. Тобто, коли найважча проблема в НП є розв'язуваною в поліномі в часі, тоді вирішуються лише задачі, пов'язані з NP-Hard.

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

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


-17

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

Проблема NP-Complete є NP, але також якщо ви можете вирішити її в поліноміальний час (називається P), то всі проблеми NP є P.

Тож потріскайтеся.

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