Намагаємося зрозуміти P проти NP проти NP Complete проти NP Hard


38

Я намагаюся зрозуміти ці класифікації та чому вони існують. Чи правильно моє розуміння? Якщо ні, то що?

  1. P - поліноміальна складність або для якогось негативного реального числа , наприклад , тощо. Якщо проблема належить до P, то існує принаймні один алгоритм, який може вирішити її з нуля за багаточлен. Наприклад, я завжди можу зрозуміти, чи є якесь ціле число простим, перекидаючи і перевіряючи на кожному кроці, чи ділиться .O(nk)kO(1), O(n1/2), O(n2), O(n3)n2 <= k <= sqrt(n)kn

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

  3. NP-Complete я взагалі не розумію, але як приклад цього наводиться Проблема продавця подорожей. Але, на мій погляд, проблема TSP може бути просто NP, тому що потрібно щось на зразок перевірити, чи вам дано шлях наперед.O(2n n2) time to solve, but O(n)

  4. NP-Hard я припускаю, що він просто невідомий. Важко перевірити, важко вирішити.


4
Ви читали питання на CS.SE Що таке визначення P, NP, NP- komplet та NP-hard? ?

Я ще не бачив цього посилання, ні. Я прочитаю це, спасибі
Nakano

1
Ця відповідь CS.SE викликає велике враження, але я думаю, що можна дати дуже стисле і не оманливе пояснення того, що означають ці терміни, не вдаючись до майже стільки детальних даних. @Nakano зацікавив би коротший відповідь "до суті" чи цей пост CS.SE вирішує вашу проблему?
Іхрек

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

1
"недетермінований" можна інтерпретувати як "даний вибір, коли комп'ютер щоразу обирає правильний вибір".
Thorbjørn Ravn Andersen

Відповіді:


39

Ви в принципі правильні щодо P та NP, але не про NP-Hard та NP-Complete.

Для початку ось суперскладні визначення чотирьох класів складності, про які йдеться:

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

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

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

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

А ось діаграма Ейлера з Вікіпедії, що показує зв’язки між цими чотирма класами (якщо припустити, що P не дорівнює NP):

введіть тут опис зображення

Частина, яку я вважаю, що вам найбільше незнайома або плутана, - це поняття "скорочення поліноміального часу" від проблеми X до проблеми Y. Скорочення з X на Y - це просто алгоритм A, який вирішує X, використовуючи деякі інший алгоритм B, який вирішує задачу Y. Це зменшення називається "скороченням полінома в часі", якщо всі частини A, окрім B, мають багаточленну часову складність. Як тривіальний приклад, проблема знаходження найменшого елемента в масиві є постійним часом, зводиться до проблеми сортування, оскільки ви можете сортувати масив, а потім повернути перший елемент відсортованого масиву.

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

Проблема зупинки - хороший приклад важкої проблеми з NP, яка явно не є в NP, як пояснює Вікіпедія :

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


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

1
@Nakano stackoverflow.com/questions/12637582 / ... Я вважаю , короткий відповідь , що , коли люди говорять про целочисленной факторизации є NP вони зазвичай говорять про дійсно величезних цілих числах, для яких ви зазвичай починаєте робити ваші докази великого-O з п як "число біт, яке ціле число займає в пам'яті", а не "кількість цілих чисел, які ви передали у функцію".
Іксрек

1
@Nakano Можливо, варто було б задати нове запитання конкретно щодо цієї цілої факторизації, якби питання, яке я пов’язував, і мій коментар були недостатніми для вирішення цієї проблеми для вас.
Іксрек

2
@Nakano: У нотації big-O значення nє мірою для розміру вводу (кількість елементів, байтів, цифр тощо), а не значення введення.
Барт ван Іґен Шенау

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

7

Цільова факторизація цитується як приклад NP, але я не розумію, чому це не P, особисто, оскільки пробна факторизація займає час O (sqrt (n)).

Для класів складності, n- це довжина вводу. Отже, якщо ви хочете поділити на ціле число k, nце не kтак log k, кількість біт (або що завгодно) потрібно, щоб записати число. Отже, ціла множинна факторизація, O(sqrt(k))як ви кажете, але це те, що є .O(sqrt(2n))O(2(n/2))

NP-Hard я припускаю, що він просто невідомий. Важко перевірити, важко вирішити.

Ні. NP-Hard - це лише те, наскільки важко вирішити проблему.

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

NP-Complete я зовсім не розумію

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

Я не знаю, що це означає, що це може бути недетермінованим.

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


То чи можливо для алгоритмів $ O (n ^ k) $ час НП?
Накано

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

