Які відмінності між NP , NP-Complete і NP-Hard ?
Мені відомо про багато ресурсів у мережі. Я хотів би прочитати ваші пояснення, і причина полягає в тому, що вони можуть відрізнятися від того, що там, або я щось не знаю.
Які відмінності між NP , NP-Complete і NP-Hard ?
Мені відомо про багато ресурсів у мережі. Я хотів би прочитати ваші пояснення, і причина полягає в тому, що вони можуть відрізнятися від того, що там, або я щось не знаю.
Відповіді:
Я припускаю, що ви шукаєте інтуїтивні визначення, оскільки технічні визначення потребують досить часу, щоб зрозуміти. Перш за все, згадаймо попередню необхідну концепцію для розуміння цих визначень.
Тепер давайте визначимо ці класи складності .
P - клас складності, який представляє сукупність усіх завдань рішення, які можна вирішити за багаточлен .
Тобто, враховуючи екземпляр проблеми, відповідь "так" чи "ні" не може бути вирішена в поліноміальний час.
Приклад
З огляду на з'єднаний графік G
, чи можна його вершини забарвити двома кольорами, щоб жодне ребро не було однотонним?
Алгоритм: почніть з довільної вершини, пофарбуйте її у червоний колір та всіх сусідів у синій колір та продовжуйте. Зупиніться, коли у вас закінчуються вершини або ви змушені зробити край, щоб обидві його кінцеві точки були однакового кольору.
NP - клас складності, який представляє сукупність усіх проблем рішення, для яких випадки, коли відповідь "так", мають докази, які можна перевірити в поліноміальний час.
Це означає, що якщо хтось подає нам приклад проблеми та довідку (іноді її називають свідком), що відповідь "так", ми можемо перевірити, чи правильно це в поліноміальний час.
Приклад
Цілісна факторизація знаходиться в NP. Це проблема, яка задана цілими числами, n
і m
чи існує ціле число f
з 1 < f < m
таким, яке f
ділиться n
( f
є малим фактором n
)?
Це проблема рішення, тому що відповіді - так чи ні. Якщо хто - то руки нам примірник завдання (так вони передають нам цілі n
і m
) і ціле число f
з 1 < f < m
, і затвердженням , що f
є одним з факторів n
(сертифікат), ми можемо перевірити відповідь в поліноміальний час , виконуючи поділ n / f
.
NP-Complete - клас складності, який представляє сукупність усіх задач X
NP, для яких можна звести будь-яку іншу задачу NP Y
до X
поліноміального часу.
Інтуїтивно це означає, що ми можемо Y
швидко вирішити, якщо знаємо, як X
швидко вирішити . Точніше, Y
зводиться до X
, якщо існує поліноміальний алгоритм часу f
для перетворення примірників y
з Y
доступ до примірників x = f(y)
з X
за поліноміальний час, з тим властивістю , що відповідь на y
це так, якщо і тільки якщо відповідь на f(y)
це так.
Приклад
3-SAT
. Це проблема, в якій нам дано сполучення (ANDs) 3-клапнових диз'юнкцій (АБО), висловлювання форми
(x_v11 OR x_v21 OR x_v31) AND
(x_v12 OR x_v22 OR x_v32) AND
... AND
(x_v1n OR x_v2n OR x_v3n)
де кожна x_vij
- булева змінна чи заперечення змінної з кінцевого попередньо визначеного списку (x_1, x_2, ... x_n)
.
Можна показати, що кожна проблема NP може бути зведена до 3-SAT . Доказом цього є технічне та вимагає використання технічного визначення НП ( на основі недетермінованих машин Тьюрінга ). Це відомо як теорема Кука .
Важливими проблеми, повні з NP, є те, що якщо для вирішення однієї з них може бути знайдений алгоритм детермінованого полінома, кожна задача НП вирішується в поліноміальний час (одна проблема, щоб керувати ними всіма).
Інтуїтивно це проблеми, які принаймні настільки ж важкі, як і проблеми, пов'язані з NP . Зауважте, що важкі проблеми з NP не повинні бути в NP , і вони не повинні бути проблемами вирішення .
Точне визначення тут полягає в тому, що проблема X
є складною для NP, якщо є проблема Y
, повна NP , така, яка Y
зводиться до X
поліноміального часу .
Але оскільки будь-яка NP-повна проблема може бути зведена до будь-якої іншої NP-повної задачі в поліноміальний час, всі NP-повні проблеми можуть бути зведені до будь-якої NP-важкої проблеми в поліноміальний час. Тоді, якщо є рішення однієї задачі з жорстким NP в поліномальному часі, є рішення всіх задач NP в поліноміальний час.
Приклад
Проблема зупинки є важкою проблемою. Це проблема, яка дасть програму P
та вклад I
, чи зупиниться? Це проблема рішення, але вона не в НП. Зрозуміло, що будь-яка проблема, заповнена NP, може бути зведена до цієї. Як інший приклад, будь-яка проблема, повний NP, є важкою.
Моя улюблена проблема NP-завершення - проблема шахтника .
Ця проблема є найвідомішою проблемою інформатики та одним із найважливіших невирішених питань математичних наук. Справді, Clay інститут пропонує один мільйон доларів за вирішення проблеми (Стівен Кук рецензія на сайті Клей досить добре).
Зрозуміло, що P - це підмножина NP. Відкрите питання полягає в тому, чи мають проблеми НП детерміновані поліноміальні рішення часу. Багато в чому вважається, що їх немає. Ось видатна нещодавня стаття про останню (і важливість) проблеми P = NP: стан проблеми P проти NP .
Найкраща книга на цю тему - Комп'ютери та нездатність Гарі та Джонсона.
Я озирався і бачив багато довгих пояснень. Ось невеликий графік, який може бути корисним для узагальнення:
Зверніть увагу, як складність збільшується зверху вниз: будь-який NP може бути зменшений до NP-Complete , а будь - який NP-Complete може бути зменшений до NP-Hard , і все це за P (поліном).
Якщо ви зможете вирішити більш складний клас задачі за P час, це означає, що ви знайшли, як вирішити всі простіші проблеми за P час (наприклад, доведення P = NP, якщо ви зрозумієте, як вирішити будь-яку задачу NP-Complete в Р час).
____________________________________________________________ | Тип проблеми | Перевіряється за P час | Розв’язується за P час | Збільшення складності ___________________________________________________________ | | | П | Так | Так | | | НП | Так | Так чи ні * | | | NP-Повне | Так | Невідомо | | | NP-Hard | Так чи ні ** | Невідомо *** | | ____________________________________________________________ V
Примітки до Yes
або No
записи:
Я також вважав цю діаграму досить корисною, коли бачите, як всі ці типи відповідають один одному (приділіть більше уваги лівій половині діаграми).
Це дуже неформальна відповідь на поставлене запитання.
Чи можна 3233 записати як добуток двох інших чисел, більших від 1? Чи є якийсь спосіб пройти шлях навколо всіх Семи мостів Кенігсберга, не вступаючи жодного мосту двічі? Це приклади запитань, які мають спільну рису. Можливо, не очевидно, як ефективно визначити відповідь, але якщо відповідь "так", то для підтвердження доказу є короткий і швидкий. У першому випадку нетривіальна факторизація 51; по-друге, маршрут для прогулянки мостами (відповідні обмеженням).
Проблема рішення являє собою набір питань з так чи ні відповідей , які розрізняються лише по одному параметру. Скажіть проблему COMPOSITE = {"Чи n
складений": n
це ціле число} або EULERPATH = {"Чи має графік G
шлях Ейлера?": G
Є кінцевим графіком}.
Зараз деякі проблеми з рішенням піддаються ефективним, якщо не очевидним алгоритмам. Ейлер виявив ефективний алгоритм для таких проблем, як "Сім мостів Кенігсберга" понад 250 років тому.
З іншого боку, для багатьох проблем з рішенням не очевидно, як отримати відповідь - але якщо ви знаєте якусь додаткову інформацію, очевидно, як слід довести, що ви правильно отримали відповідь. КОМПОЗИЦІЯ виглядає так: Пробний поділ - це очевидний алгоритм, і це повільно: щоб визначити десятизначне число, потрібно спробувати щось на зразок 100 000 можливих дільників. Але якщо, наприклад, хтось сказав вам, що 61 - це дільник 3233, простий довгий поділ - це ефективний спосіб зрозуміти, що вони правильні.
Клас складності NP - це клас проблем прийняття рішень, де відповіді "так" мають короткі відомості, які швидко перевіряють докази. Як і КОМПОЗИТ. Важливим моментом є те, що це визначення нічого не говорить про те, наскільки важкою є проблема. Якщо у вас є правильний, ефективний спосіб вирішити проблему рішення, достатньо доказів лише написання кроків у рішенні.
Дослідження алгоритмів тривають, і постійно створюються нові розумні алгоритми. Проблема, яку ви можете не знати, як ефективно вирішити сьогодні, може завтра виявитись ефективним (якщо не очевидним) рішенням. Насправді дослідникам було потрібно до 2002 року, щоб знайти ефективне рішення КОМПОЗИТ! З урахуванням усіх цих досягнень, справді, варто замислитися: чи це трохи про те, що короткі докази є лише ілюзією? Можливо, кожна проблема вирішення, яка піддається ефективним доказів, має ефективне рішення? Ніхто не знає .
Мабуть, найбільший внесок у цю сферу прийшов із відкриттям своєрідного класу проблем НП. Граючи з моделями схеми для обчислення, Стівен Кук виявив проблему вирішення різноманітності NP, яка виявилася настільки ж важкою або важкою, ніж будь-яка інша проблема NP. Ефективне рішення для булевої проблеми задоволеності може бути використане для створення ефективного рішення будь-якої іншої проблеми в НП. Незабаром Річард Карп показав, що ряд інших проблем з рішенням може служити тій самій цілі. Ці проблеми, в певному сенсі "найважчі" проблеми в НП, стали називатися проблемами, що завершуються NP .
Звичайно, NP - це лише клас проблем вирішення. Багато проблем, природно, не викладені таким чином: "знайти чинники N", "знайти найкоротший шлях у графі G, який відвідує кожну вершину", "дати набір змінних призначень, що робить наступний булевий вираз істинним". Хоча можна неофіційно говорити про те, що деякі подібні проблеми знаходяться «в НП», технічно це не має особливого сенсу - вони не є проблемами вирішення. Деякі з цих проблем можуть мати навіть таку ж силу, як і проблема, що не стосується NP: ефективне вирішення цих проблем (без рішення) призведе безпосередньо до ефективного вирішення будь-якої проблеми НП. Така проблема називається NP-hard .
P (Поліномний час): Як підказує сама назва, це проблеми, які можна вирішити в поліноміальний час.
NP (недетерміновано-поліноміальний час): це проблеми рішення, які можна перевірити в поліноміальний час. Це означає, що якщо я стверджую, що для певної проблеми існує поліноміальне рішення, ви попросите мене довести це. Тоді я надам вам доказ, який ви можете легко перевірити за багаточлен. Такі проблеми називаються проблемами НП. Зауважимо, що тут ми не говоримо про те, чи існує поліноміальне рішення часу для цієї проблеми чи ні. Але ми говоримо про перевірку розв’язання заданої задачі за багаточлен.
NP-Hard: Вони, принаймні, такі ж важкі, як і найважчі проблеми в НП. Якщо ми можемо вирішити ці проблеми в поліноміальний час, ми можемо вирішити будь-яку задачу NP, яка, можливо, існує. Зауважте, що ці проблеми не обов'язково є проблемами NP. Це означає, що ми можемо / не можемо перевірити рішення цих задач у поліномний час.
NP-Complete: Це проблеми, які є як NP, так і NP-Hard. Це означає, що якщо ми можемо вирішити ці проблеми, ми можемо вирішити будь-яку іншу задачу НП, і розв’язання цих задач може бути перевірено в поліноміальний час.
Окрім інших чудових відповідей, ось типова схема, яку люди використовують, щоб показати різницю між NP, NP-Complete та NP-Hard:
Найпростіший спосіб пояснити P v. NP та подібне, не вдаючись до технічних питань - порівнювати "проблеми зі словом" з "проблемами з численним вибором".
Коли ви намагаєтеся вирішити "проблему зі словом", ви повинні знайти рішення з нуля. Коли ви намагаєтеся вирішити "проблеми з численним вибором", у вас є вибір: або вирішіть це так, як би ви сказали "проблему зі словом", або спробуйте підключити кожну з наданих вам відповідей, і виберіть відповідь кандидата, яка відповідає.
Часто трапляється так, що "проблема з вибором з декількома варіантами" набагато простіше, ніж відповідна "проблема слова": заміна відповідей кандидата і перевірка їх відповідності може зажадати значно менших зусиль, ніж пошук правильної відповіді з нуля.
Тепер, якщо ми погодимось із зусиллями, які займають час полінома «легким», тоді клас P складався б із «легких проблем зі словом», а клас NP складався з «легких задач з множинним вибором».
Суть P v. NP полягає в питанні: "Чи є легкі проблеми з численним вибором, які не є простими, як проблеми зі словом"? Тобто, чи є проблеми, на які легко перевірити обґрунтованість даної відповіді, але знайти цю відповідь з нуля важко?
Тепер, коли ми зрозуміли інтуїтивно, що таке НП, нам доведеться кинути виклик своїй інтуїції. Виявляється, є "проблеми з численним вибором", які в певному сенсі є найважчими з усіх: якби можна було знайти рішення однієї з "найважчих з усіх" проблем, можна було б знайти рішення ВСІХ Проблеми НП! Коли Кук відкрив це 40 років тому, це стало повною несподіванкою. Ці "найважчі з усіх" проблеми відомі як NP-hard. Якщо ви знайдете «вирішення проблеми із словом» для однієї з них, ви автоматично знайдете «вирішення проблеми із словом» для кожної «простої проблеми з множинним вибором»!
Нарешті, проблеми, що завершуються NP, - це ті, які є одночасно NP і NP-жорсткими. Дотримуючись нашої аналогії, вони одночасно є "простими як проблеми з численним вибором" і "найважчі з усіх, як проблеми зі словом".
Проблеми, що завершуються NP, - це ті проблеми, які є як NP-Hard, так і NP-класом складності. Отже, щоб показати, що будь-яка дана проблема не є повною NP, потрібно показати, що проблема є і в NP, і в тому, що вона є NP-важкою.
Проблеми, що знаходяться в класі складності NP, можуть бути вирішені недетерміновано за час полінома, а можливе рішення (тобто сертифікат) для задачі в NP може бути перевірено на правильність у поліноміальному часі.
Прикладом недетермінованого рішення проблеми k-clique може бути щось на зразок:
1) випадковим чином вибрати графік k вузлів
2) перевірте, що ці k вузли утворюють кліку.
Вищеописана стратегія є поліноміальною за розміром вхідного графіка, і тому k-кліка проблема знаходиться в NP.
Зауважимо, що всі задачі, що детерміновано вирішуються в поліноміальний час, також є в NP.
Показано, що проблема є важкою для NP, як правило, передбачає зменшення проблеми, пов’язаної з NP-hard, до вашої проблеми за допомогою поліноміального відображення часу: http://en.wikipedia.org/wiki/Reduction_(complexity)
Я думаю, що ми можемо відповісти на це набагато коротше. Я відповів на відповідне запитання і скопіювавши свою відповідь звідти
Але, по-перше, проблема з важким NP - це проблема, для якої ми не можемо довести, що існує поліноміальний час. NP-твердість деякої «проблеми-P» зазвичай доводиться шляхом перетворення вже перевіреної проблеми NP-hard у «задачу-P» за багаточлен.
Щоб відповісти на решту запитань, спершу потрібно зрозуміти, які важкі проблеми з NP також є NP-завершеними. Якщо проблема NP-hard належить до встановленої NP, то вона NP-повна. Щоб належати до встановленого NP, проблема повинна бути
(i) проблема рішення,
(ii) кількість рішень задачі має бути кінцевою, і кожне рішення має бути довжиною полінома, і
(iii) даючи розв'язок довжини полінома, ми повинні мати можливість сказати, чи відповідь на проблема - так / ніТепер неважко помітити, що може бути багато важких проблем щодо NP, які не належать до встановленого NP і важче вирішити. Як інтуїтивно зрозумілий приклад, оптимізаційна версія мандрівного продавця, де нам потрібно знайти фактичний графік, важче, ніж версія рішення мандрівного продавця, де нам просто потрібно визначити, чи існує графік довжиною <= k чи ні.
На це конкретне запитання є справді приємні відповіді, тому немає сенсу писати моє власне пояснення. Тож я спробую зробити чудовий ресурс про різні класи складності обчислень.
Для тих, хто думає, що обчислювальна складність стосується лише P та NP, тут є найбільш вичерпним ресурсом про різні проблеми складності обчислювальної техніки. Окрім проблем, заданих ОП, він містив приблизно 500 різних класів обчислювальних задач із приємними описами, а також перелік фундаментальних наукових робіт, що описують клас.
Наскільки я розумію, проблема , яка займається np-hard , не є «важчою», ніж проблема, повна в np . Насправді, за визначенням, кожна проблема, що завершує np:
- Вступ. до алгоритмів (3ed) Кормен, Лейзерсон, Рівест і Штейн, стор. 1069
I
щодоn
змінних, спробуйте всі2^n
можливі призначення змінних і зупиніть, якщо одна задовольняє пропозицію, а в іншому випадку введіть нескінченний цикл. Ми бачимо, що цей алгоритм зупиняється тоді і лише тоді, колиI
він задоволений. Таким чином, якби у нас був алгоритм поліноміального часу для вирішення задачі зупинки, ми могли б вирішити SAT у поліноміальний час. Тому проблема зупинки є NP-жорсткою.