← strona głównaProgramowanie (Програмування)

Czym jest NP-trudność?

NP-trudność - to klasa problemów, dla których bardzo trudno znaleźć rozwiązanie, ale łatwo sprawdzić poprawność już gotowego. Innymi słowy, jeśli zgadłeś odpowiedź, to można ją szybko zweryfikować, ale sam proces posz...

Ta treść została automatycznie przetłumaczona z ukraińskiego.
NP-trudność - to klasa problemów, dla których bardzo trudno znaleźć rozwiązanie, ale łatwo sprawdzić poprawność już gotowego. Innymi słowy, jeśli zgadłeś odpowiedź, to można ją szybko zweryfikować, ale sam proces poszukiwania zajmuje niezwykle dużo czasu.
Przykłady problemów NP-trudnych:
  • Problem komiwojażera - jak znaleźć najkrótszą trasę, która przechodzi przez wszystkie miasta.
  • Plan zajęć - stworzyć optymalny plan tak, aby wszyscy nauczyciele, sale i studenci zgrali się bez konfliktów.
  • Podział na podzbiory - podzielić zbiór liczb na grupy o równej sumie.
Gdzie to jest ważne w życiu codziennym:
  • Logistyka i trasy dostaw.
  • Planowanie produkcji i harmonogramów.
  • Kryptografia i bezpieczeństwo danych.
Prosty przykład w Ruby do demonstrowania idei pełnego przeszukiwania (na przykładzie podzbiorów):
# NP-trudny problem: wyszukiwanie podzbioru o wymaganej sumie
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 "Znalezione rozwiązania:"
solutions.each { |s| p s }
Wynik:
Znalezione rozwiązania:
[9, 11]
Widać tutaj od razu kilka wariantów. A jeśli zwiększyć tablicę do 20–25 liczb, liczba sprawdzeń gwałtownie wzrośnie - tak właśnie wygląda wybuch kombinatoryczny, przez który podobne problemy NP-trudne stają się praktycznie nierozwiązywalne przez przeszukiwanie.

🔥 Więcej postów

Wszystkie wpisy
Co to jest przepełnienie całkowite?
Programowanie (Програмування)15 sie '25 08:28

Co to jest przepełnienie całkowite?

Masz licznik, który może liczyć tylko do pewnej liczby. Na przykład, kieszonkowy kalkulator, któr...

Co to jest plik HAR (HTTP Archive)?
Programowanie (Програмування)25 sie '25 18:23

Co to jest plik HAR (HTTP Archive)?

Plik HAR (HTTArchive) - to specjalny format pliku .har, w którym przechowywany jest dziennik prac...

Czym jest złożoność faktorialna?
Programowanie (Програмування)16 wrz '25 19:03

Czym jest złożoność faktorialna?

Funkcjonalna złożoność - to sytuacja, gdy liczba wariantów lub kombinacji rośnie jak silnia liczb...

Czym jest ivar w Ruby / Rails?
Programowanie (Програмування)19 paź '25 20:12

Czym jest ivar w Ruby / Rails?

ivar - to skrót od instance variable (zmienna instancji). W Ruby zapisuje się ją z @ przed nazwą,...

Podstawowe metody uwierzytelniania w API
Programowanie (Програмування)19 paź '25 20:26

Podstawowe metody uwierzytelniania w API

Kiedy tworzymy API w Ruby on Rails, ważne jest, aby kontrolować, kto ma dostęp do zasobów. Oto po...

Czym różni się OAuth 1 od OAuth 2
Programowanie (Програмування)19 paź '25 20:34

Czym różni się OAuth 1 od OAuth 2

OAuth 1 OAuth 1 został opracowany na początku lat 2000 jako sposób bezpiecznego dostępu aplikacji...

Czym jest ORM i po co jest potrzebny?
Programowanie (Програмування)26 paź '25 14:00

Czym jest ORM i po co jest potrzebny?

Kiedy pracujemy z bazami danych, zazwyczaj musimy pisać zapytania SQL - selekcje, wstawienia, akt...