← головнаПрограмування

Що таке NP-складність?

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

NP-складність - це клас задач, для яких дуже складно знайти рішення, але легко перевірити правильність уже готового. Іншими словами, якщо ви здогадалися про відповідь, то перевірити її можна швидко, але сам процес пошуку займає надзвичайно багато часу.
Приклади NP-складних задач:
  • Задача комівояжера - як знайти найкоротший маршрут, що проходить через усі міста.
  • Розклад занять - скласти оптимальний розклад так, щоб усі викладачі, аудиторії та студенти збіглися без конфліктів.
  • Розбиття на підмножини - поділити набір чисел на групи з однаковою сумою.
Де це важливо в реальному житті:
  • Логістика та маршрути доставки.
  • Планування виробництва та розкладів.
  • Криптографія й безпека даних.
Простий Ruby-приклад для демонстрації ідеї повного перебору (на прикладі підмножин):
# NP-складна задача: пошук підмножини з потрібною сумою
numbers = [3, 7, 9, 11, 15]
target = 20

solutions = []

(1..numbers.size).each do |k|
  numbers.combination(k).each do |subset|
    solutions << subset if subset.sum == target
  end
end

puts "Знайдені рішення:"
solutions.each { |s| p s }
Результат:
Знайдені рішення:
[9, 11]
Тут видно одразу кілька варіантів. А якщо збільшити масив до 20–25 чисел, кількість перевірок різко зросте - саме так виглядає комбінаторний вибух, через який подібні NP-складні задачі стають практично нерозв’язними перебором.

🔥 Більше дописів

Всі публікації
Що таке integer overflow?
Програмування15 серп. '25, 08:28

Що таке integer overflow?

Integer overflow — це переповнення цілого числа, коли значення перевищує межу типу змінної. Для 3...

Що таке HAR file (HTTP Archive)?
Програмування25 серп. '25, 18:23

Що таке HAR file (HTTP Archive)?

HAR file (HTTP Archive) — це формат .har, що зберігає журнал роботи браузера з мережею. Він місти...

Що таке ivar у Ruby / Rails?
Програмування19 жовт. '25, 20:12

Що таке ivar у Ruby / Rails?

ivar у Ruby — це змінна екземпляра (instance variable), яка позначається @. У Rails вона передає ...