Як насправді визначається довжина / розмір? Наприклад, я міг просто написати $ n $ у великій базі та зменшити її довжину при написанні. Як щодо проблем, які явно не мають цілих чисел, але скажіть графіки з вершинами $ V $ та ребрами $ E $ тощо
Nakano,

@Nakano, фактично велика база не змінила б її, оскільки це була б лише постійна різниця факторів. Таким чином, це не вплине на поліном проти не многочлени. Однак якби ви написали номер уніар, то це змінило б його.
Вінстон Еверт

2
@Nakano, гм ... Я б не наважувався пояснити класи складності п'ятирічному. : P
Вінстон Еверт

5

Перше, що потрібно зрозуміти, це те, що P і NP класифікують мови , а не проблеми . Щоб зрозуміти, що це означає, нам спочатку потрібні інші визначення.

Алфавіт є непустою кінцевим безліччю символів.

{ 0, 1} - це алфавіт, як і набір символів ASCII. {} - це не алфавіт, оскільки він порожній. N (цілі числа) не є алфавітом, оскільки він не є кінцевим.

Нехай Σ - алфавіт. Впорядкована конкатенація кінцевої кількості символів з Σ називається словом над Σ .

Рядок 101- це слово над алфавітом { 0, 1}. Пусте слово (часто пишеться як е ) слово над будь-яким алфавітом. Рядок penguin- це слово над алфавітом, що містить символи ASCII. Десяткова запис числа Пі слово в алфавіті { ., 0, 1, 2, 3, 4, 5, 6, 7, 8, 9} , тому що це не є кінцевим.

Довжина слова ш , записується в вигляді | w |, - кількість символів у ньому.

Наприклад, | hello| = 5 і | ε | = 0. Для будь-якого слова w , | w | ∈ N і тому скінченна.

Нехай Σ - алфавіт. Множина Σ містить усі слова над Σ , включаючи ε . Множина Σ + містить усі слова понад Σ , виключаючи ε . Для nN , Σ n - це набір слів довжиною n .

Для кожного алфавіту Σ , Σ і Σ + є нескінченними налічуваними множинами . Для набору символів ASCII Σ ASCII , регулярні вирази .*і .+позначають Σ ASCII і Σ ASCII + відповідно.

{ 0, 1} 7 є набір 7-бітових кодів ASCII { 0000000, 0000001..., 1111111}. { 0, 1} 32 - це набір 32-бітових цілих значень.

Нехай Σ - алфавіт, а LΣ . L називається мовою над Σ .

Для алфавіту Σ порожній набір та Σ - тривіальні мови над Σ . Перший часто називають порожньою мовою . Порожня мова {} та мова, що містить лише порожнє слово { ε }, відрізняються.

Підмножина { 0, 1} 32, що відповідає значенням з плаваючою точкою без NaN IEEE 754, є кінцевою мовою.

