Однією з причин того, що ми бачимо різні складності апроксимації для проблем, повних NP, полягає в тому, що необхідні умови для NP-повного є дуже грубовиміреною мірою складності проблеми. Можливо, ви знайомі з основним визначенням проблеми як NP-завершеним:Π
- Π знаходиться в NP, і
- Для кожної іншої задачі в NP, ми можемо перетворити екземпляр з в екземпляр з в поліноміальний час таким чином, що - екземпляр так якщо і тільки якщо - екземпляр так " .ΞхΞуΠуΠхΞ
Розглянемо умову 2: все, що потрібно, це те, що ми можемо взяти і перетворити його в деякий який зберігає відповідь "однобітний" так / ні. Немає жодних умов щодо, наприклад, відносного розміру свідків "так" або "ні" (тобто розмір рішення в контексті оптимізації). Тож єдиний застосований захід - це загальний розмір вводу, який дає дуже слабкий стан щодо розміру розчину. Тож перетворити в досить "просто" .хуΞΠ
Ми можемо побачити різницю різних завдань, повних NP, переглядаючи складність деяких простих алгоритмів. -Кольорування має грубу силу (де - вхідний розмір). Для -Dominating Set, підхід грубої сили приймає . Це, по суті, найкращі точні алгоритми, які ми маємо. -Vertex Cover однак має дуже простий алгоритм (виберіть край, гілку, до якої слід включити кінцеву точку, позначте всі охоплені, продовжуйте продовжувати, поки у вас не буде маркованих країв або ви не натиснули ваш бюджеткО ( кн)нкО ( н.)к)кО ( 2кнc)кі бактрак). За скорочення багато-одного часу в багаточлен (скорочення Карпа, тобто те, що ми робимо в умовах 2 вище) ці проблеми є рівнозначними.
Коли ми починаємо підходити до складності ще з делікатнішими інструментами (складність наближення, параметризована складність, будь-які інші, про які я не можу придумати), скорочення, які ми використовуємо, стають більш суворими, а точніше, більш чутливими до структури рішення, і відмінності починають проявлятися; -Vertex Cover (як згадував Юваль) має просте 2-наближення (але не має FPTAS, якщо деякі класи складності не згортаються), -Dominating Set має алгоритм апроксимації (але немає -приближення для деяких ), а наближення насправді зовсім не має сенсу для прямої версії -Coloring.кк( 1 + журналn )( c журналn )c > 0к