Що є проблемою, повним NP? Чому це така важлива тема в галузі інформатики?
Що є проблемою, повним NP? Чому це така важлива тема в галузі інформатики?
Відповіді:
NP позначає недетермінований поліномний час.
Це означає, що проблему можна вирішити в поліноміальний час за допомогою недетермінованої машини Тюрінга (як звичайна машина Тьюрінга, але також включаючи недетерміновану функцію "вибір"). В основному, рішення має бути перевіреним у полі час. Якщо це так, і відому проблему NP можна вирішити за допомогою заданої задачі з модифікованим входом (проблема NP може бути зведена до заданої задачі), тоді проблема є NP завершеною.
Головне, що потрібно позбавити від повної NP-проблеми, це те, що вона не може бути вирішена в поліноміальний час відомим способом. NP-Hard / NP-Complete - це спосіб показати, що певні класи проблем не вирішуються в реалістичний час.
Редагувати: Як зазначали інші, часто існують приблизні рішення проблем NP-Complete. У цьому випадку наближене рішення, як правило, дає наближене наближення за допомогою спеціальних позначень, які вказують нам наскільки близьке наближення.
NP - це сукупність усіх проблем рішення (запитання з відповіддю "так" або "ні"), для яких відповіді "так" можуть бути перевірені в поліноміальний час (O (n k ), де n - розмір проблеми, а k - a постійна) детермінованою машиною Тюрінга . Поліномний час іноді використовується як визначення швидкого або швидкого .
P є безліч всіх задач прийняття рішень , які можуть бути вирішені в поліноміальний час на детермінованою машині Тьюринга . Оскільки їх можна розв’язати за полиномним часом, їх можна перевірити і в поліноміальний час. Тому P - підмножина NP.
Проблема x, яка є в NP, також є в NP-Complete, якщо і лише тоді, коли будь-яка інша проблема в NP може бути швидко (тобто в поліноміальний час) перетворена в x.
Іншими словами:
Отже, що робить NP-Complete таким цікавим, що якщо будь-яку з проблем NP-Complete було вирішено швидко, то всі проблеми з NP можна швидко вирішити.
Дивіться також пост Що таке "P = NP?", І чому це таке відоме питання?
NP-Hard - це проблеми, принаймні такі ж важкі, як і найважчі проблеми в NP. Зауважте, що проблеми NP-Complete є також важкими для NP. Однак не всі важкі проблеми NP - це NP (або навіть проблема вирішення), незважаючи на те, що вони NP
є префіксом. Тобто NP у NP-hard не означає недетермінований поліном часу . Так, це заплутано, але його використання закріпилося і навряд чи зміниться.
NP-Complete означає щось дуже конкретне, і ви повинні бути обережними, або ви зрозумієте неправильне визначення. По-перше, проблема НП - це так / ні проблема
Проблема X є NP-Complete, якщо
Якщо X є NP-повним і існує детермінований поліноміальний часовий алгоритм, який може правильно вирішити всі екземпляри X (0% хибнопозитивних, 0% помилкових негативів), то будь-яка проблема в NP може бути вирішена в детерміновано-поліноміально- час (зведення до X).
Поки ніхто не придумав такого детермінованого алгоритму багаточленного часу, але ніхто не довів, що його не існує (мільйон баксів для тих, хто може це зробити: проблема P = NP ). Це не означає, що ви не можете вирішити конкретний екземпляр проблеми NP-Complete (або NP-Hard). Це просто означає, що ви не можете мати щось, що надійно працюватиме у всіх випадках проблеми так само, як ви могли б надійно сортувати список цілих чисел. Ви, можливо, зможете придумати алгоритм, який буде дуже добре працювати у всіх практичних випадках проблеми NP-Hard.
В основному проблеми цього світу можна віднести до категорії
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-Complete - це клас проблем.
Клас P
складається з тих задач, які розв’язуються в поліноміальний час . Наприклад, вони можуть бути вирішені в O (n k ) для деякої постійної k, де n - розмір вхідного сигналу. Простіше кажучи, ви можете написати програму, яка запуститься у розумні строки.
Клас NP
складається з тих завдань, які можна перевірити в поліноміальний час. Тобто, якщо нам дають потенційне рішення, то ми могли б перевірити, чи дане рішення є правильним у поліноміальний час.
Деякі приклади - булева задача (або SAT ), або проблема гамільтонівського циклу. Існує багато проблем, які, як відомо, є в класі NP.
NP-Complete
означає , що проблема в тому , по крайней мере , так само важко , як і будь-якої проблеми в НП.
Це важливо для інформатики, оскільки було доведено, що будь-яка проблема в НП може бути перетворена на іншу проблему в NP-комплектації. Це означає, що рішення будь-якої однієї задачі, що не стосується НП, є рішенням усіх проблем НП.
Багато алгоритмів безпеки залежить від того, що не існує відомих рішень для важких проблем NP. Це, безумовно, суттєво вплине на обчислення, якби було знайдено рішення.
Це клас проблем, де ми повинні імітувати всі можливості, щоб бути впевненими, що в нас є оптимальне рішення.
Існує багато хорошої евристики для деяких проблем NP-Complete, але вони в кращому випадку є лише освіченою здогадкою.
Якщо ви шукаєте приклад неповної проблеми, тоді я пропоную переглянути 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 = P, ми можемо вирішити дуже важкі проблеми набагато швидше, ніж ми вважали, що могли раніше. Якщо ми вирішимо лише одну задачу NP-Complete за P (поліном) час, то вона може бути застосована до всіх інших задач у категорії NP-Complete.
Нам потрібно відокремити алгоритми та проблеми. Ми пишемо алгоритми для вирішення задач, і вони певним чином масштабуються. Хоча це і є спрощення, давайте позначимо алгоритм значенням "P", якщо масштабування досить добре, і "NP", якщо його немає.
Корисно знати речі про проблеми, які ми намагаємося вирішити, а не алгоритми, які ми використовуємо для їх вирішення. Тож ми скажемо, що всі проблеми, які мають алгоритм чіткого масштабування, знаходяться "в P". А ті, які мають поганий алгоритм масштабування, знаходяться "в NP".
Це означає, що багато простих проблем є і «в NP», тому що ми можемо написати погані алгоритми для вирішення легких проблем. Було б добре знати, які проблеми в НП справді складні, але ми не просто хочемо сказати, "це ті, для кого ми не знайшли хорошого алгоритму". Зрештою, я міг би створити проблему (назвіть це X), яка, на мою думку, потребує супердивовижного алгоритму. Я кажу світові, що найкращий алгоритм, який я міг би придумати, щоб погано вирішити шкали Х, і тому я вважаю, що Х - це дійсно жорстка проблема. Але завтра, можливо, хтось розумніший за мене винайде алгоритм, який вирішує X і знаходиться в P. Отже, це не дуже добре визначення важких проблем.
Тим не менш, в НП існує багато проблем, про які ніхто не знає хорошого алгоритму. Тож якби я міг довести, що X - це певна проблема: та, де хороший алгоритм для вирішення X, також можна було б використати певним чином, щоб дати хороший алгоритм для кожної іншої проблеми в NP. Тепер люди можуть бути трохи впевнені, що X - справді хитра проблема. І в цьому випадку ми називаємо X NP-Complete.
Вище наведені вище визначення повних задач НП є правильним, але я подумав, що я міг би лірично розповісти про їхню філософську важливість, оскільки ніхто ще не займався цим питанням.
Майже всі складні проблеми, з якими ви зіткнетеся, будуть NP Complete. У цьому класі є щось дуже принципове, і це, здається, обчислювально відрізняється від легко вирішуваних задач. Вони наче мають свій аромат, і розпізнати їх не так вже й важко. Це в основному означає, що будь-який помірно складний алгоритм вам неможливо точно вирішити - планування, оптимізація, упаковка, покриття тощо.
Але не все втрачено, якщо проблема, з якою ви зіткнетеся, - NP Complete. Існує широке і дуже технічне поле, де люди вивчають алгоритми наближення, що дасть вам гарантії наближення до вирішення повної задачі NP. Деякі з них неймовірно сильні гарантії - наприклад, на 3sat ви можете отримати гарантію 7/8 через дійсно очевидний алгоритм. Навіть краще, насправді є кілька дуже сильних евристик, які чудово дають відповіді (але жодних гарантій!) На ці проблеми.
Зауважимо, що дві дуже відомі проблеми - ізоморфізм графіка та факторинг - невідомі як P або NP.
Я почув пояснення, тобто: "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
NP Повна проблема: -
1 Проблема рішення A називається NP завершеною, якщо вона має дві властивості: -
Деякі екс: -
Проблеми, заповнені NP, - це сукупність проблем, до кожної з яких будь-яка інша проблема NP може бути зменшена за багаточлен, і рішення якої все ще може бути перевірено в поліноміальний час. Тобто, будь-яка проблема НП може бути перетворена на будь-яку з проблем, повних у НП. - Неофіційно проблема, повна NP, є проблемою NP, яка є принаймні такою ж "жорсткою", як і будь-яка інша проблема в NP.
Наскільки я розумію
P - це сукупність задач, які можна було б вирішити в многочлени за допомогою детермінованої ТМ.
NP - це сукупність завдань, яка потребує недетермінованої ТМ, щоб її вирішити в поліноміальний час. Це означає паралельно перевіряти всі можливі змінні, кожен екземпляр займає поліноміальний час. Якщо проблема вирішується, принаймні один із цих паралельних станів повинен мати рішення проблеми. Це також означає, що якщо ви здогадалися про змінні рішення, то єдине, що потрібно, - це перевірити обґрунтованість рішення в поліноміальний час.
NP-Hard - це той набір, де проблеми принаймні такі ж важкі, як і NP. Будь-яка проблема в NP може бути перетворена на NP-Hard задачу за багаточлен. Ці задачі не можуть бути вирішені за багаточлен, якщо P не дорівнює NP. Тобто, коли найважча проблема в НП є розв'язуваною в поліномі в часі, тоді вирішуються лише задачі, пов'язані з NP-Hard.
NP-Complete - це набір перетину NP і NP-Hard. Будь-яка проблема NP може бути перетворена на NP-Complete задачу за багаточлен. Це означає, що якщо будь-який з NP-Complete може мати ефективне рішення, то будь-яка проблема NP може бути вирішена з однаковою ефективністю.
Будь ласка, дайте мені знати, чи зробив я якусь помилку.
Проблема NP - це проблема, де комп’ютерний алгоритм, який підтверджує рішення, може бути створений за багаточлен.
Проблема NP-Complete є NP, але також якщо ви можете вирішити її в поліноміальний час (називається P), то всі проблеми NP є P.
Тож потріскайтеся.