Мови можуть містити нескінченну кількість слів, але кожна мова піддається числу. Безліч рядків { 1, 2...} , що позначає цілі числа в десятковій системі числення нескінченного мову над алфавітом { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Нескінченна безліч ланцюжків { 2, 3, 5, 7, 11, 13, ...} , що позначає прості числа в десятковій системі числення є власним підмножиною їх. Мова, що містить усі слова, що відповідають регулярному виразу, [+-]?\d+\.\d*([eE][+-]?\d+)?є мовою над набором символів ASCII (позначає підмножину дійсних виразів з плаваючою комою, визначених мовою програмування C).

Немає мови, що містить усі реальні числа (у будь-якій нотації), оскільки набір реальних чисел не піддається обліку.

Нехай Σ - алфавіт, а LΣ . Машина D вирішує L, якщо для кожного входу wΣ вона обчислює характерну функцію χ L ( w ) у кінцевий час. Характерна функція визначається як

χ L : Σ  → {0, 1}
     w   ↦ 1,   wL 
         0, інакше.

Така машина називається вирішальною для L . Пишемо “ D ( w ) = x ” для “заданих w , D виходів x ”.

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

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

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

Оскільки ви використовували це у своєму запитанні, я припускаю, що ви вже знайомі з позначенням "big-O", тому тут є лише швидке оновлення.

Нехай f : N → - функція. Множина O ( f ) містить усі функції g : NN, для яких існують константи n 0N і cN такі, що для кожного nN з n > n 0 вірно, що g ( n ) ≤ c f ( п ).

Тепер ми готові підійти до реального питання.

Клас P містить усі мови L, для яких існує машина Тьюрінга D, яка визначає L, і константа kN така, що для кожного вводу w , D зупиняється після щонайбільше T (| w |) кроків для функції TO ( nn k ).

Оскільки O ( nn k ), хоча і математично правильно, незручно писати і читати, більшість людей - якщо чесно, всі, крім мене, - зазвичай пише просто O ( n k ).

Зауважимо, що пов'язана залежить від довжини w . Отже, аргумент, який ви вносите для мови простих ліній, є правильним лише для чисел у кодах unray , де для кодування w числа n - довжина кодування | w | пропорційна n . Ніхто ніколи не використовує таке кодування на практиці. Використовуючи більш досконалий алгоритм, ніж просто спробувати всі можливі фактори, можна виявити, однак, що мова простих чисел залишається в P, якщо входи кодуються у двійковій формі (або до будь-якої іншої бази). (Незважаючи на величезний інтерес, це могли довести лише Манідра Агравал, Нерадж Каял та Нітін Саксена у нагородженому документі 2004 року, тож можна здогадатися, що алгоритм не дуже простий.)

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

Кожен регулярний мову (мова описується регулярним виразом) в P .

Нехай Σ - алфавіт, а LΣ . Машина V, яка приймає закодований кортеж з двох слів w , cΣ і виводить 0 або 1 після кінцевого числа кроків, є верифікатором для L, якщо він має такі властивості.

  • Беручи під увагу ( ш , з ), V виходи 1 тільки тоді , коли WL .
  • Для кожного wL існує cΣ такий, що V ( w , c ) = 1.

З в наведеному вище визначенні, називається свідком (або сертифікат ).

Верификатор дозволяється давати неправдиві негативи для неправильного свідка , навіть якщо вага на насправді знаходиться в L . Однак не можна давати помилкові позитиви. Також потрібно, щоб у кожному слові на мові був принаймні один свідк.

Для мови КОМПОЗИТ, яка містить десяткові кодування всіх цілих чисел, які не є простими, свідченням може бути факторизація. Наприклад, (659, 709)є свідком для 467231∈ COMPOSITE. Ви можете легко переконатися, що на аркуші паперу, не маючи свідків, довести, що 467231 не є простим, було б складно без використання комп’ютера.

Ми нічого не говорили про те, як можна знайти відповідного свідка. Це недетермінована частина.

Клас NP містить усі мови L, для яких існує машина Тьюрінга V, яка перевіряє L і константу kN таким чином, що для кожного входу ( w , c ) V зупиняється після щонайбільше T (| w |) кроків для функції TO ( nn k ).

Зауважимо, що з наведеного визначення випливає, що для кожного wL існує свідок c з | c | ≤ T (| w |). (Машина Тьюрінга, можливо, не може розглянути більше символів свідка.)

NP - це супермножина P (чому?). Невідомо , чи існують мови, які в NP , але не в P .

Цілісна факторизація - це не сама мова. Однак ми можемо побудувати мову, яка представляє пов'язану з нею проблему рішення . Тобто мова, яка містить усі кортежі ( n , m ) такою, що n має фактор d з dm . Назвемо цю мову ФАКТОР. Якщо у вас є алгоритм для визначення FACTOR, він може бути використаний для обчислення повної факторизації лише з полиноми накладними, виконуючи рекурсивний бінарний пошук кожного основного фактора.

Неважко показати, що ФАКТОР знаходиться в НП . Відповідним свідком буде просто сам фактор d , і все, що повинен зробити верифікатор, це перевірити, що dm і n mod d = 0. Все це можна зробити за багаточлен. (Згадаймо ще раз, що саме довжина кодування рахується і є логарифмічною в n .)

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

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

Щоб вирішити ваше останнє питання, нам потрібно ввести скорочення . Скорочення є дуже потужною концепцією теоретичної інформатики. Зведення однієї проблеми до іншої в основному означає вирішення однієї проблеми шляхом вирішення іншої проблеми.

Нехай Σ - алфавіт, а A і B - мови понад Σ . A - багаточлен, багато-один зводиться до B, якщо існує функція f : Σ Σ з такими властивостями.

  • wA   ⇔   f ( w ) ∈ B   для всіх wΣ .
  • Функція f може бути обчислена машиною Тьюрінга для кожного вводу w за кілька кроків, обмежених поліном у | w |.

В цьому випадку ми пишемо ≤ р B .

Наприклад, нехай A - мова, яка містить усі графіки (закодовані як матриця суміжності), які містять трикутник. (Трикутник - цикл довжиною 3.) Нехай далі B - мова, яка містить усі матриці з ненульовим слідом. (Слід матриці є сумою його основних діагональних елементів.) Тоді поліноміален багато один зводиться до B . Щоб довести це, нам потрібно знайти відповідну функцію перетворення f . У цьому випадку ми можемо встановити f для обчислення 3- ї потужності матриці суміжності. Для цього потрібні два матрично-матричні вироби, кожен з яких має багаточленну складність.

Це тривіально вірно , що Lр л . (Чи можете ви довести це формально?)

Ми застосуємо це до NP зараз.

Мова L є NP- твердою тоді і тільки тоді, коли L '≤ p L для кожної мови L ' ∈ NP .

An NP -Жорсткий мови може або не може бути в НП сам.

Мова L - NP- незавершена, якщо і лише тоді

  • LNP і
  • L є NP -Жорсткий.

Найвідомішою NP- неповною мовою є SAT. Він містить усі булеві формули, які можна задовольнити. Наприклад, ( ab ) ∧ (¬ a ∨ ¬ b ) ∈ SAT. Дійсний свідок - { a = 1, b = 0}. Формула ( ab ) ∧ (¬ ab ) ∧ ¬ b ∉ SAT. (Як би ви це довели?)

Не важко показати, що SAT ∈ NP . Показати NP- стійкість SAT є деякою роботою, але це було зроблено в 1971 році Стівеном Куком .

Після того, як була відома одна NP- неповна мова, було досить просто показати NP- неповноту інших мов за допомогою скорочення. Якщо мова A, як відомо, є NP- твердою, то показуючи, що Ap B означає, що B також NP- твердий (через транзитивність “≤ p ”). У 1972 р. Річард Карп опублікував список з 21 мов, які він міг показати, як NP-повне через (транзитивне) зменшення SAT. (Це єдиний документ у цій відповіді, який я насправді рекомендую прочитати. На відміну від інших, це не важко зрозуміти і дає дуже гарне уявлення про те, як працює доведення NP- незавершеності за допомогою скорочення.)

Нарешті, короткий підсумок. Ми будемо використовувати символи NPH та NPC для позначення класів мов NP- твердих та NP- неповних відповідно.

  • PNP
  • NPCNP та NPCNPH , власне NPC = NPNPH за визначенням
  • ( ANP ) ∧ ( BNPH ) ⇒   Ap B

Зауважте, що включення NPCNP є правильним навіть у випадку, якщо P = NP . Щоб побачити це, зробити собі ясно , що ні одна нетривіального мова не може бути зведений до тривіального і є тривіальні мови в P , а також нетривіальні мови в НП . Хоча це (не дуже цікавий) кутовий випадок.

Додаток

Вашим основним джерелом плутанини здається, що ви думали про " n " в " O ( nf ( n ))" як інтерпретацію введення алгоритму, коли воно насправді стосується довжини введення. Це важлива відмінність, оскільки це означає, що асимптотична складність алгоритму залежить від кодування, що використовується для введення.

Цього тижня був досягнутий новий рекорд найбільшого відомого прем'єра Мерсенна . Найбільший на даний момент простий номер - 2 74 207 281 - 1. Це число настільки величезне, що болить у мене, тому я буду використовувати менший на наступному прикладі: 2 31 - 1 = 2 147 483 647. Це може бути кодованим по-різному.

  • за його показником Мерсенна як десяткове число: 31(2 байти)
  • як десяткове число: 2147483647(10 байт)
  • як одинарне число: 11111…11де його слід замінити на 2 147 483 640 більше 1с (майже 2 ГБ)

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

Наївний алгоритм тестування первинності є лише многочленом для одинарних кодувань. Тест первинності AKS є многочленом для десяткової (або будь-якої іншої основи b ≥ 2). Тест простоти люка-Лемера є найбільш відомим алгоритмом для простих чисел Мерсенна М р з р непарне просте число , але він по - , як і раніше експоненту в довжині двійкового кодування Mersenne показника ступеня р (полінома в р ).

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

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

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

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

У 1983 році Хана Гальперін та Аві Вігдерсон написали цікавий документ про складність загальних алгоритмів графіків, коли вхідне кодування графіка стискається логарифмічно. Для цих входів мова графіків, що містять трикутник зверху (де це було чітко в Р ), раптом стає NP- незавершеною.

І це тому, що мовні класи на зразок P і NP визначені для мов , а не для проблем .


Ця відповідь, мабуть, не корисна для рівня розуміння запитувача. Прочитайте інші відповіді і подивіться, з чим бореться Нанако. Як ви думаєте, ця відповідь допоможе йому / їй?
Андрес Ф.

Ця відповідь може не допомогти ОП, але, безумовно, допомагає іншим читачам (включаючи і мене).
Габріель

4

Я спробую дати вам менш неофіційне визначення для того ж.

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

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

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

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

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

Якщо щось залишається незрозумілим, спробуйте переглянути це відео: https://www.youtube.com/watch?v=YX40hbAHx3s

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

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